Skip to content

Releases: aatle/pyriak

0.4.1

05 Sep 01:43
Compare
Choose a tag to compare

This release features more API improvements and changes (based on observed pyriak usage), and also improved package documentation.

API Updates

  • tagclass() function removed
  • All add() methods (Entity, StateManager, SystemManager, EntityManager) raise ValueError if the object has already been added
    • New update() method that retains original behavior of add(): remove old object if not equal to new object
  • Added __setitem__ method to Entity and StateManager that has the behavior of update()
  • ComponentRemoved and EventHandlerRemoved events are posted before EntityRemoved and SystemRemoved instead of after
  • Raise a ValueError instead of KeyError in some places
  • bind() decorator will now raise TypeError instead of ValueError when keys are given for an event type with no key function

Typing

  • The component, state, and event handler event types are now generic in their component/state/event type (invariant).
  • The generic callback return type of Binding is now covariant instead of invariant
  • Generic event type of Binding integrated into type of _event_type_ attribute (type -> type[_T])
  • Removed unneeded field annotation in SystemManager

Internal

  • _EventHandler call only accepts (space, event) arguments instead of (*args, **kwargs)
  • _EventHandler is now generic in its event type
  • Event handler events post after they are bound/unbound instead of before
  • Removed redundant, unused type variables in top-level module

Other

  • Rewrote README.md file:
    • More formal and useful, added many sections
    • Provides a guide on basic usage
    • Badges for important info
    • Removed the TODO list
  • Improved PyPI package details: added PyPI classifiers and keywords
  • Added more mypy checks/rules
  • Updated docstrings of various things

0.4.0

15 Jul 04:00
Compare
Choose a tag to compare

pyriak has undergone some more massive changes.
However, the general API is likely to be more stable in the future.

API Updates

  • Subtype polymorphism completely removed (from components, states, and events/handlers)
    • subclasses() and strict_subclasses() functions removed
    • Removed __call__ functionality from Entity and StateManager
    • Use __call__ instead of __getitem__ for EntityManager.components and QueryResult
    • key_functions (EventKeyFunctions) acts more like normal dict, removed exists() and __call__ methods
  • bind() can no longer be applied multiple times on one object/callback
    • Binding class removed, BindingWrapper renamed to Binding
    • Renamed Binding class contains binding info directly: _event_type_, _callback_, _priority_, _keys_
  • managers subpackage removed/flattened: all manager files are in top-level package
    • manager files renamed to have underscore before "manager" for readability
  • first() function removed (as there are better ways to do things)
  • key_functions (EventKeyFunctions) values can no longer be None
  • Custom __repr__() method added to Entity
  • __weakref__ slot removed from Entity: entities are no longer weakly referenceable
  • Removed __setitem__ functionality from Entity and StateManager
  • Entity/StateManager when removing by value, events contain original object instead of given one
  • process() and pump() have positional-only arguments
  • SystemManager.process() raises RuntimeError instead of TypeError when its space is None

Typing

  • Removed overloads and return Any types in QueryResult to fix typing issues for zip(), zip_entity()
  • bind() annotated return type is no longer _Decorator protocol type (multibinding removed)
  • clear() methods return type explicitly annotated with None

Internal

  • With no subtype polymorphism, greatly simplified source code
    • SystemManager._get_bindings() returns list[tuple[Binding, _EventHandler]]
    • Removed SystemManager _lazy_bind() and _lazy_key_bind() methods
    • Reduced code size for many methods
    • EventHandler events have base _EventHandlerEvent, and uses both binding and handler objects
  • EntityManager._component_types renamed to _type_cache
  • SystemManager._get_handlers() always returns a new list of handlers
  • _Components class now has __init__() method
  • All internal type: ignore comments have error codes
  • QueryResult __iter__ no longer set to None
  • space module directly imports manager classes
  • Small optimizations for query methods
  • Line length limit lowered from 90 to 88 (88 is default in Ruff)
  • Ruff target version is no longer set to py311
    • Ignore rule "PERF203"
  • TODO list updated

