GeneralManager 0.40.2__tar.gz → 0.40.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. {generalmanager-0.40.2/src/GeneralManager.egg-info → generalmanager-0.40.3}/PKG-INFO +1 -1
  2. {generalmanager-0.40.2 → generalmanager-0.40.3}/pyproject.toml +1 -1
  3. {generalmanager-0.40.2 → generalmanager-0.40.3/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bucket/calculation_bucket.py +81 -24
  5. {generalmanager-0.40.2 → generalmanager-0.40.3}/LICENSE +0 -0
  6. {generalmanager-0.40.2 → generalmanager-0.40.3}/README.md +0 -0
  7. {generalmanager-0.40.2 → generalmanager-0.40.3}/setup.cfg +0 -0
  8. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  9. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  10. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/GeneralManager.egg-info/requires.txt +0 -0
  11. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/GeneralManager.egg-info/top_level.txt +0 -0
  12. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/__init__.py +0 -0
  13. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/__init__.py +0 -0
  14. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/api.py +0 -0
  15. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/bucket.py +0 -0
  16. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/cache.py +0 -0
  17. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/factory.py +0 -0
  18. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/general_manager.py +0 -0
  19. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/interface.py +0 -0
  20. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/manager.py +0 -0
  21. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/measurement.py +0 -0
  22. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/permission.py +0 -0
  23. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/rule.py +0 -0
  24. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/search.py +0 -0
  25. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/_types/utils.py +0 -0
  26. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/__init__.py +0 -0
  27. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql.py +0 -0
  28. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_errors.py +0 -0
  29. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_mutations.py +0 -0
  30. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_resolvers.py +0 -0
  31. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_search.py +0 -0
  32. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  33. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_subscriptions.py +0 -0
  34. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/graphql_view.py +0 -0
  35. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/mutation.py +0 -0
  36. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/property.py +0 -0
  37. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/registry.py +0 -0
  38. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/remote_api.py +0 -0
  39. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/remote_invalidation.py +0 -0
  40. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/api/remote_invalidation_client.py +0 -0
  41. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/apps.py +0 -0
  42. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bootstrap.py +0 -0
  43. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bucket/__init__.py +0 -0
  44. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bucket/base_bucket.py +0 -0
  45. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bucket/database_bucket.py +0 -0
  46. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bucket/group_bucket.py +0 -0
  47. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/bucket/request_bucket.py +0 -0
  48. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/cache/__init__.py +0 -0
  49. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/cache/cache_decorator.py +0 -0
  50. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/cache/cache_tracker.py +0 -0
  51. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/cache/dependency_index.py +0 -0
  52. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/cache/model_dependency_collector.py +0 -0
  53. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/cache/signals.py +0 -0
  54. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/conf.py +0 -0
  55. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/factory/__init__.py +0 -0
  56. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/factory/auto_factory.py +0 -0
  57. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/factory/factories.py +0 -0
  58. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/factory/factory_methods.py +0 -0
  59. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/__init__.py +0 -0
  60. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/base_interface.py +0 -0
  61. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/bundles/__init__.py +0 -0
  62. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/bundles/calculation.py +0 -0
  63. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/bundles/database.py +0 -0
  64. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  65. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/bundles/request.py +0 -0
  66. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/__init__.py +0 -0
  67. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/base.py +0 -0
  68. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/builtin.py +0 -0
  69. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  70. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  71. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  72. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/configuration.py +0 -0
  73. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  74. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  75. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  76. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  77. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  78. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  79. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/factory.py +0 -0
  80. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  81. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  82. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  83. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  84. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  85. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  86. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  87. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  88. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  89. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  90. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  91. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  92. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  93. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  94. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/registry.py +0 -0
  95. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  96. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  97. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  98. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  99. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/__init__.py +0 -0
  100. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/calculation.py +0 -0
  101. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/database.py +0 -0
  102. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  103. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/read_only.py +0 -0
  104. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  105. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/interfaces/request.py +0 -0
  106. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/manifests/__init__.py +0 -0
  107. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  108. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  109. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/manifests/capability_models.py +0 -0
  110. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/orm_interface.py +0 -0
  111. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/requests.py +0 -0
  112. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/utils/__init__.py +0 -0
  113. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  114. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/utils/errors.py +0 -0
  115. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/interface/utils/models.py +0 -0
  116. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/logging.py +0 -0
  117. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/management/commands/search_index.py +0 -0
  118. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  119. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/management/commands/shell.py +0 -0
  120. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  121. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  122. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/manager/__init__.py +0 -0
  123. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/manager/general_manager.py +0 -0
  124. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/manager/group_manager.py +0 -0
  125. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/manager/input.py +0 -0
  126. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/manager/meta.py +0 -0
  127. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/measurement/__init__.py +0 -0
  128. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/measurement/measurement.py +0 -0
  129. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/measurement/measurement_field.py +0 -0
  130. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/metrics/__init__.py +0 -0
  131. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/metrics/graphql.py +0 -0
  132. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/migrations/0001_initial.py +0 -0
  133. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  134. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  135. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/migrations/__init__.py +0 -0
  136. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/models.py +0 -0
  137. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/__init__.py +0 -0
  138. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/audit.py +0 -0
  139. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/base_permission.py +0 -0
  140. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/graphql_capabilities.py +0 -0
  141. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.40.2 → generalmanager-0.40.3}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.40.2 → generalmanager-0.40.3}/tests/test_settings.py +0 -0
  193. {generalmanager-0.40.2 → generalmanager-0.40.3}/tests/test_urls.py +0 -0
  194. {generalmanager-0.40.2 → generalmanager-0.40.3}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.40.2
