Factorio-draftsman

Latest version: v2.0.1

Safety actively analyzes 723166 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 5

1.0.3

* Updated `factorio-data` to version `1.1.76` (latest stable)
* Updated `compatibility/defines.lua` to `1.1.76` (latest stable)
* Merged penguincounter's pull request:
* Fixed logistics requester and buffer chest signatures not having the correct `circuit_mode_of_operation` key
* Added a `dump_format()` method to entities that outputs a user friendly description of all of the possible key/value entries in the exported blueprint dict
* Still needs to be done for Blueprintable; ideally there would be a `Exportable` parent class that would implement the madness
* Also need to investigate faster validation options since schema is pretty slow; maybe we can unify and improve speed at the same time
* Added a `get_format()` method intended to get a readable formatted string (that can easily be autogenerated at the top of each entity in the documentation! Not yet but soon)
* Changed `_exports` dict to be both more user readable and only defined on a per class basis instead of a per instance basis (so memory usage should be down)
* Prepped `env.py` for when Lupa version 2.0 goes live (which will resolve 50)
* Fixed `"Mining_Drones_Harder"` mod not loading because of stray "__MACOSX" folder defined alongside (55)
* Fixed `"FactorioExtended-Plus-Logistics"` not loading due to internal file titled `__init__.lua` (56)
* Fixed `env.extract_entities().categorize_entities()` to `get` flags instead of assuming they exist (`"flags"` set is common but optional)

1.0.2

* Added `UpgradePlanner` and `DeconstructionPlanner` (40)
* Created an abstract class `Blueprintable` which now implements `Blueprint`, `BlueprintBook`, `UpgradePlanner`, and `DeconstructionPlanner` to increase code reuse
* Added `description` attribute to `Blueprint` and `BlueprintBook` (41)
* Changed the behavior of `draftsman-update` to normalize all mod names to have no spaces (probably not perfect, but should work for now) (49)
* Added a `--path` argument to `draftsman-update` so you can specify exactly where to load mods from instead of only the installation directory (49)
* Draftsman now distributes with a vanilla set of pickle data files, so you no longer need to run `draftsman-update` on first install (suggestion from rpdelaney)
* Rolling Stock (Locomotives and Wagons) should now have proper collisions that are based on their `orientation` and issue correct warnings (47)
* Updated the documentation around `draftsman-update` to make it more clear and reflect recent changes
* Updated all `Blueprintable` documentation files such that they now include a plaintext representation of their JSON structure

1.0.1

* Updated `factorio-data` to version `1.1.65`
* Fixed 38 and 39

1.0.0

* Updated `factorio-data` to version `1.1.61`
* Added a `Vector` class to represent 2d positions, and changed most of the code to reflect this change
* This is a breaking change, but it should be much more natural to access positions by attribute `x` and `y` instead of `["x"]` and `["y"]`
* By specifying a class like this, custom operators are allowed such as vector math, which means that offsetting positions and other operations have become much easier as a result
* `Vector` has a static member function `from_other()` that constructs a `Vector` object from all valid formats accepted in the past (`tuple`, `dict`, `list`, etc.) which is used in all standard functions, so you shouldn't have to change any of their signatures
* `Vector` also has a `to_dict()` method to turn it back into it's dictionary format for exporting (`{"x": ..., "y": ...}`)
* The `Vector` class is only used on the "outermost" layer due to performance reasons, internally the most common representation is still `list[float, float]`
* Added an abstract `Shape` class, along with two implementations: `AABB` and `Rectangle`
* `AABB` and `Rectangle` are now used for issuing `OverlappingObjectWarning`
* All functions that used to use `Sequences` or `list[list[float], list[float]]` have been changed to `Vector` and `AABB` respectively for user clarity
* Added another class: `CollisionSet`, which is a list of `Shapes` used for checking if two `Entity`s intersect one another
* This was needed because curved rails have 2 collision boxes instead of a single one
* Collision sets also support rotations, which means that rotations are automatically generated or specified manually for edge cases like rails
* In essence, `CollisionSets` provide more flexibility for entity footprints on a per-entity-type (or even per-entity) level
* Added `find_entity_at_position()` so you can simply check for any entity in particular at a position instead of having to use fully-blown `find_entities_filtered` or the more-specific `find_entity()` function
* Abstracted `SpatialHashMap` to be an implementation of abstract class `SpatialDataStructure`, which will allow for different implementations such as quadtrees or other algorithms if they happen to be more performant than hash-mapping (For now all `Collections` still use `SpatialHashMap` though)
* Renamed `entity_hashmap` and `tile_hashmap` to more generic `entity_map` and `tile_map` to reflect the above change
* Move almost all entity insert/set/remove logic to `EntityCollection.on_entity_insert`, `on_entity_set`, and `on_entity_remove`, which gets called from `EntityList.insert` and related
* Added `on_tile_insert`, `on_tile_set`, and `on_tile_remove` to `TileCollection` to mirror the changes to `EntityCollection`
* Added `copy` keyword to `TileList.insert` and `TileList.append` to mirror `EntityList.insert` and `EntityList.append`
* Added Entity/Tile merging
* Added `merge` keyword to both `EntityList.insert/append` and `TileList.insert/append`
* Attempting to use `merge=True` keywords and `copy=False` will result in a `ValueError`, as this behavior is loosely defined (for now at least)
* Rails now properly issue `OverlappingObjectsWarnings`; Rails can overlap each other provided they don't have the exact same position + direction + type
* Another big documentation pass
* Split the `signatures.CONTROL_BEHAVIOR` into many sub implementations, which should improve both safety and (hopefully) performance
* Fixed 24, 25, 27, 32, 33, and 34

