GeneralManager 0.16.1__py3-none-any.whl → 0.18.0__py3-none-any.whl

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.

Potentially problematic release.


This version of GeneralManager might be problematic. Click here for more details.

Files changed (67) hide show
  1. general_manager/__init__.py +11 -1
  2. general_manager/_types/api.py +0 -1
  3. general_manager/_types/bucket.py +0 -1
  4. general_manager/_types/cache.py +0 -1
  5. general_manager/_types/factory.py +0 -1
  6. general_manager/_types/general_manager.py +0 -1
  7. general_manager/_types/interface.py +0 -1
  8. general_manager/_types/manager.py +0 -1
  9. general_manager/_types/measurement.py +0 -1
  10. general_manager/_types/permission.py +0 -1
  11. general_manager/_types/rule.py +0 -1
  12. general_manager/_types/utils.py +0 -1
  13. general_manager/api/__init__.py +13 -1
  14. general_manager/api/graphql.py +897 -147
  15. general_manager/api/graphql_subscription_consumer.py +432 -0
  16. general_manager/api/mutation.py +85 -23
  17. general_manager/api/property.py +39 -13
  18. general_manager/apps.py +336 -40
  19. general_manager/bucket/__init__.py +10 -1
  20. general_manager/bucket/calculationBucket.py +155 -53
  21. general_manager/bucket/databaseBucket.py +157 -45
  22. general_manager/bucket/groupBucket.py +133 -44
  23. general_manager/cache/__init__.py +10 -1
  24. general_manager/cache/dependencyIndex.py +303 -53
  25. general_manager/cache/signals.py +9 -2
  26. general_manager/factory/__init__.py +10 -1
  27. general_manager/factory/autoFactory.py +55 -13
  28. general_manager/factory/factories.py +110 -40
  29. general_manager/factory/factoryMethods.py +122 -34
  30. general_manager/interface/__init__.py +10 -1
  31. general_manager/interface/baseInterface.py +129 -36
  32. general_manager/interface/calculationInterface.py +35 -18
  33. general_manager/interface/databaseBasedInterface.py +71 -45
  34. general_manager/interface/databaseInterface.py +96 -38
  35. general_manager/interface/models.py +5 -5
  36. general_manager/interface/readOnlyInterface.py +94 -20
  37. general_manager/manager/__init__.py +10 -1
  38. general_manager/manager/generalManager.py +25 -16
  39. general_manager/manager/groupManager.py +21 -7
  40. general_manager/manager/meta.py +84 -16
  41. general_manager/measurement/__init__.py +10 -1
  42. general_manager/measurement/measurement.py +289 -95
  43. general_manager/measurement/measurementField.py +42 -31
  44. general_manager/permission/__init__.py +10 -1
  45. general_manager/permission/basePermission.py +120 -38
  46. general_manager/permission/managerBasedPermission.py +72 -21
  47. general_manager/permission/mutationPermission.py +14 -9
  48. general_manager/permission/permissionChecks.py +14 -12
  49. general_manager/permission/permissionDataManager.py +24 -11
  50. general_manager/permission/utils.py +34 -6
  51. general_manager/public_api_registry.py +36 -10
  52. general_manager/rule/__init__.py +10 -1
  53. general_manager/rule/handler.py +133 -44
  54. general_manager/rule/rule.py +178 -39
  55. general_manager/utils/__init__.py +10 -1
  56. general_manager/utils/argsToKwargs.py +34 -9
  57. general_manager/utils/filterParser.py +22 -7
  58. general_manager/utils/formatString.py +1 -0
  59. general_manager/utils/pathMapping.py +23 -15
  60. general_manager/utils/public_api.py +33 -2
  61. general_manager/utils/testing.py +49 -42
  62. {generalmanager-0.16.1.dist-info → generalmanager-0.18.0.dist-info}/METADATA +3 -1
  63. generalmanager-0.18.0.dist-info/RECORD +77 -0
  64. {generalmanager-0.16.1.dist-info → generalmanager-0.18.0.dist-info}/licenses/LICENSE +1 -1
  65. generalmanager-0.16.1.dist-info/RECORD +0 -76
  66. {generalmanager-0.16.1.dist-info → generalmanager-0.18.0.dist-info}/WHEEL +0 -0
  67. {generalmanager-0.16.1.dist-info → generalmanager-0.18.0.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  from contextlib import suppress
4
4
  from importlib import import_module
5
- from typing import Any, Callable, cast
5
+ from typing import Any, Callable, ClassVar, cast
6
6
 
7
7
  from django.apps import AppConfig, apps as global_apps
8
8
  from django.conf import settings
@@ -80,15 +80,18 @@ class GMTestCaseMeta(type):
80
80
  attrs: dict[str, object],
81
81
  ) -> type:
