Sybren A. Stüvel
6edc15594d
Added utility function to fetching structs by name
2018-07-03 12:34:00 +02:00
Sybren A. Stüvel
5f966934df
Blender 2.8 fixes because of removed Material.mtex and Material.group
2018-06-07 15:18:18 +02:00
Sybren A. Stüvel
8b73b86734
Reduce cyclomatic complexity of Struct.field_get()
2018-03-22 10:56:02 +01:00
Sybren A. Stüvel
53e22a4a2f
Added GPL comment blocks with proper attibution.
2018-03-16 13:25:20 +01:00
Sybren A. Stüvel
cc06a191a1
Added more annotations for mypy
...
Function declarations that have no type annotations at all will be skipped
by mypy. Adding an explicit `-> None` tells mypy to run on those functions
too.
2018-03-09 14:23:43 +01:00
Sybren A. Stüvel
824ca4bcb7
Rewrite blend files in temporary directory, before copying
...
This allows us to later support uploading to a non-local filesystem, such
as Amazon S3 cloud storage, after path rewriting is complete.
2018-03-09 12:33:15 +01:00
Sybren A. Stüvel
fdbbc3a20d
Static type checking with mypy
...
This does introduce some not-so-nice things, like having to annotate each
`__init__` function with `-> None`. However, the benefits of having static
type checking in a complex bit of software like BAT outweigh the downsides.
2018-03-09 11:09:47 +01:00
Sybren A. Stüvel
e03e0fb4d7
Reduced some log levels
2018-03-08 14:53:25 +01:00
Sybren A. Stüvel
0dab872289
Truncate UTF-8 in a way that produces valid UTF-8.
2018-03-08 14:47:41 +01:00
Sybren A. Stüvel
f2f824ad85
Speed up BlendFileBlock instantiation with __slots__
...
Due to the huge number of BlendFileBlock objects created for packing a
production-size blend file, using slots here actually makes the
dependency tracer significantly (p<0.001) faster. In my test case the
speed improvement was 16% for a 'bam list' command.
2018-03-08 13:59:28 +01:00
Sybren A. Stüvel
9af913d69a
Removed find_block_from_address() in favour of dereference_pointer()
2018-03-08 11:08:36 +01:00
Sybren A. Stüvel
ccdccd69cf
Speed up rewriting paths by reusing cached DNA structs & blocks
2018-03-08 10:59:45 +01:00
Sybren A. Stüvel
cc20b0bfd5
Sort queue of blocks to visit by blend file and on-disk order
...
This gives a small speedup to dependency tracing.
2018-03-07 17:14:35 +01:00
Sybren A. Stüvel
09a0866c14
Cache open blend files
...
This simplifies blend file handling, ensuring that blend files are only
opened once. Otherwise it would be harder to handle things like dependency
diamonds (libraries that are referenced via multiple paths through multiple
other libraries).
2018-03-07 17:13:47 +01:00
Sybren A. Stüvel
71dd5bc11b
Path rewriting when packing.
...
Doesn't work with sequences, nor with split dirname/basename fields.
2018-03-06 16:06:36 +01:00
Sybren A. Stüvel
8009ff1e47
Added block expansion
...
The expansion process follows pointers and library links to construct
the full set of actually-used data blocks. This set consists of all data
blocks in the initial blend file, and all *actually linked-to* data
blocks in linked blend files.
I've also removed non-recursive dependency listing.
2018-03-02 15:44:07 +01:00
Sybren A. Stüvel
7167d51730
Added BlendFileBlock.id_name property
...
Evaluated only once, so safe to call multiple times without producing
excessive disk I/O. Returns None instead of raising KeyError when there is
no (b'id', b'name') field.
2018-03-02 11:26:02 +01:00
Sybren A. Stüvel
f46e761f09
Removed base_index parameter in favour of explicit array handling
...
The `base_index` parameter is confusing and only works in a limited number
of cases. Having explicit functions to deal with those cases is preferred.
2018-03-01 12:50:22 +01:00
Sybren A. Stüvel
86af05e823
Added recursion into library blend files.
2018-02-28 12:42:27 +01:00
Sybren A. Stüvel
a5bc52523d
Some more comments
2018-02-28 11:16:58 +01:00
Sybren A. Stüvel
65b690e998
Added block walker implementations + tests
2018-02-27 17:30:28 +01:00
Sybren A. Stüvel
59c0b6df4c
Allow block.get() to return the dna.Field
...
This is needed by the upcoming dependency tracer.
2018-02-26 18:15:14 +01:00
Sybren A. Stüvel
a56e985cdc
Unify behaviour of block[path] and block.get(path)
2018-02-26 18:14:23 +01:00
Sybren A. Stüvel
127f357e49
Marked set() as ported
2018-02-23 15:54:13 +01:00
Sybren A. Stüvel
bce5f4b670
Ported get_file_offset() and renamed to abs_offset()
2018-02-23 15:53:26 +01:00
Sybren A. Stüvel
aed1827ff7
Moved pad_up_4() to inner function as it's only used there.
2018-02-23 15:44:57 +01:00
Sybren A. Stüvel
55075c09b6
Ported get_data_hash() and renamed to hash()
2018-02-23 15:42:48 +01:00
Sybren A. Stüvel
9750a91571
Fixed file leak when opening corrupted file.
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
eb8281ea82
Fix leaking file object when loading non-blend file
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
8e0b135eb3
Fixed recompressing after modification
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
67751d9a3e
Fixed loading compressed files
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
b42a090f32
Support for modifying string/bytes fields.
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
efc60f437b
Improved BFB.set() a bit, not yet tested at all.
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
934a8e210e
Clarified type refinement, simplified API, custom exception for get_pointer
...
Type refinement is now only done with BlendFileBlock.refine_type(), and
no longer with sdna_index_refine parameters to various functions. This
simplifies the API at the expense of having to call two simple functions
instead of one more complex one.
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
9c8766a28c
str → repr
2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
42413c4d99
Added some TODOs
2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
74ef3877c6
Renamed internal func and removed an iteration over self.blocks
2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
8d32ab513f
Recursively add offsets of Struct.field_from_path()
2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
480b82337e
Some simplifications
2018-02-22 17:44:50 +01:00
Sybren A. Stüvel
968068d21d
Better exception message
2018-02-22 17:44:50 +01:00
Sybren A. Stüvel
63c7e4fcef
Ported iteration over properties
2018-02-22 17:44:50 +01:00
Sybren A. Stüvel
7165d121bd
Ported BlendFileBlock.get_recursive_iter()
...
Also simplified get_file_offset(), because its optional parameters are
never used anyway.
2018-02-22 16:45:16 +01:00
Sybren A. Stüvel
87300df6a3
Fixed issue reading array items and renamed some stuff
2018-02-22 16:14:10 +01:00
Sybren A. Stüvel
9c7791f762
Implemented/fixed/ported loading of blend files and getting blocks & props
2018-02-22 15:52:10 +01:00
Sybren A. Stüvel
e66b1edaf4
Implemented + tested dna.Struct.field_get
2018-02-22 14:50:24 +01:00
Sybren A. Stüvel
dcda85c3e6
Ported dna.Name, dna.Field, and started with dna.Struct
2018-02-22 14:50:24 +01:00
Sybren A. Stüvel
0532634d13
Initial check-in, not yet working and has old, unported BAM code
2018-02-22 14:50:10 +01:00