0.9.7

* Merged louga31's pull request
* Rewrite of the `_shift_key_indices` in `EntityList` to make it faster using list comprehension
* Merged elswindle's pull request
* Moved conversion of associations from `Blueprint.load_from_string` to `Blueprint.setup` so they always take place
* Fixed `UndergroundBelt` `io_type` attribute not reading correctly from key `type`
* Changed test case to account for this
* Added `DirectionalMixin` to `AssemblingMachine` (as technically it can have it in select circumstances)
* Fixed load conflict between `items` and `recipe` in `AssemblingMachine` (23)
* Fixed `setup.py` so that it properly requires `typing_extensions` on versions of Python prior to 3.8 (30)
* Fixed importing `Literal` so that it follows the above change (30)
* Fixed an issue where `BlueprintBook` icons were not properly set and issued an incorrect warning (31)

0.9.6

* Merged sposker's pull request
* Fixed an bug where `IndexError` would be triggered on setting the final item filter slot
* Updated `signatures.CONTROL_BEHAVIOR` to include the `send_to_train` key
* Merged elswindle's pull request
* Dictionary Blueprints and BlueprintBook's are now properly converted to `Blueprint` and `BlueprintBook` objects when added to a `BlueprintableList`
* Fixed documentation for `FilterMixin.set_item_filters` that labeled `"name"` key as `"signal"`
* Made docs for `FilterMixin.set_item_filters` and `FilterMixin.set_item_filter` more clear
* Changed `signals.raw` to actually be the extraction from `data.raw` so people can query the order strings and other information (17)
* Sorted `signals.raw` according to signal-processing order (virtual -> fluid -> item) instead of item sort order (17)
* Added `signals.type_of` as a more specific structure to fulfill the old functionality of `signals.raw` (17)
* Changed the functionality of `ConstantCombinator` so that attempting to set one of it's signals to a pure virtual signal results in a `DraftsmanWarning` (because for some grotesque reason Factorio actually allows this)
* Renamed `InvalidConnectionError` to more general `InvalidAssociationError` and updated documentation
* Removed requirement for `Groups` to have an ID associated with it (this was required in the past, but is no longer necessary)
* Fixed unable to find connectable entities when calling `Blueprint.generate_power_connections()` on blueprint that contained `Groups` (19)
* Added the capability to specify connections based on entity reference as well instead of just ID or index (`[add/remove]_power_connection`, `[add/remove]_circuit_connection`) (19)
* Made these functions issue `InvalidAssociationError` when attempting to connect two entities that lie outside of the `EntityCollection`
* Added recursive `__contains__` function to `EntityList` to facilitate the above
* Fixed copying of entities between `Blueprints` and `Groups` (20)
* Added capability to deepcopy `Entities`, `Groups`, and `Blueprints`, with appropriate errors
* Added capability to set the `entities` of a `Blueprint` or `Group` to another `Blueprints` or `Groups` `entities` (16)
* Added optional `string` keyword for the constructor of `Group` so you can import a blueprint string directly into a group instead of having to create a "scratch" `Blueprint`

Page 2 of 5

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.