82
82
  """
83
- Construct a new test case class that wires GeneralManager-specific initialisation into `setUpClass`.
83
+ Create a new test case class that injects GeneralManager-specific initialization into `setUpClass`.
84
+
85
+ The constructed class replaces or wraps any user-defined `setUpClass` with logic that resets GraphQL and manager registries, configures an optional fallback app lookup, ensures database tables for managed models exist, initializes GeneralManager and GraphQL registrations, and then calls the standard GraphQL test setup.
84
86
 
85
87
  Parameters:
86
- name (str): Name of the dynamically created test case class.
87
- bases (tuple[type, ...]): Base classes that the new test case should inherit.
88
- attrs (dict[str, Any]): Namespace containing class attributes, potentially including a custom `setUpClass`.
88
+ mcs (type[GMTestCaseMeta]): Metaclass constructing the new class.
89
+ name (str): Name of the class to create.
90
+ bases (tuple[type, ...]): Base classes for the new class.
91
+ attrs (dict[str, object]): Class namespace; may contain a user-defined `setUpClass` and `fallback_app`.
89
92
 
90
93
  Returns:
91
- type: Newly constructed class with an augmented `setUpClass` implementation.
94
+ type: The newly created test case class whose `setUpClass` has been augmented for GeneralManager testing.
92
95
  """
93
96
  user_setup = attrs.get("setUpClass")
94
97
  fallback_app = cast(str | None, attrs.get("fallback_app", "general_manager"))
@@ -99,28 +102,27 @@ class GMTestCaseMeta(type):
99
102
  cls: type["GeneralManagerTransactionTestCase"],
100
103
  ) -> None:
101
104
  """
102
- Prepare the test harness with GeneralManager-specific setup prior to executing tests.
103
-
104
- The method resets GraphQL registries, configures optional fallback app lookups, synchronises database tables for managed models, and finally invokes the parent `setUpClass`.
105
+ Prepare the test environment for GeneralManager GraphQL tests.
105
106
 
106
- Parameters:
107
- cls (type[GeneralManagerTransactionTestCase]): Test case subclass whose environment is being initialised.
108
-
109
- Returns:
110
- None
107
+ Resets GraphQL and manager registries, optionally overrides Django's app-config lookup to use a fallback app, clears the default GraphQL URL pattern, creates missing database tables for models referenced by the test class's `general_manager_classes`, initializes GeneralManager classes and read-only interfaces, registers GraphQL types/fields, and then invokes the base class `setUpClass`.
111
108
  """
112
109
  GraphQL._query_class = None
113
110
  GraphQL._mutation_class = None
111
+ GraphQL._subscription_class = None
114
112
  GraphQL._mutations = {}
115
113
  GraphQL._query_fields = {}
114
+ GraphQL._subscription_fields = {}
116
115
  GraphQL.graphql_type_registry = {}
117
116
  GraphQL.graphql_filter_type_registry = {}
117
+ GraphQL._subscription_payload_registry = {}
118
+ GraphQL._page_type_registry = {}
119
+ GraphQL.manager_registry = {}
120
+ GraphQL._schema = None
118
121
 
119
122
  if fallback_app is not None:
120
- setattr(
121
- global_apps,
122
- "get_containing_app_config",
123
- createFallbackGetApp(fallback_app),
123
+ handler = createFallbackGetApp(fallback_app)
124
+ global_apps.get_containing_app_config = cast( # type: ignore[assignment]
125
+ Callable[[str], AppConfig | None], handler
124
126
  )
125
127
 
126
128
  # 1) user-defined setUpClass (if any)
@@ -143,11 +145,14 @@ class GMTestCaseMeta(type):
143
145
  ):
144
146
  continue
145
147
  model_class = cast(
146
- type[models.Model], manager_class.Interface._model # type: ignore
148
+ type[models.Model],
149
+ manager_class.Interface._model, # type: ignore
147
150
  )
148
151
  if model_class._meta.db_table not in existing:
149
152
  editor.create_model(model_class)
150
- editor.create_model(model_class.history.model) # type: ignore
153
+ history_model = getattr(model_class, "history", None)
154
+ if history_model:
155
+ editor.create_model(history_model.model) # type: ignore[attr-defined]
151
156
  # 4) GM & GraphQL initialization
152
157
  GeneralmanagerConfig.initializeGeneralManagerClasses(
153
158
  cls.general_manager_classes, cls.general_manager_classes
@@ -194,22 +199,20 @@ class LoggingCache(LocMemCache):
194
199
  self,
195
200
  key: str,
196
201
  value: object,
197
- timeout: int | None = None,
202
+ timeout: float | None = None,
198
203
  version: int | None = None,
199
204
  ) -> None:
200
205
  """
201
- Store a value in the cache and append the operation to the log.
206
+ Store a value in the cache and record the set operation in the cache's operation log.
202
207
 
203
208
  Parameters:
204
- key (str): Cache key identifying the entry to write.
205
- value (Any): Object stored under the given key.
206
- timeout (int | None): Expiration time in seconds.
209
+ key (str): Cache key under which to store the value.
210
+ value (object): Value to store.
211
+ timeout (float | None): Expiration time in seconds, or None for no explicit timeout.
207
212
  version (int | None): Optional cache version identifier.
208
-
209
- Returns:
210
- None
211
213
  """
