diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-15 08:51:12 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-15 08:51:12 +0000 |
commit | e6fe72b18301472952d434e383cd7e47975bb920 (patch) | |
tree | 02053dbd5450a360b05e1543750b2678c4ce656b | |
parent | 3b975132bfeb310121d29c0cd05961bc289b8e0e (diff) |
automatic import of python-blender-asset-tracer
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-blender-asset-tracer.spec | 582 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 584 insertions, 0 deletions
@@ -0,0 +1 @@ +/blender_asset_tracer-1.15.tar.gz diff --git a/python-blender-asset-tracer.spec b/python-blender-asset-tracer.spec new file mode 100644 index 0000000..5c9aaea --- /dev/null +++ b/python-blender-asset-tracer.spec @@ -0,0 +1,582 @@ +%global _empty_manifest_terminate_build 0 +Name: python-blender-asset-tracer +Version: 1.15 +Release: 1 +Summary: BAT parses Blend files and produces dependency information. After installation run `bat --help` +License: GPL-2.0+ +URL: https://developer.blender.org/project/profile/79/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/52/0b/a218ff957ca801b249c2e7ce45077e1e2b0f16053855eabff520669cc525/blender_asset_tracer-1.15.tar.gz +BuildArch: noarch + +Requires: python3-boto3 +Requires: python3-requests +Requires: python3-zstandard + +%description +# Blender Asset Tracer BAT🦇 + +Script to manage assets with Blender. + +Blender Asset Tracer, a.k.a. BAT🦇, is the replacement of +[BAM](https://developer.blender.org/diffusion/BAM/) and +[blender-file](https://developer.blender.org/source/blender-file/) + +Development is driven by choices explained in [T54125](https://developer.blender.org/T54125). + +## Setting up development environment + +``` +python3.9 -m venv .venv +. ./.venv/bin/activate +pip install -U pip +pip install poetry black +poetry install +mypy --install-types +``` + + +## Uploading to S3-compatible storage + +BAT Pack supports uploading to S3-compatible storage. This requires a credentials file in +`~/.aws/credentials`. Replace the all-capital words to suit your situation. + + [ENDPOINT] + aws_access_key_id = YOUR_ACCESS_KEY_ID + aws_secret_access_key = YOUR_SECRET + +You can then send a BAT Pack to the storage using a target `s3:/ENDPOINT/bucketname/path-in-bucket`, +for example: + + bat pack my_blendfile.blend s3:/storage.service.cloud/jobs/awesome_work + +This will upload the blend file and its dependencies to `awesome_work/my_blendfile.blend` in +the `jobs` bucket. + + +## Paths + +There are two object types used to represent file paths. Those are strictly separated. + +1. `bpathlib.BlendPath` represents a path as stored in a blend file. It consists of bytes, and is + blendfile-relative when it starts with `//`. It can represent any path from any OS Blender + supports, and as such should be used carefully. +2. `pathlib.Path` represents an actual path, possibly on the local filesystem of the computer + running BAT. Any filesystem operation (such as checking whether it exists) must be done using a + `pathlib.Path`. + +When it is necessary to interpret a `bpathlib.BlendPath` as a real path instead of a sequence of +bytes, BAT first attempts to decode it as UTF-8. If that fails, the local filesystem encoding is +used. The latter is also no guarantee of correctness, though. + + +## Type checking + +The code statically type-checked with [mypy](http://mypy-lang.org/). + +Mypy likes to see the return type of `__init__` methods explicitly declared as `None`. Until issue +[#604](https://github.com/python/mypy/issues/604) is resolved, we just do this in our code too. + + +## Code Example + +BAT can be used as a Python library to inspect the contents of blend files, without having to +open Blender itself. Here is an example showing how to determine the render engine used: + + #!/usr/bin/env python3.7 + import json + import sys + from pathlib import Path + + from blender_asset_tracer import blendfile + from blender_asset_tracer.blendfile import iterators + + if len(sys.argv) != 2: + print(f'Usage: {sys.argv[0]} somefile.blend', file=sys.stderr) + sys.exit(1) + + bf_path = Path(sys.argv[1]) + bf = blendfile.open_cached(bf_path) + + # Get the first window manager (there is probably exactly one). + window_managers = bf.find_blocks_from_code(b'WM') + assert window_managers, 'The Blend file has no window manager' + window_manager = window_managers[0] + + # Get the scene from the first window. + windows = window_manager.get_pointer((b'windows', b'first')) + for window in iterators.listbase(windows): + scene = window.get_pointer(b'scene') + break + + # BAT can only return simple values, so it can't return the embedded + # struct 'r'. 'r.engine' is a simple string, though. + engine = scene[b'r', b'engine'].decode('utf8') + xsch = scene[b'r', b'xsch'] + ysch = scene[b'r', b'ysch'] + size = scene[b'r', b'size'] / 100.0 + + render_info = { + 'engine': engine, + 'frame_pixels': { + 'x': int(xsch * size), + 'y': int(ysch * size), + }, + } + + json.dump(render_info, sys.stdout, indent=4, sort_keys=True) + print() + +To understand the naming of the properties, look at Blender's `DNA_xxxx.h` files with struct +definitions. It is those names that are accessed via `blender_asset_tracer.blendfile`. The +mapping to the names accessible in Blender's Python interface can be found in the `rna_yyyy.c` +files. + + +## Code Guidelines + +This section documents some guidelines for the code in BAT. + +### Avoiding Late Imports + +All imports should be done at the top level of the file, and not inside +functions. The goal is to ensure that, once imported, a (sub)module of BAT can +be used without having to import more parts of BAT. + +This requirement helps to keep Blender add-ons separated, as an add-on can +import the modules of BAT it needs, then remove them from `sys.modules` and +`sys.path` so that other add-ons don't see them. This should reduce problems +with various add-ons shipping different versions of BAT. + +## Publishing a New Release + +For uploading packages to PyPi, an API key is required; username+password will +not work. + +First, generate an API token at https://pypi.org/manage/account/token/. Then, +use this token when publishing instead of your username and password. + +As username, use `__token__`. +As password, use the token itself, including the `pypi-` prefix. + +See https://pypi.org/help/#apitoken for help using API tokens to publish. This +is what I have in `~/.pypirc`: + +``` +[distutils] +index-servers = + bat + +# Use `twine upload -r bat` to upload with this token. +[bat] + repository = https://upload.pypi.org/legacy/ + username = __token__ + password = pypi-abc-123-blablabla +``` + +``` +. ./.venv/bin/activate +pip install twine + +poetry build +twine check dist/blender_asset_tracer-1.15.tar.gz dist/blender_asset_tracer-1.15-*.whl +twine upload -r bat dist/blender_asset_tracer-1.15.tar.gz dist/blender_asset_tracer-1.15-*.whl +``` + + + +%package -n python3-blender-asset-tracer +Summary: BAT parses Blend files and produces dependency information. After installation run `bat --help` +Provides: python-blender-asset-tracer +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-blender-asset-tracer +# Blender Asset Tracer BAT🦇 + +Script to manage assets with Blender. + +Blender Asset Tracer, a.k.a. BAT🦇, is the replacement of +[BAM](https://developer.blender.org/diffusion/BAM/) and +[blender-file](https://developer.blender.org/source/blender-file/) + +Development is driven by choices explained in [T54125](https://developer.blender.org/T54125). + +## Setting up development environment + +``` +python3.9 -m venv .venv +. ./.venv/bin/activate +pip install -U pip +pip install poetry black +poetry install +mypy --install-types +``` + + +## Uploading to S3-compatible storage + +BAT Pack supports uploading to S3-compatible storage. This requires a credentials file in +`~/.aws/credentials`. Replace the all-capital words to suit your situation. + + [ENDPOINT] + aws_access_key_id = YOUR_ACCESS_KEY_ID + aws_secret_access_key = YOUR_SECRET + +You can then send a BAT Pack to the storage using a target `s3:/ENDPOINT/bucketname/path-in-bucket`, +for example: + + bat pack my_blendfile.blend s3:/storage.service.cloud/jobs/awesome_work + +This will upload the blend file and its dependencies to `awesome_work/my_blendfile.blend` in +the `jobs` bucket. + + +## Paths + +There are two object types used to represent file paths. Those are strictly separated. + +1. `bpathlib.BlendPath` represents a path as stored in a blend file. It consists of bytes, and is + blendfile-relative when it starts with `//`. It can represent any path from any OS Blender + supports, and as such should be used carefully. +2. `pathlib.Path` represents an actual path, possibly on the local filesystem of the computer + running BAT. Any filesystem operation (such as checking whether it exists) must be done using a + `pathlib.Path`. + +When it is necessary to interpret a `bpathlib.BlendPath` as a real path instead of a sequence of +bytes, BAT first attempts to decode it as UTF-8. If that fails, the local filesystem encoding is +used. The latter is also no guarantee of correctness, though. + + +## Type checking + +The code statically type-checked with [mypy](http://mypy-lang.org/). + +Mypy likes to see the return type of `__init__` methods explicitly declared as `None`. Until issue +[#604](https://github.com/python/mypy/issues/604) is resolved, we just do this in our code too. + + +## Code Example + +BAT can be used as a Python library to inspect the contents of blend files, without having to +open Blender itself. Here is an example showing how to determine the render engine used: + + #!/usr/bin/env python3.7 + import json + import sys + from pathlib import Path + + from blender_asset_tracer import blendfile + from blender_asset_tracer.blendfile import iterators + + if len(sys.argv) != 2: + print(f'Usage: {sys.argv[0]} somefile.blend', file=sys.stderr) + sys.exit(1) + + bf_path = Path(sys.argv[1]) + bf = blendfile.open_cached(bf_path) + + # Get the first window manager (there is probably exactly one). + window_managers = bf.find_blocks_from_code(b'WM') + assert window_managers, 'The Blend file has no window manager' + window_manager = window_managers[0] + + # Get the scene from the first window. + windows = window_manager.get_pointer((b'windows', b'first')) + for window in iterators.listbase(windows): + scene = window.get_pointer(b'scene') + break + + # BAT can only return simple values, so it can't return the embedded + # struct 'r'. 'r.engine' is a simple string, though. + engine = scene[b'r', b'engine'].decode('utf8') + xsch = scene[b'r', b'xsch'] + ysch = scene[b'r', b'ysch'] + size = scene[b'r', b'size'] / 100.0 + + render_info = { + 'engine': engine, + 'frame_pixels': { + 'x': int(xsch * size), + 'y': int(ysch * size), + }, + } + + json.dump(render_info, sys.stdout, indent=4, sort_keys=True) + print() + +To understand the naming of the properties, look at Blender's `DNA_xxxx.h` files with struct +definitions. It is those names that are accessed via `blender_asset_tracer.blendfile`. The +mapping to the names accessible in Blender's Python interface can be found in the `rna_yyyy.c` +files. + + +## Code Guidelines + +This section documents some guidelines for the code in BAT. + +### Avoiding Late Imports + +All imports should be done at the top level of the file, and not inside +functions. The goal is to ensure that, once imported, a (sub)module of BAT can +be used without having to import more parts of BAT. + +This requirement helps to keep Blender add-ons separated, as an add-on can +import the modules of BAT it needs, then remove them from `sys.modules` and +`sys.path` so that other add-ons don't see them. This should reduce problems +with various add-ons shipping different versions of BAT. + +## Publishing a New Release + +For uploading packages to PyPi, an API key is required; username+password will +not work. + +First, generate an API token at https://pypi.org/manage/account/token/. Then, +use this token when publishing instead of your username and password. + +As username, use `__token__`. +As password, use the token itself, including the `pypi-` prefix. + +See https://pypi.org/help/#apitoken for help using API tokens to publish. This +is what I have in `~/.pypirc`: + +``` +[distutils] +index-servers = + bat + +# Use `twine upload -r bat` to upload with this token. +[bat] + repository = https://upload.pypi.org/legacy/ + username = __token__ + password = pypi-abc-123-blablabla +``` + +``` +. ./.venv/bin/activate +pip install twine + +poetry build +twine check dist/blender_asset_tracer-1.15.tar.gz dist/blender_asset_tracer-1.15-*.whl +twine upload -r bat dist/blender_asset_tracer-1.15.tar.gz dist/blender_asset_tracer-1.15-*.whl +``` + + + +%package help +Summary: Development documents and examples for blender-asset-tracer +Provides: python3-blender-asset-tracer-doc +%description help +# Blender Asset Tracer BAT🦇 + +Script to manage assets with Blender. + +Blender Asset Tracer, a.k.a. BAT🦇, is the replacement of +[BAM](https://developer.blender.org/diffusion/BAM/) and +[blender-file](https://developer.blender.org/source/blender-file/) + +Development is driven by choices explained in [T54125](https://developer.blender.org/T54125). + +## Setting up development environment + +``` +python3.9 -m venv .venv +. ./.venv/bin/activate +pip install -U pip +pip install poetry black +poetry install +mypy --install-types +``` + + +## Uploading to S3-compatible storage + +BAT Pack supports uploading to S3-compatible storage. This requires a credentials file in +`~/.aws/credentials`. Replace the all-capital words to suit your situation. + + [ENDPOINT] + aws_access_key_id = YOUR_ACCESS_KEY_ID + aws_secret_access_key = YOUR_SECRET + +You can then send a BAT Pack to the storage using a target `s3:/ENDPOINT/bucketname/path-in-bucket`, +for example: + + bat pack my_blendfile.blend s3:/storage.service.cloud/jobs/awesome_work + +This will upload the blend file and its dependencies to `awesome_work/my_blendfile.blend` in +the `jobs` bucket. + + +## Paths + +There are two object types used to represent file paths. Those are strictly separated. + +1. `bpathlib.BlendPath` represents a path as stored in a blend file. It consists of bytes, and is + blendfile-relative when it starts with `//`. It can represent any path from any OS Blender + supports, and as such should be used carefully. +2. `pathlib.Path` represents an actual path, possibly on the local filesystem of the computer + running BAT. Any filesystem operation (such as checking whether it exists) must be done using a + `pathlib.Path`. + +When it is necessary to interpret a `bpathlib.BlendPath` as a real path instead of a sequence of +bytes, BAT first attempts to decode it as UTF-8. If that fails, the local filesystem encoding is +used. The latter is also no guarantee of correctness, though. + + +## Type checking + +The code statically type-checked with [mypy](http://mypy-lang.org/). + +Mypy likes to see the return type of `__init__` methods explicitly declared as `None`. Until issue +[#604](https://github.com/python/mypy/issues/604) is resolved, we just do this in our code too. + + +## Code Example + +BAT can be used as a Python library to inspect the contents of blend files, without having to +open Blender itself. Here is an example showing how to determine the render engine used: + + #!/usr/bin/env python3.7 + import json + import sys + from pathlib import Path + + from blender_asset_tracer import blendfile + from blender_asset_tracer.blendfile import iterators + + if len(sys.argv) != 2: + print(f'Usage: {sys.argv[0]} somefile.blend', file=sys.stderr) + sys.exit(1) + + bf_path = Path(sys.argv[1]) + bf = blendfile.open_cached(bf_path) + + # Get the first window manager (there is probably exactly one). + window_managers = bf.find_blocks_from_code(b'WM') + assert window_managers, 'The Blend file has no window manager' + window_manager = window_managers[0] + + # Get the scene from the first window. + windows = window_manager.get_pointer((b'windows', b'first')) + for window in iterators.listbase(windows): + scene = window.get_pointer(b'scene') + break + + # BAT can only return simple values, so it can't return the embedded + # struct 'r'. 'r.engine' is a simple string, though. + engine = scene[b'r', b'engine'].decode('utf8') + xsch = scene[b'r', b'xsch'] + ysch = scene[b'r', b'ysch'] + size = scene[b'r', b'size'] / 100.0 + + render_info = { + 'engine': engine, + 'frame_pixels': { + 'x': int(xsch * size), + 'y': int(ysch * size), + }, + } + + json.dump(render_info, sys.stdout, indent=4, sort_keys=True) + print() + +To understand the naming of the properties, look at Blender's `DNA_xxxx.h` files with struct +definitions. It is those names that are accessed via `blender_asset_tracer.blendfile`. The +mapping to the names accessible in Blender's Python interface can be found in the `rna_yyyy.c` +files. + + +## Code Guidelines + +This section documents some guidelines for the code in BAT. + +### Avoiding Late Imports + +All imports should be done at the top level of the file, and not inside +functions. The goal is to ensure that, once imported, a (sub)module of BAT can +be used without having to import more parts of BAT. + +This requirement helps to keep Blender add-ons separated, as an add-on can +import the modules of BAT it needs, then remove them from `sys.modules` and +`sys.path` so that other add-ons don't see them. This should reduce problems +with various add-ons shipping different versions of BAT. + +## Publishing a New Release + +For uploading packages to PyPi, an API key is required; username+password will +not work. + +First, generate an API token at https://pypi.org/manage/account/token/. Then, +use this token when publishing instead of your username and password. + +As username, use `__token__`. +As password, use the token itself, including the `pypi-` prefix. + +See https://pypi.org/help/#apitoken for help using API tokens to publish. This +is what I have in `~/.pypirc`: + +``` +[distutils] +index-servers = + bat + +# Use `twine upload -r bat` to upload with this token. +[bat] + repository = https://upload.pypi.org/legacy/ + username = __token__ + password = pypi-abc-123-blablabla +``` + +``` +. ./.venv/bin/activate +pip install twine + +poetry build +twine check dist/blender_asset_tracer-1.15.tar.gz dist/blender_asset_tracer-1.15-*.whl +twine upload -r bat dist/blender_asset_tracer-1.15.tar.gz dist/blender_asset_tracer-1.15-*.whl +``` + + + +%prep +%autosetup -n blender-asset-tracer-1.15 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-blender-asset-tracer -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 1.15-1 +- Package Spec generated @@ -0,0 +1 @@ +a47788ab764dc0378a6b8827846c02f9 blender_asset_tracer-1.15.tar.gz |