Other

  • Added and updated docstrings for almost entire API (google style)
  • Removed upper python limit "<4.0"
  • Overall, improved performance and memory usage

0.3.1

02 Jul 00:14
Compare
Choose a tag to compare

API Updates

  • Querying overhauled:
    • Removed Query class
    • Removed Space and EntityManager methods entity_query(), id_query()
      • QueryResult is the only query result class
    • New QueryResult method .zip_entity()
    • Removed query.py, QueryResult moved to entitymanager.py
  • system.py renamed to bind.py
    • System type alias moved to top-level module
  • Removed built-in event SpaceCallback
    • SystemManager no longer posts SpaceCallback for system add/remove when no space available
  • Removed built-in event SendEvent
  • SystemManager.process() method no longer takes optional space argument
  • tagclass() now returns a new class instead of mutating the argument
  • tagclass() class instances are only equal if their types the same object, instead of subclasses
  • Removed tagclass() overload that created a new class from scratch like type()

Typing

  • Fixed typing issue when using bind() multiple times on one event handler
  • BindingWrapper.__callback__ and BindingWrapper.__call__() now have narrower type/signature
  • pyriak __all__ list now includes EventQueue type alias
  • entity.py __all__ list now includes EntityId
  • QueryResult entities and types properties have more abstract types
  • Typed Space.process() as returning bool

Internal

  • EntityManager and Entity query cache updates restructured
  • bind() reuses a dedicated empty frozenset when no keys are given
  • Space.__init__() constructor assigns in a different order

Other

  • Added license as a code comment to top-level module
  • Added module docstring, package description, to top-level module
  • Improved error message when a duplicate event type is bound to an event handler

0.3.0

13 Jun 23:01
Compare
Choose a tag to compare

API Updates

  • System and _SystemInfo classes removed. _system_ = System() is no longer used
  • Any hashable object is now a valid System, including classes. (Previously, only modules with _system_ attribute were valid).
  • System is now a TypeAlias for Hashable
  • pyriak no longer hooks into import system, _importer.py removed
  • _BindingWrapper is now BindingWrapper, and is no longer a temporary object on systems, refactored
  • _Binding class is now a namedtuple Binding, and includes event_type
  • system event handler bindings are now a tuple instead of a MappingProxy
  • query() methods raise TypeError instead of ValueError when no component types given

Typing

  • Typecasting into System is no longer necessary on most type checkers
  • Removed NoReturn overloads from query methods and class
  • Typed QueryResult
  • Added mypy configuration in pyproject.toml
  • Fixed _SENTINEL typing issue and other issues

Other

  • Created github workflow for publishing
  • Updated README

0.2.0

13 Jun 22:41
Compare
Choose a tag to compare

API Updates

  • Removed mro() function
  • Removed Callback class
  • Removed NoKey, NoKeyType
  • Added first() function to serve as a merge function
  • Added strict_subclasses() function
  • __setitem__ of StateManager and Entity now only pop at most one state/component
  • SystemManager no longer possibly gets event_queue from its space
  • Space.event_queue is no longer a property that automatically sets the managers event queues
  • Multikeys from key functions now must be any iterator

Typing

  • Added py.typed file, making package type annotations public
  • Events now typed with object instead of Any
  • object now used in place of some Any occurrences
  • Type hinted SpaceCallback
  • Added overloads to get() and pop() methods to improve typing
  • bind() now preserves return type of event handler callback
  • Generally improved typing, successful mypy check

Internal

  • SystemManager now has separate collections for keyed and unkeyed handlers
  • Renamed SystemManager._sorted_handlers() to _sort_handlers()
  • Increased performance of polymorphism-related __getitem__() and get() methods
  • Rewrote internal imports to be more direct
  • Removed internal _EventHandlerEvent base class
  • Various default values now use internal _SENTINEL object, or None, instead of Ellipsis

Other

  • Updated README
  • Added dev dependencies ruff and mypy to pyproject.toml

0.1.0

13 Jun 21:50
Compare
Choose a tag to compare

First release of pyriak, mainly for personal use.
API and syntax is still under development.