212
- super().set(key, value, timeout)
214
+ timeout = int(timeout) if timeout is not None else timeout
215
+ super().set(key, value, timeout=timeout, version=version)
213
216
  self.ops.append(("set", key))
214
217
 
215
218
 
@@ -219,35 +222,37 @@ class LoggingCache(LocMemCache):
219
222
  "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
220
223
  "LOCATION": "test-cache",
221
224
  }
222
- }
225
+ },
226
+ CHANNEL_LAYERS={
227
+ "default": {
228
+ "BACKEND": "channels.layers.InMemoryChannelLayer",
229
+ }
230
+ },
223
231
  )
224
232
  class GeneralManagerTransactionTestCase(
225
233
  GraphQLTransactionTestCase, metaclass=GMTestCaseMeta
226
234
  ):
227
- general_manager_classes: list[type[GeneralManager]] = []
228
- read_only_classes: list[type[GeneralManager]] = []
235
+ GRAPHQL_URL = "/graphql/"
236
+ general_manager_classes: ClassVar[list[type[GeneralManager]]] = []
237
+ read_only_classes: ClassVar[list[type[GeneralManager]]] = []
229
238
  fallback_app: str | None = "general_manager"
230
239
 
231
240
  def setUp(self) -> None:
232
241
  """
233
- Prepare the test environment with a cache backend that records operations.
234
-
235
- The method installs `LoggingCache` as the default cache and clears any previous operation history so tests can assert cache behaviour.
242
+ Install a logging cache backend and reset its operation log for the test.
236
243
 
237
- Returns:
238
- None
244
+ Replaces Django's default cache connection with a LoggingCache instance and clears any prior cache operation records so tests start with a fresh cache operation log.
239
245
  """
240
246
  super().setUp()
241
- setattr(caches._connections, "default", LoggingCache("test-cache", {})) # type: ignore[attr-defined]
247
+ caches._connections.default = LoggingCache("test-cache", {}) # type: ignore[attr-defined]
242
248
  self.__resetCacheCounter()
243
249
 
244
250
  @classmethod
245
251
  def tearDownClass(cls) -> None:
246
252
  """
247
- Remove dynamically registered managers and restore patched global state.
253
+ Tear down test-class state by removing dynamically created models and restoring patched global state.
248
254
 
249
- Returns:
250
- None
255
+ Performs these actions: removes the GraphQL URL pattern added during setup; drops database tables for any models created for the test (including associated history models); unregisters those models from Django's app registry and clears the app cache; removes the test's GeneralManager classes from metaclass registries; restores the original app-config lookup function; and finally calls the superclass teardown.
251
256
  """
252
257
  # remove GraphQL URL pattern added during setUpClass
253
258
  _default_graphql_url_clear()
@@ -299,7 +304,9 @@ class GeneralManagerTransactionTestCase(
299
304
  ]
300
305
 
301
306
  # reset fallback app lookup
302
- setattr(global_apps, "get_containing_app_config", _original_get_app)
307
+ global_apps.get_containing_app_config = cast( # type: ignore[assignment]
308
+ Callable[[str], AppConfig | None], _original_get_app
309
+ )
303
310
 
304
311
  super().tearDownClass()
305
312
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.16.1
3
+ Version: 0.18.0
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
@@ -24,6 +24,7 @@ License: MIT License
24
24
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
25
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
26
  SOFTWARE.
27
+
27
28
  Project-URL: Homepage, https://github.com/TimKleindick/general_manager
28
29
  Project-URL: Documentation, https://timkleindick.github.io/general_manager/
29
30
  Project-URL: Repository, https://github.com/TimKleindick/general_manager
@@ -43,6 +44,7 @@ Requires-Python: >=3.12
43
44
  Description-Content-Type: text/markdown
44
45
  License-File: LICENSE
45
46
  Requires-Dist: asgiref>=3.8.1
47
+ Requires-Dist: channels>=4.1.0
46
48
  Requires-Dist: Django>=5.2.7
47
49
  Requires-Dist: django-simple-history>=3.8.0
48
50
  Requires-Dist: exrex>=0.12.0