3
+ Version: 0.40.3
4
4
  Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
5
5
  Author-email: Tim Kleindick <tkleindick@yahoo.de>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "GeneralManager"
7
- version = "0.40.2"
7
+ version = "0.40.3"
8
8
  description = "Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching."
9
9
  readme = "README.md"
10
10
  authors = [{ name = "Tim Kleindick", email = "tkleindick@yahoo.de" }]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.40.2
3
+ Version: 0.40.3
4
4
  Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
5
5
  Author-email: Tim Kleindick <tkleindick@yahoo.de>
6
6
  License: MIT License
@@ -453,6 +453,51 @@ class CalculationBucket(Bucket[GeneralManagerType]):
453
453
  "input_excludes": input_excludes,
454
454
  }
455
455
 
456
+ def _normalized_sort_key(self) -> tuple[str, ...] | None:
457
+ """Return the configured sort key as a tuple, or None when unsorted."""
458
+ if self.sort_key is None:
459
+ return None
460
+ if isinstance(self.sort_key, str):
461
+ return (self.sort_key,)
462
+ return self.sort_key
463
+
464
+ def _sort_uses_only_inputs(self, sort_key: tuple[str, ...] | None) -> bool:
465
+ """Return whether a sort can be applied to raw input dictionaries."""
466
+ if sort_key is None:
467
+ return True
468
+ return all(key in self.input_fields for key in sort_key)
469
+
470
+ def _sort_dict_combinations(
471
+ self,
472
+ combinations: list[dict[str, Any]],
473
+ sort_key: tuple[str, ...],
474
+ ) -> list[dict[str, Any]]:
475
+ """
476
+ Sort input dictionaries while tolerating missing optional inputs.
477
+
478
+ Present values sort before missing values in ascending order. Missing
479
+ keys use None as the explicit placeholder, guarded by a presence flag so
480
+ they are not compared directly with concrete input values.
481
+ """
482
+ return sorted(
483
+ combinations,
484
+ key=lambda combo: tuple(
485
+ (key not in combo, combo.get(key, None)) for key in sort_key
486
+ ),
487
+ )
488
+
489
+ def _manager_combinations(
490
+ self,
491
+ combinations: list[dict[str, Any]],
492
+ ) -> list[GeneralManagerType]:
493
+ return [self._manager_class(**combo) for combo in combinations]
494
+
495
+ @staticmethod
496
+ def _manager_identifications(
497
+ managers: list[GeneralManagerType],
498
+ ) -> list[dict[str, Any]]:
499
+ return [manager.identification for manager in managers]
500
+
456
501
  def generate_combinations(self) -> List[dict[str, Any]]:
457
502
  """
458
503
  Compute (and cache) the list of valid input combinations.
@@ -461,10 +506,6 @@ class CalculationBucket(Bucket[GeneralManagerType]):
461
506
  list[dict[str, Any]]: Cached list of input dictionaries satisfying filters, excludes, and ordering.
462
507
  """
463
508
 
