Skip to content

Releases: pyTooling/pyTooling

v6.1.0

09 Apr 22:57
b80c609
Compare
Choose a tag to compare

Release created on: 09.04.2024 - 22:57:14

New Features

None

Changes

  • Removed questionable feature of method overloads as a clear semantic definition is currently unclear.
    • Split SemanticVersion constructor into:
      1. def __init__(self, major: int, minor: int, patch: int = 0, build: int = 0, flags: Flags = Flags.Clean) -> None`:
      2. @classmethod
        def Parse(cls, versionString : str) -> "SemanticVersion":

Bug Fixes

  • Fixed search for methods with attributes in multiple inheritance scenarios.

v6.0.1

16 Jan 23:16
eed2cde
Compare
Choose a tag to compare

Release created on: 16.01.2024 - 23:16:27

New Features

None

Changes

None

Bug Fixes

  • Implemented bootstrap feature in all modules.
    See #108.

v6.0.0

14 Jan 13:48
Compare
Choose a tag to compare

Release created on: 14.01.2024 - 13:48:30

New Features

  • Integrated package pyAttributes v2.5.9 as pyTooling.Attributes.
    • Replaced AttributeHelperMixin mixin-class by meta-class features provided by ExtendedType.
    • Completely reworked pyTooling.Attributes.ArgParse.
    • Improvements to Attribute class:
      • 🔥🔥🔥
    • Improvements to ExtendedType meta-class:
      • 🔥🔥🔥
    • Reworked ...ArgParse
      • 🔥🔥🔥
  • Integrated namespace package pyTooling.CLIAbstraction v0.4.1 into this package to minimize maintenance efforts.
    • Implemented firstElement and lastElement.
  • Implemented firstItem and lastItem.
  • Added bind function to bind normal functions as methods.
  • Added Cygwin to Platform.
  • Added issue tracker URL support to TerminalUI.

Changes

  • Bumped dependencies.
  • Removed Python 3.7 code and workarounds.
  • Adjustments for Python 3.12
  • 🔥Renamed ...... to TerminalApplication.
  • Renamed firstItem to firstPair.
  • Renamed SemVersion to SemanticVersion and CalVersion to ``.
  • Applied @readonly decorator for read-only properties instead of @property.
  • Improved exception printing and exception messages.
  • Improved type hints.
    • Added return type hint for __init__() methods.
    • Added hints for *args and **kwargs.

Bug Fixes

  • tbd

Documentation

  • Switched from BuildTheDocs theme to ReadTheDocs theme
    • Manual CSS overrides extracted from BuildTheDocs modifications
    • Extra adjustments for sphinx{design}.
  • Removed sphinx_inline_tabs.
  • Removed sphinx_fontawesome
  • Added tabs and grids via sphinx{design}.
    • Display description side-by-side with example code.
    • Use tabs to switch between Linux, Windows, ... or JSON, YAML, XML, ...
  • Widened design to support up to 1600px.
  • Integrated documentation of pyAttributes.
  • Integrated documentation of pyTooling.CLIAbstraction.
  • Added News chapter.
  • Improved doc-strings.
  • Fixed external links dictionary extlinks.

Test Cases

  • Reworked tests for Attributes (pyTooling.Attributes).
  • Reworked tests for ArgParse (pyTooling.Attributes.ArgParse).
  • Added packaging tests.
  • Added tests for ExitOnPreviousErrors and ExitOnPreviousWarnings.
  • More unit tests for TerminalUI classes.

Others

  • Updated copyright note
  • Tested comparability to Python 3.12
  • Using new code coverage features in GitHub Action pipeline.
  • Updated package keywords after merging CLIAbstraction and pyAttributes into pyTooling.
  • Added JSON and XML sections in pyproject.toml file.
  • Added no cover to certain exceptions in platforms.
  • Removed redundant parenthesis from code.

Related Issues

  • Obsoleted #48.

v5.0.0

02 Jul 18:23
60245da
Compare
Choose a tag to compare

Release created on: 02.07.2023 - 18:23:02

New Features

  • New ExtendedType features:
    • Added support for mixin-classes and delayed creation of slots. (@skoehler)
    • Added automatic initializers for annotated fields (previously causing an exception due to slots). (@skoehler)
    • Added automatic initializers for annotated class fields (previously causing an exception due to slots). (@skoehler)
  • Added new helper methods in ExtendedType:
    • _computeSlots,
    • _aggregateMixinSlots,
    • _iterateBaseClasses, and
    • _iterateBaseClassPaths.
  • Added new decorators:
    • @slotted
    • @mixin
    • @singleton
    • @readonly, and
    • @notimplemented.
  • Added JSON support for pyTooling.Configuration.
  • New Platform features:
    • Added PythonVersion to Platform to distinguish Python versions.
    • Added PythonImplementation to Platform to distinguish CPython and PyPy.
  • Added dummy implementations of __notes__ and add_note() to exception base classes and derived classes to workaround that missing feature for older Python versions (<3.11).
  • New exceptions in pyTooling.MetaClasses:
    • ExtendedTypeError
    • BaseClassWithoutSlotsError
    • BaseClassWithNonEmptySlotsError
    • BaseClassIsNotAMixinError
    • DuplicateFieldInSlotsError.
  • New graph features:
    • GetVertexByID
    • GetVertexByValue
    • New vertex operations:
      • IterateAllOutboundPathsAsVertexList
      • Delete (itself)
      • DeleteEdgeTo, DeleteEdgeFrom, DeleteLinkTo, DeleteLinkFrom.
    • New edge operations:
      • Delete (itself)
    • New link operations:
      • Delete (itself)
  • pyToolong.StateMachine package (alpha version).

Changes

  • Bumped dependencies.
  • ExtendedType:
    • Renamed useSlots to slots.
    • Added support for multiple inheritance. (@skoehler)
    • Added support for mixins (deferred slots). (@skoehler)
  • Enhanced error handling in mergedicts and zipdicts.
  • Improved performance of of mergedicts by 10x.
  • Moved exceptions AbstractClassError and MustOverrideClassError from pyTooling.Exceptions to pyTooling.MetaClasses
  • Moved module pyTooling.Common.Platform to pyTooling.Platform.
    • Moved nested class pyTooling.Common.Platform.Platform.Platforms to pyTooling.Platform.
  • Renamed ObjectWithSlots to SlottedObject.
  • Renamed Semversion to SemanticVersion and CalVersion to CalendarVersion.
  • Marked @overload marked function overloads (signature variants) as pragma: no cover.
  • Fixed ClassVars in pyTooling.Configuration.

Bug Fixes

  • Reworked ExtendedType when used with slots in multiple inheritance scenarios. (@skoehler)
  • Reworked internal inheritance graphs to fulfill the needed of ExtendedType using slots and the mixin feature.
    • Fixed pyTooling.Configuration and pyTooling.Configuration.YAML.
    • Fixed pyTooling.GraphML.
    • Fixed pyTooling.TerminalUI.
  • Lots of documentation and doc-string updates.
  • Fixes to the ReST syntax especially to .. todo::.
  • Fixed some method modifiers in ExtendedType.

Documentation

  • Updated dependencies:
    • Added tabs to denote Bash commands for Linux vs. PowerShell commands for Windows.
    • Added dependency lists for performance testing and benchmarking.
  • Documented firstKey, firstValue, firstItem.
  • Documented License.
  • New glossary items.
  • Updated installation instructions.
    • Introduced new tabs feature to switch code variants.
  • Added local packaging and installation instructions.
  • Documented enumerations in pyTooling.Graph.
  • Documented abstract data model for configurations.
    • Updated existing documentation pages.
    • Added documentation for JSON.
  • Listed StateMachine in documentation (alpha).

Test Cases

  • Added more benchmarks for:
    • mergedicts
    • zipdicts
    • Object creation with and without modified __call__ in meta-class.
  • New unit tests:
    • Dictionary functions: firstKey, firstValue, firstItem, zipdicts and mergedicts.
    • sizeof
    • pyTooling.Configuration.JSON
  • Added lots of new testcases for:
    • ExtendedType especially for using slots and mixins in linear and multiple inheritance usecases.
    • @export
    • @readonly
    • Graph
      • GetVertexByID
      • GetVertexByValue
    • Vertex:
      • IterateAllOutboundPathsAsVertexList

Subject to Changes

  • Added PythonVersion to Platform.
    ⇒ this field should be using SemVersion instead of a custom version class.
    Already address in this version.
  • As a workaround __call__ of ExtendedType needed to be patched.
    ⇒ It's envisioned to modify the algorithm how __new__ is modified and swapped, so only classes with modified __new__ have a performance hit, but not all object creations using meta-class ExtendedType.
    Already address in this version.

Known issues

  • A mixin-class can be instantiated. A follow up version will mark such a class as abstract.
  • Some documentation sections needs an update/review due to latest changes.
    • Missing documentation for pyTooling.TerminalUI.
  • CPython implementation has a bug:
    python/cpython#105888
    The current workaround has a huge performance impact on object creation.

Closes #42.

v4.0.1

26 Mar 21:03
Compare
Choose a tag to compare

Release created on: 26.03.2023 - 21:03:28

ℹ Bumped version to v4.0.1 to republish the package to PyPI.

New Features

  • Graphs are now supporting subgraphs and exporting subgraphs to GraphML.
    • New SubGraph class.
    • New Link class.
    • New View class.
  • Added Vertex.Link***Vertex methods to link vertices from disjunkt subgraphs.
  • Added Vertex.HasLink***Vertex methods check if two vertices from disjunkt subgraphs are connected.
  • Added Vertex.Iterate***boundLinks to iterate links.
  • Added Graph.IterateLinks to iterate all links.
  • Added Graph.ReverseLinks, Graph.RemoveLinks.
  • Applied generic types when deriving from subclasses.
  • Added in operator for key-value

Changes

  • ⚠ Renamed Link***Vertex methods to Edge***Vertex methods.
  • ⚠ Renamed HasLink***Vertex methods to HasEdge***Vertex methods.
  • ⚠ Added more generic type variables to Graph and other graph classes.
  • Commented unimplemented methods:
    • PathExistsTo
    • MaximumFlowTo
    • IterateBFS
    • IterateDFS
    • IterateTopologically
    • CheckForNegativeCycles
    • IsStronglyConnected
    • GetStronglyConnectedComponents
    • TravelingSalesmanProblem
    • GetBridges
    • GetArticulationPoints
    • MinimumSpanningTree

Bug Fixes

  • Fixed Component class and references to components.

Unit Tests

  • Adjusted testcases for Graph changes.
  • Added more testcases for edges and links in graphs.

Performance Tests

  • Added comparison for treelib.

Related PRs

v4.0.0

26 Mar 13:26
c71250e
Compare
Choose a tag to compare

Release created on: 26.03.2023 - 13:26:36

New Features

  • Graphs are now supporting subgraphs and exporting subgraphs to GraphML.
    • New SubGraph class.
    • New Link class.
    • New View class.
  • Added Vertex.Link***Vertex methods to link vertices from disjunctive subgraphs.
  • Added Vertex.HasLink***Vertex methods check if two vertices from disjunctive subgraphs are connected.
  • Added Vertex.Iterate***boundLinks to iterate links.
  • Added Graph.IterateLinks to iterate all links.
  • Added Graph.ReverseLinks, Graph.RemoveLinks.
  • Applied generic types when deriving from subclasses.
  • Added in operator for key-value

Changes

  • ⚠ Renamed Link***Vertex methods to Edge***Vertex methods.
  • ⚠ Renamed HasLink***Vertex methods to HasEdge***Vertex methods.
  • ⚠ Added more generic type variables to Graph and other graph classes.
  • Commented unimplemented methods:
    • PathExistsTo
    • MaximumFlowTo
    • IterateBFS
    • IterateDFS
    • IterateTopologically
    • CheckForNegativeCycles
    • IsStronglyConnected
    • GetStronglyConnectedComponents
    • TravelingSalesmanProblem
    • GetBridges
    • GetArticulationPoints
    • MinimumSpanningTree

Bug Fixes

  • Fixed Component class and references to components.

Unit Tests

  • Adjusted testcases for Graph changes.
  • Added more testcases for edges and links in graphs.

Performance Tests

  • Added comparison for treelib.

Related PRs

v3.0.0

10 Mar 21:42
d5a34a7
Compare
Choose a tag to compare

Release created on: 10.03.2023 - 21:42:01

New Features

  • Integrated pyTooling.TerminalUI into pyTooling.
    ⚠ This is a breaking change because there is a directory overlap between packages.

Changes

  • Bumped dependencies.

Bug Fixes

None

v2.13.0

10 Mar 10:17
4c6d0a4
Compare
Choose a tag to compare

Release created on: 10.03.2023 - 10:17:58

New Features

  • Support for FreeBSD in Platform.
  • A data model for GraphML (graph, node, edge, key, data and subgraph).
  • A conversion from pyTooling's graph data structure to GraphML XML files.
  • A conversion from pyTooling's tree data structure to GraphML XML files.

Changes

  • Bumped dependencies.
  • Added missing dependencies in documentation.
  • Package pyTooling using build.
  • Graph: Documented __delitem__ for Graph, Component, Node, Edge.
  • Graph: Added __contains__ for Graph, Component, Node, Edge.

Bug Fixes

  • Fixed copy&paste mistake for linux-aarch64 in Platform.
  • Fixed type hints on Edge.

Related Issues

v2.12.3

18 Feb 20:08
44cace3
Compare
Choose a tag to compare

Release created on: 18.02.2023 - 20:08:16

Bug Fixes

  • ExtendedType can now handle abstract methods in multiple inheritance scenarios.

v2.12.2

13 Feb 22:45
78d6b58
Compare
Choose a tag to compare

Release created on: 13.02.2023 - 22:45:02

Bug Fixes

  • Fixed error message for derived abstract classes.