@@ -0,0 +1,77 @@
1
+ general_manager/__init__.py,sha256=Xy4_fFjChIYtlBPDv7K3JEHOulq9_IFXkCc4CElS32Q,1035
2
+ general_manager/apps.py,sha256=wFxRLEqyFbBlOB5yvQXjNX_Yc4DPsl0xD5-PIWvhPdk,25785
3
+ general_manager/public_api_registry.py,sha256=zR-pOl5-X1IEt-Q6eF8FT-6mQiQi3Tsmvkfi1nxIKp8,7544
4
+ general_manager/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ general_manager/_types/__init__.py,sha256=RmS0Ok-1-CwWOZL_socLWksEk9MfsshL9eQx879I4mU,60
6
+ general_manager/_types/api.py,sha256=WO5b0MT85LaVsi_KE45onWX1R75iENM4Q-3qMEZCbdk,488
7
+ general_manager/_types/bucket.py,sha256=bMsZFsh3kiUrtmtK10X_oA2LVCIHXbub4xDVBzYw5sQ,431
8
+ general_manager/_types/cache.py,sha256=J49VQLm-UChQOPal1mbd5vB2JtjIhS_HT-7Yl1jDtVE,654
9
+ general_manager/_types/factory.py,sha256=ovjtOLjZNHxWjt6q5xT1n-3nlE2JcqxZfR5GXLhnpY8,1652
10
+ general_manager/_types/general_manager.py,sha256=Y-L_CdzM54pB_q-gZR3mp--md9sbQOA8UtTkiII4kac,951
11
+ general_manager/_types/interface.py,sha256=Fuo9-PcUwyNLI-dw4S1T2l_K5-Ndhz_ed-_vswksgaY,598
12
+ general_manager/_types/manager.py,sha256=WaTh3F2r5IdG7tQsbJkO2h0Sf1uv4jQllJ-upG3rCLU,500
13
+ general_manager/_types/measurement.py,sha256=CIgWAWM1UNEh1pKTG5Tj0XKiktdhY6dIgm3WbxG5IlM,442
14
+ general_manager/_types/permission.py,sha256=i8E7O6NENjkbXVf4k4TQgHo9V74yEH-KVcbQrsW9GBk,412
15
+ general_manager/_types/rule.py,sha256=aNbx3jlVinAYQGJlmFwW8rOwTjf19F6khq5xbGTdD3U,238
16
+ general_manager/_types/utils.py,sha256=p2U0R0G0qviA5tmgfYggD4wRmIiCQGU7XF4Lqtoa_aM,1025
17
+ general_manager/api/__init__.py,sha256=ChV1UPCUjW1Lci0BajmXVtE-3C-WLQTvjO058BMu1Bs,1020
18
+ general_manager/api/graphql.py,sha256=Ma4fb_1YWEP_pBXVBfCjp6D2oSOl3yUFp5hk9kIwZ9E,79451
19
+ general_manager/api/graphql_subscription_consumer.py,sha256=cA-pQNjeF4o92yc2IHtNob6z1CNhHoGxIw2Fgoj24-U,17492
20
+ general_manager/api/mutation.py,sha256=A7Z5UPn_ln8VJIF9NHLdA9jAXqT0p7dB0u2WDjtis2I,10130
21
+ general_manager/api/property.py,sha256=vBoOSBtqMV9uwWdgiYLoAt2f_aL7h6fCnwdjgPcm2LE,5683
22
+ general_manager/bucket/__init__.py,sha256=0VbGdLveCYBvbDBdOCwNDJ1SmxrVyd5-Xv-X0JZXwb4,949
23
+ general_manager/bucket/baseBucket.py,sha256=wSQijZrs1joA-8IGh2AwD4KARSgYqSL4AxXq3KwOz6A,8126
24
+ general_manager/bucket/calculationBucket.py,sha256=x6wl71C1lt6BDIIcPDg06JL5Nyp7igAS6Lrb1YeitjQ,30934
25
+ general_manager/bucket/databaseBucket.py,sha256=Ud0ailMQPoBbt0hsnpIm4urhrTAuw12xbowPD2Mh7Zg,23075
26
+ general_manager/bucket/groupBucket.py,sha256=mOyYyYKP53eIk2iaTES0J_HxABbUtoJtcHlyGeg-WvM,16354
27
+ general_manager/cache/__init__.py,sha256=1qLNRTHScsXDoIXKdwvHwyoi7pIb5phv7ASS1AP4Xc8,1014
28
+ general_manager/cache/cacheDecorator.py,sha256=kgUvJHcC8tilqf1JH2QvyG-158AT_rmuKf6pgUy1IBs,3406
29
+ general_manager/cache/cacheTracker.py,sha256=rb637hGHOe79sehpTZLhfO979qrYLw3ATufo7kr_VvM,2991
30
+ general_manager/cache/dependencyIndex.py,sha256=7PWYbeeMCPCP3_xUSCTkrStr50csE4bgHiW81IMalsg,25599
31
+ general_manager/cache/modelDependencyCollector.py,sha256=iFiuuQKO3-sEcUxbpA1svxL2TMkr8F6afAtRXK5fUBk,2645
32
+ general_manager/cache/signals.py,sha256=0EQjBkhydObwOFpVm4le8nh4KxMfk_1hzSFZSQ0DiBE,2552
33
+ general_manager/factory/__init__.py,sha256=A-if6AxDHIejg9S2ObJXGolBfD5xfG9P1aUqT-KEGf0,943
34
+ general_manager/factory/autoFactory.py,sha256=ueO38ns0Z-NZtuVKk0BmqURxngxCyuP5Y6_UUvllrxg,10398
35
+ general_manager/factory/factories.py,sha256=9dIQygfvkaBCKgE8CFMTsamYn3aaTuQHY7lN-IQN6ng,12158
36
+ general_manager/factory/factoryMethods.py,sha256=sNxyoMzmSDHeEo11yhzNmUGFSt9AapXAjLpGkrsR594,8373
37
+ general_manager/interface/__init__.py,sha256=L0IQUHOJehJbX6hzX9nomMhT8f1tqrPtLDgINIpe5-w,1010
38
+ general_manager/interface/baseInterface.py,sha256=JgI5FpyArINVVFhGqDVtVijilrs1UUt-5RfYPmc96PE,15799
39
+ general_manager/interface/calculationInterface.py,sha256=mkoBXalFaktqz34zFPB0Eo0lmdMGCWVShtdm8NcK4y8,5952
40
+ general_manager/interface/databaseBasedInterface.py,sha256=U_9Q1uD03JXSdlgjW4-Evica2NsbP8Wg1FNN0j0aYPY,25543
41
+ general_manager/interface/databaseInterface.py,sha256=NVtwsGKffXVOo6D3UNkR496y-2Y7KTq2AjRhxxsjj-c,11731
42
+ general_manager/interface/models.py,sha256=RPvjw56IZyvrSH_-Hr9evO5Zkc6NrOUtAsKM0G0vb7o,3693
43
+ general_manager/interface/readOnlyInterface.py,sha256=9hmDh5SnZSsWkjlphKL_OtyorHjeRwzBrxXGobkMO1E,14912
44
+ general_manager/manager/__init__.py,sha256=Dbka86jtcS2NIxKXA0mohqnLZwLb6NDRX-HeD1_R6UQ,933
45
+ general_manager/manager/generalManager.py,sha256=98LR4TBJsGaQDcfhQOH_2HfZngZK9c0jYMn1W03Qblo,10217
46
+ general_manager/manager/groupManager.py,sha256=-e7Zvd4JQSvBhYVVnO7p8FarXE6YE4CzaTXgUGYzoGw,7313
47
+ general_manager/manager/input.py,sha256=UoVU0FDXHDEmuOk7mppx63DuwbPK2_qolcILar2Kk6U,3031
48
+ general_manager/manager/meta.py,sha256=gh2FEvSvyYTRU2mIOR-Vw2OM1PtNZ8CNqHE2ST87who,9614
49
+ general_manager/measurement/__init__.py,sha256=38-6kTERbw7EeOQAw3eZ9DDEu6hwwqkGJIfJy1D5fx0,993
50
+ general_manager/measurement/measurement.py,sha256=PRsR7KZiZ-m8pwR1DVlBxnetEkWcmHbzsXT2s5tfXs8,26067
51
+ general_manager/measurement/measurementField.py,sha256=zQbyLZT7E9Lx4f3u_wQ-rEoLPqH0FWhfWyOd1BaW--M,13950
52
+ general_manager/permission/__init__.py,sha256=s4Ka11uYBrymM5O-n5kIxOjwUprZ394jTuzGf5prO_8,981
53
+ general_manager/permission/basePermission.py,sha256=9XC62LvbvX6LTmPG2z_y-Q16zwgo2sqtxRoEtViYI3A,11101
54
+ general_manager/permission/fileBasedPermission.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ general_manager/permission/managerBasedPermission.py,sha256=Vju6lriBDgieOt_rVpn2EVtX4762DHtAO7799A1EveQ,10577
56
+ general_manager/permission/mutationPermission.py,sha256=LvUuozjcaQtcCmyO_8VZ_hCW-Ah-TYqRyqU-ghTh7LI,4584
57
+ general_manager/permission/permissionChecks.py,sha256=ax7OucBgm__-sFdmTP95eCllSmtd7M9JVoq9XmIJCEM,2294
58
+ general_manager/permission/permissionDataManager.py,sha256=m3ZP58iuuKSRNuTWZtz6mPbFKw7oALorHKu9AyIwwFA,3899
59
+ general_manager/permission/utils.py,sha256=BePKYjaThY2rFElOaaSWA5ZIOkH_psRF67N9odhziDM,2895
60
+ general_manager/rule/__init__.py,sha256=dFQLJNr0qpkpuzuBbMY-74jz_Y033YyB9X_OfeJYhSs,1026
61
+ general_manager/rule/handler.py,sha256=H7XX3reM5Wc3FxzHLZvB9npQo5yuuOAUNuG12ojp-zM,16316
62
+ general_manager/rule/rule.py,sha256=RMxrH8BdQwQmzuUxUMoWbbfn5nh2wR2uoOdxLZYntNc,19620
63
+ general_manager/utils/__init__.py,sha256=a72hkiV4_c3wQN-NK-q3Dw25irbzoTTfyKm173WtjwQ,1003
64
+ general_manager/utils/argsToKwargs.py,sha256=uvc0YkfeKvny4SGWNVqFioIxajBHrSkzoqrzonu7jeU,2128
65
+ general_manager/utils/filterParser.py,sha256=c8rmUXiTky3rHwqfNtvUgtUyM3pFOJaCVQzncI1b3AY,5684
66
+ general_manager/utils/formatString.py,sha256=Da7aJMjP_vH85N4O8iqMflQHNWJqZChXp4vFC-3kXUw,1512
67
+ general_manager/utils/jsonEncoder.py,sha256=Jw7iA50GEOjxk_AiebXJ9PNl_KijnvEOLG7oISZ07KE,1048
68
+ general_manager/utils/makeCacheKey.py,sha256=T9YTHDW8VN50iW_Yzklm9Xw-mp1Q7PKMphQ8lLKkqdA,1252
69
+ general_manager/utils/noneToZero.py,sha256=e3zk8Ofh3AsYW8spYmZWiv7FjOsr0jvfB9AOQbaPMWY,665
70
+ general_manager/utils/pathMapping.py,sha256=WnCY43pFQrpdUN8DyO6QsOpDB3MPIyXf7q6wms7bHws,9913
71
+ general_manager/utils/public_api.py,sha256=VvsJWJkJ9HIVu5xSQ_IhX2SROSbORXeGARpGVSGo9r4,2732
72
+ general_manager/utils/testing.py,sha256=DhWeOqtANpKEmvyfn7ihjKEAllXHMWdNOgJ7aw8EBcU,14913
73
+ generalmanager-0.18.0.dist-info/licenses/LICENSE,sha256=OcRwUgM4iiESN1oNELgyuwuah39XX-EPZiPDDHndNVI,1070
74
+ generalmanager-0.18.0.dist-info/METADATA,sha256=qOOxDFIO9f2lsbOClPId9ilSGOKwanGAVUhMXOS1NJQ,8215
75
+ generalmanager-0.18.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
76
+ generalmanager-0.18.0.dist-info/top_level.txt,sha256=sTDtExP9ga-YP3h3h42yivUY-A2Q23C2nw6LNKOho4I,16
77
+ generalmanager-0.18.0.dist-info/RECORD,,
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
@@ -1,76 +0,0 @@
1
- general_manager/__init__.py,sha256=OmRYpjg3N9w0yX1eAq32WdLtcf8I55M3sqhO-Qrawjo,742
2
- general_manager/apps.py,sha256=On2nTp2-QwNcOpYfIzjNE0Xnum4BMk_5YHbEloBIM-U,10351
3
- general_manager/public_api_registry.py,sha256=xKfgbyvXB_oZZku9ksLNzOGQbmL5QfWuRGE2qH2FOtc,7338
4
- general_manager/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- general_manager/_types/__init__.py,sha256=RmS0Ok-1-CwWOZL_socLWksEk9MfsshL9eQx879I4mU,60
6
- general_manager/_types/api.py,sha256=EnEUKCr24Ac2klzZJvx17dJNxDRyfI9zEx9I0vCfpio,489
7
- general_manager/_types/bucket.py,sha256=-kK46YX7mGwv3OVEjZTnmMqR9qpq8fT09Ez-wMF80nc,432
8
- general_manager/_types/cache.py,sha256=KfHr6Pdg9WpWKs5iyNLA4vq9S9GRMGwDCjLe7zgIMRw,655
9
- general_manager/_types/factory.py,sha256=2QZTc9jDbH55Jj-DuuuiWEdgqAFmlCqchsKB0EAwD5E,1653
10
- general_manager/_types/general_manager.py,sha256=mImHmBX39Al2q9Uqkmzrrvcdk3b-DzfEbyaTxc_Qiyw,952
11
- general_manager/_types/interface.py,sha256=mjrifUJyixgkjCVjcJokEs-pzxlssEJSXu7DsTK5Nzc,599
12
- general_manager/_types/manager.py,sha256=hjmV5gtWDhy_XAaZ6jIRVLCWVwps90tL8SqnC2oS8OQ,501
13
- general_manager/_types/measurement.py,sha256=5ZAsmjULrSe6Zh4-NyV1CXCAYJ75qqO_YWWQeeTao-Y,443
14
- general_manager/_types/permission.py,sha256=BG-RMsGgVCRVHyJgns9a1VTcwtqS9WzbG2HOrXaBNaI,413
15
- general_manager/_types/rule.py,sha256=Ju5t7NhGO76KnqwOElXk2cMI6cIYyMW5sEPayXExJPM,239
16
- general_manager/_types/utils.py,sha256=jze1yRZQw_OKVOmJNMv4MEu92rP01CVtjLBCEMqxCqk,1026
17
- general_manager/api/__init__.py,sha256=6Usf6aEc5RalaOE4xzqqSp7KChxi9W4Nts4nFIFHtt4,677
18
- general_manager/api/graphql.py,sha256=4pox3eRXWtZG9VshSgCJVrJ_9ONUUuzWhmXwetV5EgI,42798
19
- general_manager/api/mutation.py,sha256=6T-UHElnTxWubG99-Svy7AeFlHuXaKc8nKvRPADmI0E,7347
20
- general_manager/api/property.py,sha256=tT-eAKcuPhy0q_v0fKL4gPXcCVASC5M15_DYWMCQXjc,4358
21
- general_manager/bucket/__init__.py,sha256=Ay3kVmdxWC8nt3jYx3FFnND89ysD_z0GaD5rIr-v7Ec,690
22
- general_manager/bucket/baseBucket.py,sha256=wSQijZrs1joA-8IGh2AwD4KARSgYqSL4AxXq3KwOz6A,8126
23
- general_manager/bucket/calculationBucket.py,sha256=nH2VATcS3z07LGpKiWUEf3CiYnPjNeJPYhYo6ZSBNqk,25996
24
- general_manager/bucket/databaseBucket.py,sha256=5k0Q7iDJUgnOqQMg2SG35nM16C7_E5TzNMGJc0BVzXM,17127
25
- general_manager/bucket/groupBucket.py,sha256=-cN9jA_AOsnrpwmjiy6jTB_TFoUqLMeM1SdJ6DlSXag,12103
26
- general_manager/cache/__init__.py,sha256=_jwrpqGzlwaL1moqG1B9XL9V-QW08VVdtDbkVDfN_sU,698
27
- general_manager/cache/cacheDecorator.py,sha256=kgUvJHcC8tilqf1JH2QvyG-158AT_rmuKf6pgUy1IBs,3406
28
- general_manager/cache/cacheTracker.py,sha256=rb637hGHOe79sehpTZLhfO979qrYLw3ATufo7kr_VvM,2991
29
- general_manager/cache/dependencyIndex.py,sha256=gaSbEpw9qdIMgf_5jRryuTAvq9x3hwMxP2bi5S4xj84,13206
30
- general_manager/cache/modelDependencyCollector.py,sha256=iFiuuQKO3-sEcUxbpA1svxL2TMkr8F6afAtRXK5fUBk,2645
31
- general_manager/cache/signals.py,sha256=pKibv1EL7fYL4KB7O13TpqVTKZLnqo6A620vKlXaNkg,2015
32
- general_manager/factory/__init__.py,sha256=t9RLlp_ZPU_0Xu5I7hg-xwo3yy1eSwnvfXMYvpGCFtE,714
33
- general_manager/factory/autoFactory.py,sha256=j5jy5FASG8xhToE1yCwQ8c53XLsKBtPLFYPWS17K9Fk,8441
34
- general_manager/factory/factories.py,sha256=7rmO7tIBDiBpRoXUbPleNHYuXs0owAMGcoOsFTKr3KA,8475
35
- general_manager/factory/factoryMethods.py,sha256=gFHctepxvdNJKASuNvj5RrDCheIpBYQHh3D0n7OeIsM,5018
36
- general_manager/interface/__init__.py,sha256=kLcHRvDb9_lxNgNEp4GXZ3qCZc5tHwruEt1tz3nDgtA,726
37
- general_manager/interface/baseInterface.py,sha256=Gg1r1rzgn2AM2IC4lDUg2Q5m8AwlX-c_9RVKgALeGa4,10797
38
- general_manager/interface/calculationInterface.py,sha256=5xr4pnn3XNYXlEBgsI9YbSjCXBGeVA11x7pgicPqgW8,5079
39
- general_manager/interface/databaseBasedInterface.py,sha256=lRAmjaTUHKk250S4F2WKe--52xvYiip3pfIrG1mfB-g,24096
40
- general_manager/interface/databaseInterface.py,sha256=vDj2mgWnIrsvcu1_HBq018303WndhqUL0o2qnNsQ6hM,8356
41
- general_manager/interface/models.py,sha256=rtuhOKeSgD2DboeZIMAQU99JyCOT7SuiuGqWvDjAQqk,3576
42
- general_manager/interface/readOnlyInterface.py,sha256=UcaCClVJv8IT-EBm__IN4jU6td_sXRRCN_Y_OKngs_4,11392
43
- general_manager/manager/__init__.py,sha256=UwvLs13_UpYsq5igSY78cbyg11C6iTrHlr-rtDql43I,703
44
- general_manager/manager/generalManager.py,sha256=A6kYjM2duxT0AAeN0er87gRWjLmcPmEjPmNHTQgACgs,9577
45
- general_manager/manager/groupManager.py,sha256=3Wl40cBRc1hL35zBCQDi8V2AIERh_dtbUeL1h1ZCnak,6428
46
- general_manager/manager/input.py,sha256=UoVU0FDXHDEmuOk7mppx63DuwbPK2_qolcILar2Kk6U,3031
47
- general_manager/manager/meta.py,sha256=iGYwuVrM0SWyvzVPLTS0typ8VT38QoxFuWhA1b1FBnA,5032
48
- general_manager/measurement/__init__.py,sha256=Tt2Es7J-dGWcd8bFK4PR2m4AKBlRoj2WGXcKy64fOTY,711
49
- general_manager/measurement/measurement.py,sha256=FOtnOASNV6qhYsIsN-VX9JuGWwvpmJqusMgYxkEHhqE,16876
50
- general_manager/measurement/measurementField.py,sha256=4W12etl4OukuQOf2K016KZ9K7LtzgEE1FEIW2jySzRM,13227
51
- general_manager/permission/__init__.py,sha256=myUSLuG30I4OQa7CvKFuloKAAEJCir6ew27Tlc6653Q,730
52
- general_manager/permission/basePermission.py,sha256=Gv-6HkX_MXqm1RZxKvK_J-9cuSOEOYn5yYWAzL8PjlA,6728
53
- general_manager/permission/fileBasedPermission.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- general_manager/permission/managerBasedPermission.py,sha256=KgTUl7_oDjCuQlPrgTkjoduA9w04TWAK1jWZ1T0PiwE,7795
55
- general_manager/permission/mutationPermission.py,sha256=QuGpdX8lyM-_xxclYXXwDVxJ_WSEKvwLIJaFdtcmvSE,4197
56
- general_manager/permission/permissionChecks.py,sha256=l09zokWPwZKUTlJOxtE5r_ZdPDDIDxGoAbydL4wHmII,2253
57
- general_manager/permission/permissionDataManager.py,sha256=Jf5JiqKH4CdnxeNGqfB3NnkjL5qzERaYvj7qprw_05c,3190
58
- general_manager/permission/utils.py,sha256=gnKSSiet5U5Zm9o7E5-QdN29tX_VX6sv82K5evGVzPk,1629
59
- general_manager/rule/__init__.py,sha256=BHTtPyZ6sCXBeJgToL5VGoxsGCdwEi5R5qcT4xMYL_k,690
60
- general_manager/rule/handler.py,sha256=h85-Oazhc4gpWNl8ieR4pDEtu8a8lTeJcbiEj11C4Nw,11349
61
- general_manager/rule/rule.py,sha256=uo1XT_5lN11t5AmFg5v5AsIC1-JkmqannQvAPHmyQXY,11303
62
- general_manager/utils/__init__.py,sha256=BADJHiMBYpT1MKtnls3P0V6sdmd2UX8VgEAlQu_KliI,700
63
- general_manager/utils/argsToKwargs.py,sha256=XYIEgPBeIvJoNWeqmO6djRrqo3IcnPcoSUbfWrUByI0,1294
64
- general_manager/utils/filterParser.py,sha256=6GzcpCzMRkmJkNs6SttJqS4DQHa_-nYheyhSWDrhIrg,5100
65
- general_manager/utils/formatString.py,sha256=McmsBaB1DnA4YVKswXn5rqNRPHUEiX6dID69YBzfoh0,1511
66
- general_manager/utils/jsonEncoder.py,sha256=Jw7iA50GEOjxk_AiebXJ9PNl_KijnvEOLG7oISZ07KE,1048
67
- general_manager/utils/makeCacheKey.py,sha256=T9YTHDW8VN50iW_Yzklm9Xw-mp1Q7PKMphQ8lLKkqdA,1252
68
- general_manager/utils/noneToZero.py,sha256=e3zk8Ofh3AsYW8spYmZWiv7FjOsr0jvfB9AOQbaPMWY,665
69
- general_manager/utils/pathMapping.py,sha256=3BWRUM1EimUKeh8i_UK6nYsKtOJDykgmZgCA9dgYjqU,9531
70
- general_manager/utils/public_api.py,sha256=SNTI_tRMcbv0qMttm-wMBoAEkqSEFMTI6ZHMajOnDlg,1437
71
- general_manager/utils/testing.py,sha256=BCquJ5RNiLbRFdcrgYP227TxSRfQKgpkvmWvsJqJAjk,13276
72
- generalmanager-0.16.1.dist-info/licenses/LICENSE,sha256=OezwCA4X2-xXmRDvMaqHvHCeUmGtyCYjZ8F3XUxSGwc,1069
73
- generalmanager-0.16.1.dist-info/METADATA,sha256=YHfoHcCYb9AdJH0_XkWeVXHmfmW6vzZ5AnBaral6Jrk,8175
74
- generalmanager-0.16.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
- generalmanager-0.16.1.dist-info/top_level.txt,sha256=sTDtExP9ga-YP3h3h42yivUY-A2Q23C2nw6LNKOho4I,16
76
- generalmanager-0.16.1.dist-info/RECORD,,