464
- def key_func(manager_obj: GeneralManagerType) -> tuple:
465
- getters = [attrgetter(key) for key in sort_key]
466
- return tuple(getter(manager_obj) for getter in getters)
467
-
468
509
  if self._data is None:
469
510
  sorted_inputs = self.topological_sort_inputs()
470
511
  sorted_filters = self._sort_filters(sorted_inputs)
@@ -473,23 +514,40 @@ class CalculationBucket(Bucket[GeneralManagerType]):
473
514
  sorted_filters["input_filters"],
474
515
  sorted_filters["input_excludes"],
475
516
  )
476
- manager_combinations = self._generate_prop_combinations(
477
- current_combinations,
478
- sorted_filters["prop_filters"],
479
- sorted_filters["prop_excludes"],
517
+ sort_key = self._normalized_sort_key()
518
+ needs_manager_access = (
519
+ bool(sorted_filters["prop_filters"])
520
+ or bool(sorted_filters["prop_excludes"])
521
+ or not self._sort_uses_only_inputs(sort_key)
480
522
  )
481
523
 
482
- if self.sort_key is not None:
483
- sort_key = self.sort_key
484
- if isinstance(sort_key, str):
485
- sort_key = (sort_key,)
486
- manager_combinations = sorted(
524
+ if needs_manager_access:
525
+ manager_combinations = self._manager_combinations(current_combinations)
526
+ manager_combinations = self._filter_prop_combinations(
487
527
  manager_combinations,
488
- key=key_func,
528
+ sorted_filters["prop_filters"],
529
+ sorted_filters["prop_excludes"],
489
530
  )
531
+ if sort_key is not None:
532
+ getters = [attrgetter(key) for key in sort_key]
533
+ manager_combinations = sorted(
534
+ manager_combinations,
535
+ key=lambda manager_obj: tuple(
536
+ getter(manager_obj) for getter in getters
537
+ ),
538
+ )
539
+ identifications = self._manager_identifications(manager_combinations)
540
+ else:
541
+ identifications = current_combinations
542
+ if sort_key is not None:
543
+ identifications = self._sort_dict_combinations(
544
+ identifications,
545
+ sort_key,
546
+ )
547
+
490
548
  if self.reverse:
491
- manager_combinations.reverse()
492
- self._data = [manager.identification for manager in manager_combinations]
549
+ identifications.reverse()
550
+ self._data = identifications
493
551
 
494
552
  return self._data
495
553
 
@@ -670,9 +728,9 @@ class CalculationBucket(Bucket[GeneralManagerType]):
670
728
 
671
729
  return list(helper(0, {}))
672
730
 
673
- def _generate_prop_combinations(
731
+ def _filter_prop_combinations(
674
732
  self,
675
- current_combos: list[dict[str, Any]],
733
+ manager_combinations: list[GeneralManagerType],
676
734
  prop_filters: dict[str, Any],
677
735
  prop_excludes: dict[str, Any],
678
736
  ) -> list[GeneralManagerType]:
@@ -680,23 +738,22 @@ class CalculationBucket(Bucket[GeneralManagerType]):
680
738
  Apply property-level filters and excludes to manager combinations.
681
739
 
682
740
  Parameters:
683
- current_combos (list[dict[str, Any]]): Input combinations already passing input filters.
741
+ manager_combinations (list[GeneralManagerType]): Managers built from
742
+ input combinations already passing input filters.
684
743
  prop_filters (dict[str, Any]): Filter definitions keyed by property name.
685
744
  prop_excludes (dict[str, Any]): Exclude definitions keyed by property name.
686
745
 
687
746
  Returns:
688
- list[GeneralManagerType]: Manager instances that satisfy property constraints.
747
+ list[GeneralManagerType]: Manager instances that satisfy property
748
+ constraints.
689
749
  """
690
750
 
691
751
  prop_filter_needed = set(prop_filters.keys()) | set(prop_excludes.keys())
692
- manager_combinations = [
693
- self._manager_class(**combo) for combo in current_combos
694
- ]
695
752
  if not prop_filter_needed:
696
753
  return manager_combinations
697
754
 
698
755
  # Apply property filters and exclusions
699
- filtered_combos = []
756
+ filtered_combos: list[GeneralManagerType] = []
700
757
  for manager in manager_combinations:
701
758
  keep = True
702
759
  # include filters
File without changes