GeneralManager 0.14.1__py3-none-any.whl → 0.15.1__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.
- general_manager/__init__.py +49 -0
- general_manager/api/__init__.py +36 -0
- general_manager/api/graphql.py +92 -43
- general_manager/api/mutation.py +35 -10
- general_manager/api/property.py +26 -3
- general_manager/apps.py +23 -16
- general_manager/bucket/__init__.py +32 -0
- general_manager/bucket/baseBucket.py +76 -64
- general_manager/bucket/calculationBucket.py +188 -108
- general_manager/bucket/databaseBucket.py +130 -49
- general_manager/bucket/groupBucket.py +113 -60
- general_manager/cache/__init__.py +38 -0
- general_manager/cache/cacheDecorator.py +29 -17
- general_manager/cache/cacheTracker.py +34 -15
- general_manager/cache/dependencyIndex.py +117 -33
- general_manager/cache/modelDependencyCollector.py +17 -8
- general_manager/cache/signals.py +17 -6
- general_manager/factory/__init__.py +34 -5
- general_manager/factory/autoFactory.py +57 -60
- general_manager/factory/factories.py +39 -14
- general_manager/factory/factoryMethods.py +38 -1
- general_manager/interface/__init__.py +36 -0
- general_manager/interface/baseInterface.py +71 -27
- general_manager/interface/calculationInterface.py +18 -10
- general_manager/interface/databaseBasedInterface.py +102 -71
- general_manager/interface/databaseInterface.py +66 -20
- general_manager/interface/models.py +10 -4
- general_manager/interface/readOnlyInterface.py +44 -30
- general_manager/manager/__init__.py +36 -3
- general_manager/manager/generalManager.py +73 -47
- general_manager/manager/groupManager.py +72 -17
- general_manager/manager/input.py +23 -15
- general_manager/manager/meta.py +53 -53
- general_manager/measurement/__init__.py +37 -2
- general_manager/measurement/measurement.py +135 -58
- general_manager/measurement/measurementField.py +161 -61
- general_manager/permission/__init__.py +32 -1
- general_manager/permission/basePermission.py +29 -12
- general_manager/permission/managerBasedPermission.py +32 -26
- general_manager/permission/mutationPermission.py +32 -3
- general_manager/permission/permissionChecks.py +9 -1
- general_manager/permission/permissionDataManager.py +49 -15
- general_manager/permission/utils.py +14 -3
- general_manager/rule/__init__.py +27 -1
- general_manager/rule/handler.py +90 -5
- general_manager/rule/rule.py +40 -27
- general_manager/utils/__init__.py +44 -2
- general_manager/utils/argsToKwargs.py +17 -9
- general_manager/utils/filterParser.py +29 -30
- general_manager/utils/formatString.py +2 -0
- general_manager/utils/jsonEncoder.py +14 -1
- general_manager/utils/makeCacheKey.py +18 -12
- general_manager/utils/noneToZero.py +8 -6
- general_manager/utils/pathMapping.py +92 -29
- general_manager/utils/public_api.py +49 -0
- general_manager/utils/testing.py +135 -69
- {generalmanager-0.14.1.dist-info → generalmanager-0.15.1.dist-info}/METADATA +10 -2
- generalmanager-0.15.1.dist-info/RECORD +62 -0
- generalmanager-0.14.1.dist-info/RECORD +0 -58
- {generalmanager-0.14.1.dist-info → generalmanager-0.15.1.dist-info}/WHEEL +0 -0
- {generalmanager-0.14.1.dist-info → generalmanager-0.15.1.dist-info}/licenses/LICENSE +0 -0
- {generalmanager-0.14.1.dist-info → generalmanager-0.15.1.dist-info}/top_level.txt +0 -0
general_manager/utils/testing.py
CHANGED
@@ -1,40 +1,41 @@
|
|
1
|
-
|
2
|
-
from general_manager.apps import GeneralmanagerConfig
|
3
|
-
from importlib import import_module
|
4
|
-
from django.db import connection
|
5
|
-
from django.conf import settings
|
6
|
-
from typing import cast
|
7
|
-
from django.db import models
|
8
|
-
from general_manager.manager.generalManager import GeneralManager
|
9
|
-
from general_manager.manager.meta import GeneralManagerMeta
|
10
|
-
from general_manager.api.graphql import GraphQL
|
11
|
-
from django.apps import apps as global_apps
|
12
|
-
from contextlib import suppress
|
13
|
-
|
14
|
-
|
15
|
-
from unittest.mock import ANY
|
16
|
-
from general_manager.cache.cacheDecorator import _SENTINEL
|
1
|
+
"""Test utilities for GeneralManager GraphQL integrations."""
|
17
2
|
|
3
|
+
from contextlib import suppress
|
4
|
+
from importlib import import_module
|
5
|
+
from typing import Any, Callable, cast
|
18
6
|
|
19
|
-
from django.
|
7
|
+
from django.apps import AppConfig, apps as global_apps
|
8
|
+
from django.conf import settings
|
20
9
|
from django.core.cache import caches
|
21
10
|
from django.core.cache.backends.locmem import LocMemCache
|
11
|
+
from django.db import connection, models
|
12
|
+
from django.test import override_settings
|
13
|
+
from graphene_django.utils.testing import GraphQLTransactionTestCase # type: ignore[import]
|
14
|
+
from unittest.mock import ANY
|
15
|
+
|
16
|
+
from general_manager.api.graphql import GraphQL
|
17
|
+
from general_manager.apps import GeneralmanagerConfig
|
18
|
+
from general_manager.cache.cacheDecorator import _SENTINEL
|
19
|
+
from general_manager.manager.generalManager import GeneralManager
|
20
|
+
from general_manager.manager.meta import GeneralManagerMeta
|
22
21
|
|
23
|
-
_original_get_app =
|
22
|
+
_original_get_app: Callable[[str], AppConfig | None] = (
|
23
|
+
global_apps.get_containing_app_config
|
24
|
+
)
|
24
25
|
|
25
26
|
|
26
|
-
def createFallbackGetApp(fallback_app: str):
|
27
|
+
def createFallbackGetApp(fallback_app: str) -> Callable[[str], AppConfig | None]:
|
27
28
|
"""
|
28
|
-
|
29
|
+
Create an app-config lookup that falls back to a specific Django app.
|
29
30
|
|
30
31
|
Parameters:
|
31
|
-
fallback_app (str):
|
32
|
+
fallback_app (str): App label used when the default lookup cannot resolve the object.
|
32
33
|
|
33
34
|
Returns:
|
34
|
-
|
35
|
+
Callable[[str], Any]: Function returning either the resolved configuration or the fallback app configuration when available.
|
35
36
|
"""
|
36
37
|
|
37
|
-
def _fallback_get_app(object_name: str):
|
38
|
+
def _fallback_get_app(object_name: str) -> AppConfig | None:
|
38
39
|
cfg = _original_get_app(object_name)
|
39
40
|
if cfg is not None:
|
40
41
|
return cfg
|
@@ -46,11 +47,14 @@ def createFallbackGetApp(fallback_app: str):
|
|
46
47
|
return _fallback_get_app
|
47
48
|
|
48
49
|
|
49
|
-
def _default_graphql_url_clear():
|
50
|
+
def _default_graphql_url_clear() -> None:
|
50
51
|
"""
|
51
|
-
|
52
|
+
Remove the default GraphQL URL pattern from Django's root URL configuration.
|
53
|
+
|
54
|
+
The lookup searches for the first URL pattern whose view class is `GraphQLView` and removes it from the URL list.
|
52
55
|
|
53
|
-
|
56
|
+
Returns:
|
57
|
+
None
|
54
58
|
"""
|
55
59
|
urlconf = import_module(settings.ROOT_URLCONF)
|
56
60
|
for pattern in urlconf.urlpatterns:
|
@@ -69,22 +73,41 @@ class GMTestCaseMeta(type):
|
|
69
73
|
then performs GM environment initialization, then super().setUpClass().
|
70
74
|
"""
|
71
75
|
|
72
|
-
def __new__(
|
76
|
+
def __new__(
|
77
|
+
mcs: type["GMTestCaseMeta"],
|
78
|
+
name: str,
|
79
|
+
bases: tuple[type, ...],
|
80
|
+
attrs: dict[str, object],
|
81
|
+
) -> type:
|
73
82
|
"""
|
74
|
-
|
83
|
+
Construct a new test case class that wires GeneralManager-specific initialisation into `setUpClass`.
|
84
|
+
|
85
|
+
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`.
|
75
89
|
|
76
|
-
|
90
|
+
Returns:
|
91
|
+
type: Newly constructed class with an augmented `setUpClass` implementation.
|
77
92
|
"""
|
78
93
|
user_setup = attrs.get("setUpClass")
|
79
|
-
fallback_app = attrs.get("fallback_app", "general_manager")
|
94
|
+
fallback_app = cast(str | None, attrs.get("fallback_app", "general_manager"))
|
80
95
|
# MERKE dir das echte GraphQLTransactionTestCase.setUpClass
|
81
96
|
base_setup = GraphQLTransactionTestCase.setUpClass
|
82
97
|
|
83
|
-
def wrapped_setUpClass(
|
98
|
+
def wrapped_setUpClass(
|
99
|
+
cls: type["GeneralManagerTransactionTestCase"],
|
100
|
+
) -> None:
|
84
101
|
"""
|
85
|
-
|
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
|
+
|
106
|
+
Parameters:
|
107
|
+
cls (type[GeneralManagerTransactionTestCase]): Test case subclass whose environment is being initialised.
|
86
108
|
|
87
|
-
|
109
|
+
Returns:
|
110
|
+
None
|
88
111
|
"""
|
89
112
|
GraphQL._query_class = None
|
90
113
|
GraphQL._mutation_class = None
|
@@ -94,13 +117,21 @@ class GMTestCaseMeta(type):
|
|
94
117
|
GraphQL.graphql_filter_type_registry = {}
|
95
118
|
|
96
119
|
if fallback_app is not None:
|
97
|
-
|
98
|
-
|
120
|
+
setattr(
|
121
|
+
global_apps,
|
122
|
+
"get_containing_app_config",
|
123
|
+
createFallbackGetApp(fallback_app),
|
99
124
|
)
|
100
125
|
|
101
126
|
# 1) user-defined setUpClass (if any)
|
102
127
|
if user_setup:
|
103
|
-
user_setup
|
128
|
+
if isinstance(user_setup, classmethod):
|
129
|
+
user_setup.__func__(cls)
|
130
|
+
else:
|
131
|
+
cast(
|
132
|
+
Callable[[type["GeneralManagerTransactionTestCase"]], None],
|
133
|
+
user_setup,
|
134
|
+
)(cls)
|
104
135
|
# 2) clear URL patterns
|
105
136
|
_default_graphql_url_clear()
|
106
137
|
# 3) register models & create tables
|
@@ -131,38 +162,52 @@ class GMTestCaseMeta(type):
|
|
131
162
|
|
132
163
|
|
133
164
|
class LoggingCache(LocMemCache):
|
134
|
-
|
165
|
+
"""An in-memory cache backend that records its get and set operations."""
|
166
|
+
|
167
|
+
def __init__(self, location: str, params: dict[str, Any]) -> None:
|
168
|
+
"""Initialise the cache backend and the operation log store."""
|
169
|
+
super().__init__(location, params)
|
170
|
+
self.ops: list[tuple[str, object, bool] | tuple[str, object]] = []
|
171
|
+
|
172
|
+
def get(
|
173
|
+
self,
|
174
|
+
key: str,
|
175
|
+
default: object = None,
|
176
|
+
version: int | None = None,
|
177
|
+
) -> object:
|
135
178
|
"""
|
136
|
-
|
137
|
-
"""
|
138
|
-
super().__init__(*args, **kwargs)
|
139
|
-
self.ops = []
|
140
|
-
|
141
|
-
def get(self, key, default=None, version=None):
|
142
|
-
"""
|
143
|
-
Retrieve a value from the cache and log whether it was a cache hit or miss.
|
179
|
+
Retrieve a value from the cache and record whether it was a hit or miss.
|
144
180
|
|
145
181
|
Parameters:
|
146
|
-
key (str):
|
147
|
-
default:
|
148
|
-
version: Optional cache version.
|
182
|
+
key (str): Cache key identifying the stored value.
|
183
|
+
default (Any): Fallback returned when the key is absent.
|
184
|
+
version (int | None): Optional cache version used for the lookup.
|
149
185
|
|
150
186
|
Returns:
|
151
|
-
|
187
|
+
Any: Cached value when present; otherwise, the provided default.
|
152
188
|
"""
|
153
189
|
val = super().get(key, default)
|
154
190
|
self.ops.append(("get", key, val is not _SENTINEL))
|
155
191
|
return val
|
156
192
|
|
157
|
-
def set(
|
193
|
+
def set(
|
194
|
+
self,
|
195
|
+
key: str,
|
196
|
+
value: object,
|
197
|
+
timeout: int | None = None,
|
198
|
+
version: int | None = None,
|
199
|
+
) -> None:
|
158
200
|
"""
|
159
|
-
Store a value in the cache and
|
201
|
+
Store a value in the cache and append the operation to the log.
|
160
202
|
|
161
203
|
Parameters:
|
162
|
-
key (str):
|
163
|
-
value (Any):
|
164
|
-
timeout (
|
165
|
-
version (
|
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.
|
207
|
+
version (int | None): Optional cache version identifier.
|
208
|
+
|
209
|
+
Returns:
|
210
|
+
None
|
166
211
|
"""
|
167
212
|
super().set(key, value, timeout)
|
168
213
|
self.ops.append(("set", key))
|
@@ -185,15 +230,25 @@ class GeneralManagerTransactionTestCase(
|
|
185
230
|
|
186
231
|
def setUp(self) -> None:
|
187
232
|
"""
|
188
|
-
|
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.
|
236
|
+
|
237
|
+
Returns:
|
238
|
+
None
|
189
239
|
"""
|
190
240
|
super().setUp()
|
191
|
-
setattr(caches._connections, "default", LoggingCache("test-cache", {})) # type: ignore
|
241
|
+
setattr(caches._connections, "default", LoggingCache("test-cache", {})) # type: ignore[attr-defined]
|
192
242
|
self.__resetCacheCounter()
|
193
243
|
|
194
244
|
@classmethod
|
195
245
|
def tearDownClass(cls) -> None:
|
196
|
-
"""
|
246
|
+
"""
|
247
|
+
Remove dynamically registered managers and restore patched global state.
|
248
|
+
|
249
|
+
Returns:
|
250
|
+
None
|
251
|
+
"""
|
197
252
|
# remove GraphQL URL pattern added during setUpClass
|
198
253
|
_default_graphql_url_clear()
|
199
254
|
|
@@ -244,18 +299,22 @@ class GeneralManagerTransactionTestCase(
|
|
244
299
|
]
|
245
300
|
|
246
301
|
# reset fallback app lookup
|
247
|
-
global_apps
|
302
|
+
setattr(global_apps, "get_containing_app_config", _original_get_app)
|
248
303
|
|
249
304
|
super().tearDownClass()
|
250
305
|
|
251
306
|
#
|
252
|
-
def assertCacheMiss(self):
|
307
|
+
def assertCacheMiss(self) -> None:
|
253
308
|
"""
|
254
|
-
Assert that a cache
|
309
|
+
Assert that a cache retrieval missed and was followed by a write.
|
255
310
|
|
256
|
-
|
311
|
+
The expectation is a `get` operation returning no value and a subsequent `set` operation storing the computed result. The cache operation log is cleared afterwards.
|
312
|
+
|
313
|
+
Returns:
|
314
|
+
None
|
257
315
|
"""
|
258
|
-
|
316
|
+
cache_backend = cast(LoggingCache, caches["default"])
|
317
|
+
ops = cache_backend.ops
|
259
318
|
self.assertIn(
|
260
319
|
("get", ANY, False),
|
261
320
|
ops,
|
@@ -264,13 +323,17 @@ class GeneralManagerTransactionTestCase(
|
|
264
323
|
self.assertIn(("set", ANY), ops, "Cache.set should have stored the value")
|
265
324
|
self.__resetCacheCounter()
|
266
325
|
|
267
|
-
def assertCacheHit(self):
|
326
|
+
def assertCacheHit(self) -> None:
|
268
327
|
"""
|
269
|
-
Assert that a cache
|
328
|
+
Assert that a cache lookup succeeded without triggering a write.
|
329
|
+
|
330
|
+
The expectation is a `get` operation that returns a cached value and no recorded `set` operation. The cache operation log is cleared afterwards.
|
270
331
|
|
271
|
-
|
332
|
+
Returns:
|
333
|
+
None
|
272
334
|
"""
|
273
|
-
|
335
|
+
cache_backend = cast(LoggingCache, caches["default"])
|
336
|
+
ops = cache_backend.ops
|
274
337
|
self.assertIn(
|
275
338
|
("get", ANY, True),
|
276
339
|
ops,
|
@@ -284,8 +347,11 @@ class GeneralManagerTransactionTestCase(
|
|
284
347
|
)
|
285
348
|
self.__resetCacheCounter()
|
286
349
|
|
287
|
-
def __resetCacheCounter(self):
|
350
|
+
def __resetCacheCounter(self) -> None:
|
288
351
|
"""
|
289
352
|
Clear the log of cache operations recorded by the LoggingCache instance.
|
353
|
+
|
354
|
+
Returns:
|
355
|
+
None
|
290
356
|
"""
|
291
|
-
caches["default"].ops = []
|
357
|
+
cast(LoggingCache, caches["default"]).ops = []
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: GeneralManager
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.15.1
|
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
|
@@ -26,7 +26,9 @@ License: MIT License
|
|
26
26
|
SOFTWARE.
|
27
27
|
Classifier: License :: OSI Approved :: MIT License
|
28
28
|
Classifier: Programming Language :: Python :: 3
|
29
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
29
30
|
Classifier: Programming Language :: Python :: 3.12
|
31
|
+
Classifier: Programming Language :: Python :: 3.13
|
30
32
|
Classifier: Framework :: Django
|
31
33
|
Classifier: Intended Audience :: Developers
|
32
34
|
Classifier: Operating System :: OS Independent
|
@@ -63,6 +65,12 @@ Dynamic: license-file
|
|
63
65
|
|
64
66
|
# GeneralManager
|
65
67
|
|
68
|
+
[](https://pypi.org/project/GeneralManager/)
|
69
|
+
[](https://pypi.org/project/GeneralManager/)
|
70
|
+
[](https://github.com/TimKleindick/general_manager/actions/workflows/test.yml)
|
71
|
+
[](https://app.codecov.io/gh/TimKleindick/general_manager)
|
72
|
+
[](LICENSE)
|
73
|
+
|
66
74
|
## Overview
|
67
75
|
|
68
76
|
GeneralManager is a powerful and flexible framework designed for managing and processing data. It provides a modular structure that enables developers to implement complex business logic efficiently. The module is written entirely in Python and uses Django as the backend framework.
|
@@ -202,4 +210,4 @@ query {
|
|
202
210
|
|
203
211
|
## License
|
204
212
|
|
205
|
-
This project is distributed under the **
|
213
|
+
This project is distributed under the **MIT License**. For further details see the [LICENSE](./LICENSE) file.
|
@@ -0,0 +1,62 @@
|
|
1
|
+
general_manager/__init__.py,sha256=eLtLAiM-uBx-zrYZYqriRBs4CBtBI1Id8O3GdLT4CVU,1486
|
2
|
+
general_manager/apps.py,sha256=On2nTp2-QwNcOpYfIzjNE0Xnum4BMk_5YHbEloBIM-U,10351
|
3
|
+
general_manager/api/__init__.py,sha256=p46Gsgkm6htz85mz-NvSwurWJqsngLvPfuLjNjcrOfc,971
|
4
|
+
general_manager/api/graphql.py,sha256=4pox3eRXWtZG9VshSgCJVrJ_9ONUUuzWhmXwetV5EgI,42798
|
5
|
+
general_manager/api/mutation.py,sha256=6T-UHElnTxWubG99-Svy7AeFlHuXaKc8nKvRPADmI0E,7347
|
6
|
+
general_manager/api/property.py,sha256=tT-eAKcuPhy0q_v0fKL4gPXcCVASC5M15_DYWMCQXjc,4358
|
7
|
+
general_manager/bucket/__init__.py,sha256=XEmEkXHgVWlJpMVLAgsWtXGrWC7CKz2dCCUMReGvrro,894
|
8
|
+
general_manager/bucket/baseBucket.py,sha256=wSQijZrs1joA-8IGh2AwD4KARSgYqSL4AxXq3KwOz6A,8126
|
9
|
+
general_manager/bucket/calculationBucket.py,sha256=nH2VATcS3z07LGpKiWUEf3CiYnPjNeJPYhYo6ZSBNqk,25996
|
10
|
+
general_manager/bucket/databaseBucket.py,sha256=5k0Q7iDJUgnOqQMg2SG35nM16C7_E5TzNMGJc0BVzXM,17127
|
11
|
+
general_manager/bucket/groupBucket.py,sha256=-cN9jA_AOsnrpwmjiy6jTB_TFoUqLMeM1SdJ6DlSXag,12103
|
12
|
+
general_manager/cache/__init__.py,sha256=DKqJ3yvm1_GDcteoLcgYCsJNiTFiDzWx1P4eKVsxky0,1186
|
13
|
+
general_manager/cache/cacheDecorator.py,sha256=kgUvJHcC8tilqf1JH2QvyG-158AT_rmuKf6pgUy1IBs,3406
|
14
|
+
general_manager/cache/cacheTracker.py,sha256=rb637hGHOe79sehpTZLhfO979qrYLw3ATufo7kr_VvM,2991
|
15
|
+
general_manager/cache/dependencyIndex.py,sha256=gaSbEpw9qdIMgf_5jRryuTAvq9x3hwMxP2bi5S4xj84,13206
|
16
|
+
general_manager/cache/modelDependencyCollector.py,sha256=iFiuuQKO3-sEcUxbpA1svxL2TMkr8F6afAtRXK5fUBk,2645
|
17
|
+
general_manager/cache/signals.py,sha256=pKibv1EL7fYL4KB7O13TpqVTKZLnqo6A620vKlXaNkg,2015
|
18
|
+
general_manager/factory/__init__.py,sha256=YSL7_YQ4tu-ljH0g6AKCFtFz7EAZ7kv320CozJLFXIo,933
|
19
|
+
general_manager/factory/autoFactory.py,sha256=j5jy5FASG8xhToE1yCwQ8c53XLsKBtPLFYPWS17K9Fk,8441
|
20
|
+
general_manager/factory/factories.py,sha256=7rmO7tIBDiBpRoXUbPleNHYuXs0owAMGcoOsFTKr3KA,8475
|
21
|
+
general_manager/factory/factoryMethods.py,sha256=gFHctepxvdNJKASuNvj5RrDCheIpBYQHh3D0n7OeIsM,5018
|
22
|
+
general_manager/interface/__init__.py,sha256=26nMPWnUN2iFXP-gcbkGrjtCHpNNjwj004hw9SML8wo,1007
|
23
|
+
general_manager/interface/baseInterface.py,sha256=Gg1r1rzgn2AM2IC4lDUg2Q5m8AwlX-c_9RVKgALeGa4,10797
|
24
|
+
general_manager/interface/calculationInterface.py,sha256=5xr4pnn3XNYXlEBgsI9YbSjCXBGeVA11x7pgicPqgW8,5079
|
25
|
+
general_manager/interface/databaseBasedInterface.py,sha256=lRAmjaTUHKk250S4F2WKe--52xvYiip3pfIrG1mfB-g,24096
|
26
|
+
general_manager/interface/databaseInterface.py,sha256=vDj2mgWnIrsvcu1_HBq018303WndhqUL0o2qnNsQ6hM,8356
|
27
|
+
general_manager/interface/models.py,sha256=rtuhOKeSgD2DboeZIMAQU99JyCOT7SuiuGqWvDjAQqk,3576
|
28
|
+
general_manager/interface/readOnlyInterface.py,sha256=UcaCClVJv8IT-EBm__IN4jU6td_sXRRCN_Y_OKngs_4,11392
|
29
|
+
general_manager/manager/__init__.py,sha256=KguPL7lFPShjJ1IeaEnLtrj4bs71cVvypB87N_i3tPs,988
|
30
|
+
general_manager/manager/generalManager.py,sha256=A6kYjM2duxT0AAeN0er87gRWjLmcPmEjPmNHTQgACgs,9577
|
31
|
+
general_manager/manager/groupManager.py,sha256=3Wl40cBRc1hL35zBCQDi8V2AIERh_dtbUeL1h1ZCnak,6428
|
32
|
+
general_manager/manager/input.py,sha256=UoVU0FDXHDEmuOk7mppx63DuwbPK2_qolcILar2Kk6U,3031
|
33
|
+
general_manager/manager/meta.py,sha256=iGYwuVrM0SWyvzVPLTS0typ8VT38QoxFuWhA1b1FBnA,5032
|
34
|
+
general_manager/measurement/__init__.py,sha256=90liIpMQ7lcPI7pYt_sgOAOBIRmS2yFi0dIvIgKvo-I,922
|
35
|
+
general_manager/measurement/measurement.py,sha256=FOtnOASNV6qhYsIsN-VX9JuGWwvpmJqusMgYxkEHhqE,16876
|
36
|
+
general_manager/measurement/measurementField.py,sha256=4W12etl4OukuQOf2K016KZ9K7LtzgEE1FEIW2jySzRM,13227
|
37
|
+
general_manager/permission/__init__.py,sha256=COPiaYkgSQ0FGeu7ncJ0z40I9sdgvUVOj9Lmz_3MazM,897
|
38
|
+
general_manager/permission/basePermission.py,sha256=Gv-6HkX_MXqm1RZxKvK_J-9cuSOEOYn5yYWAzL8PjlA,6728
|
39
|
+
general_manager/permission/fileBasedPermission.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
|
+
general_manager/permission/managerBasedPermission.py,sha256=KgTUl7_oDjCuQlPrgTkjoduA9w04TWAK1jWZ1T0PiwE,7795
|
41
|
+
general_manager/permission/mutationPermission.py,sha256=QuGpdX8lyM-_xxclYXXwDVxJ_WSEKvwLIJaFdtcmvSE,4197
|
42
|
+
general_manager/permission/permissionChecks.py,sha256=l09zokWPwZKUTlJOxtE5r_ZdPDDIDxGoAbydL4wHmII,2253
|
43
|
+
general_manager/permission/permissionDataManager.py,sha256=Jf5JiqKH4CdnxeNGqfB3NnkjL5qzERaYvj7qprw_05c,3190
|
44
|
+
general_manager/permission/utils.py,sha256=gnKSSiet5U5Zm9o7E5-QdN29tX_VX6sv82K5evGVzPk,1629
|
45
|
+
general_manager/rule/__init__.py,sha256=lVMv9kZMYQML6NVdtOBSWKQH3EkHsAA-dJDuuPGkSPg,657
|
46
|
+
general_manager/rule/handler.py,sha256=h85-Oazhc4gpWNl8ieR4pDEtu8a8lTeJcbiEj11C4Nw,11349
|
47
|
+
general_manager/rule/rule.py,sha256=uo1XT_5lN11t5AmFg5v5AsIC1-JkmqannQvAPHmyQXY,11303
|
48
|
+
general_manager/utils/__init__.py,sha256=jtFF_ygTnTgzpF07GdE6EcfLpJgAeIAbfAmLcLq7sLk,1443
|
49
|
+
general_manager/utils/argsToKwargs.py,sha256=XYIEgPBeIvJoNWeqmO6djRrqo3IcnPcoSUbfWrUByI0,1294
|
50
|
+
general_manager/utils/filterParser.py,sha256=6GzcpCzMRkmJkNs6SttJqS4DQHa_-nYheyhSWDrhIrg,5100
|
51
|
+
general_manager/utils/formatString.py,sha256=McmsBaB1DnA4YVKswXn5rqNRPHUEiX6dID69YBzfoh0,1511
|
52
|
+
general_manager/utils/jsonEncoder.py,sha256=Jw7iA50GEOjxk_AiebXJ9PNl_KijnvEOLG7oISZ07KE,1048
|
53
|
+
general_manager/utils/makeCacheKey.py,sha256=T9YTHDW8VN50iW_Yzklm9Xw-mp1Q7PKMphQ8lLKkqdA,1252
|
54
|
+
general_manager/utils/noneToZero.py,sha256=e3zk8Ofh3AsYW8spYmZWiv7FjOsr0jvfB9AOQbaPMWY,665
|
55
|
+
general_manager/utils/pathMapping.py,sha256=3BWRUM1EimUKeh8i_UK6nYsKtOJDykgmZgCA9dgYjqU,9531
|
56
|
+
general_manager/utils/public_api.py,sha256=SNTI_tRMcbv0qMttm-wMBoAEkqSEFMTI6ZHMajOnDlg,1437
|
57
|
+
general_manager/utils/testing.py,sha256=BCquJ5RNiLbRFdcrgYP227TxSRfQKgpkvmWvsJqJAjk,13276
|
58
|
+
generalmanager-0.15.1.dist-info/licenses/LICENSE,sha256=OezwCA4X2-xXmRDvMaqHvHCeUmGtyCYjZ8F3XUxSGwc,1069
|
59
|
+
generalmanager-0.15.1.dist-info/METADATA,sha256=K5qgfeBggoU_6JUOppj5M4_gDiVHdcBum9EuUS-Pkf0,8359
|
60
|
+
generalmanager-0.15.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
61
|
+
generalmanager-0.15.1.dist-info/top_level.txt,sha256=sTDtExP9ga-YP3h3h42yivUY-A2Q23C2nw6LNKOho4I,16
|
62
|
+
generalmanager-0.15.1.dist-info/RECORD,,
|
@@ -1,58 +0,0 @@
|
|
1
|
-
general_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
general_manager/apps.py,sha256=9wmfr2jw9kzIx41fNByAUmte_67s3R_CEM90eX9jcao,10087
|
3
|
-
general_manager/api/graphql.py,sha256=tcQPiUBfTsBSf5iqllPhFE1nMhFof6ql9m3tfxwLEEY,43016
|
4
|
-
general_manager/api/mutation.py,sha256=ExUizC5EJ1u_CyXi-i8WTY0Qh3w4X6dr-0XUq_n1sgM,6978
|
5
|
-
general_manager/api/property.py,sha256=6tLW7E74S57K3vUv1xWhxAqn2L_3qi73VhTNs9YbnKw,3104
|
6
|
-
general_manager/bucket/baseBucket.py,sha256=RdEaUhbCVPGI9l9B3l9lC9Ma2pGjQx6NL1rlCEIPXEc,8243
|
7
|
-
general_manager/bucket/calculationBucket.py,sha256=y8xIQLAIWPN6e7zO0__M2vP0ynOjrBLRrr2MzcVUBsc,24978
|
8
|
-
general_manager/bucket/databaseBucket.py,sha256=n9JaJm6qrd18Y7IGK6x700Z30qtw35VH7zOf1O6nvOs,15007
|
9
|
-
general_manager/bucket/groupBucket.py,sha256=CoXQoHtXcNa_KLnvUOMG1j1TcCNeenlIMb-ORrK08LQ,11381
|
10
|
-
general_manager/cache/cacheDecorator.py,sha256=XQvs322lDDafecS6osPKmf7DyuZgDq8kuQaYpMeXXYg,3264
|
11
|
-
general_manager/cache/cacheTracker.py,sha256=rRw3OhBDf86hTC2Xbt1ocRgZqwu8_kXk4lczamcADFg,2955
|
12
|
-
general_manager/cache/dependencyIndex.py,sha256=lxD7IfnWVsBNt9l0_yDfJlHDRHAFC7N7p-Typ2tJp88,11044
|
13
|
-
general_manager/cache/modelDependencyCollector.py,sha256=S4jzH7qLfqiTRAgqM-CnsC1f3YOgoKCEvMXnQu2R3Eo,2439
|
14
|
-
general_manager/cache/signals.py,sha256=WolIvusPjGaIomOelYCmY6HyaiMyWLVAaQ1iF_D955g,2272
|
15
|
-
general_manager/factory/__init__.py,sha256=wbPIGyBlWBHa7aGWUd-1IUMPWUS-M6YqtPUL1iKXW8U,93
|
16
|
-
general_manager/factory/autoFactory.py,sha256=Lf3E9qi3mggIGK6ww_JxdZbK5BzWPWIEMvtFfNa3gUo,9776
|
17
|
-
general_manager/factory/factories.py,sha256=cJEV79SRHNNqtBXgE0ix5KOxdAkmPmq_8YlwJ_IJ_CM,8295
|
18
|
-
general_manager/factory/factoryMethods.py,sha256=9Bag891j0XHe3dUBAFi7gUKcKeUwcBZN3cDLBobyBiI,3225
|
19
|
-
general_manager/interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
|
-
general_manager/interface/baseInterface.py,sha256=DPBIljlmoOQqsKBf0jy-nC9RlrHz98tBru-iaibaDFc,9562
|
21
|
-
general_manager/interface/calculationInterface.py,sha256=fTD3WQpsn3ImaxGW5S-JwVJyJJPoPp2mR6lAambdB8U,4755
|
22
|
-
general_manager/interface/databaseBasedInterface.py,sha256=uB4_kJ1kNSK-QnUrFKR0zrDP-UulBKeeHIslXqEdU4Q,23058
|
23
|
-
general_manager/interface/databaseInterface.py,sha256=NHXOJycY40pywzE1d_5Fi-pLVnmLR4OQwhAIHsgkM_g,7249
|
24
|
-
general_manager/interface/models.py,sha256=iYuSTMWKGrH5cjmxTii8HRpSmUUMhtw6xvatRzB4zuA,3315
|
25
|
-
general_manager/interface/readOnlyInterface.py,sha256=TkfbOeaa2wCq5kCv0a3IwJWcYOTVbtNsdNWmGAz0Mns,11217
|
26
|
-
general_manager/manager/__init__.py,sha256=l3RYp62aEhj3Y975_XUTIzo35LUnkTJHkb_hgChnXXI,111
|
27
|
-
general_manager/manager/generalManager.py,sha256=4Qn9TYpZpqh5qC95BEAQhpiZgDrRXrAJjO2BbbXUdNg,9129
|
28
|
-
general_manager/manager/groupManager.py,sha256=8dpZUfm7aFL4lraUWv4qbbDRClQZaYxw4prclhBZYZs,4367
|
29
|
-
general_manager/manager/input.py,sha256=-pJXGJ-g2-OxZfl4Buj3mQkf05fN4p8MsR2Lh9BQcEo,3208
|
30
|
-
general_manager/manager/meta.py,sha256=-9celpo-oZmkTb8TnHfvcd_4XWTy1cn2UO-jp13NFmQ,6387
|
31
|
-
general_manager/measurement/__init__.py,sha256=X97meFujBldE5v0WMF7SmKeGpC5R0JTczfLo_Lq1Xek,84
|
32
|
-
general_manager/measurement/measurement.py,sha256=wrxwbmaKOUuvwyDa6wUZ5t2mF2mTtXdy6urzA7Q7k_M,16169
|
33
|
-
general_manager/measurement/measurementField.py,sha256=hesh8YMQqBuX-thcMUcawHpQWEKUqRapn-3tbNgvoPA,11466
|
34
|
-
general_manager/permission/__init__.py,sha256=5UlDERN60Vn8obGVkT-cOM8kHjzmoxgK5w5FgTCDhGE,59
|
35
|
-
general_manager/permission/basePermission.py,sha256=DeiAX2sQQhtdquO13jys2MSkp0kPdg2oo7PSqB9q5Bw,5653
|
36
|
-
general_manager/permission/fileBasedPermission.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
|
-
general_manager/permission/managerBasedPermission.py,sha256=CANZu5sU-GhzoFdR87aJ0rX0_rC4a38nqV76IpzIPQQ,7893
|
38
|
-
general_manager/permission/mutationPermission.py,sha256=qaawnyuqmnGKOcgkZuaCKK6rawEiVRxLdZbWEZFM1d4,3084
|
39
|
-
general_manager/permission/permissionChecks.py,sha256=s4XBQtfWK_6_AByVRFbEE3_UD4rXU_9y58L5oeSPXLM,1876
|
40
|
-
general_manager/permission/permissionDataManager.py,sha256=EzF-XKJZKvKdNpF77ATYJ_VXSF09L-HTFe8h8p-JdB4,1784
|
41
|
-
general_manager/permission/utils.py,sha256=_cznQLk-wmK35pqs3dtgY6I94Ahyz_bTSmpkT0-MQnI,1277
|
42
|
-
general_manager/rule/__init__.py,sha256=4Har5cfPD1fmOsilTDod-ZUz3Com-tkl58jz7yY4fD0,23
|
43
|
-
general_manager/rule/handler.py,sha256=z8SFHTIZ0LbLh3fV56Mud0V4_OvWkqJjlHvFqau7Qfk,7334
|
44
|
-
general_manager/rule/rule.py,sha256=3FVCKGL7BTVoStdgOTdWQwuoVRIxAIAilV4VOzouDpc,10759
|
45
|
-
general_manager/utils/__init__.py,sha256=4IwKJzsNxGduF-Ej0u1BNHVaMhkql8PjHbVtx9DOTSY,76
|
46
|
-
general_manager/utils/argsToKwargs.py,sha256=l_yJCan6UhwKpTBpIwG3FvOKXt4pJeD6rZuYP47U9Ss,892
|
47
|
-
general_manager/utils/filterParser.py,sha256=wmR4YzsnYgjI2Co5eyvCFROldotAraHx_GiCDJo79IY,5410
|
48
|
-
general_manager/utils/formatString.py,sha256=gZSbsKvpywBmf5bIx6YW43LmNJcqsCP7ZfrB7YPvaFo,1436
|
49
|
-
general_manager/utils/jsonEncoder.py,sha256=TDsgFQvheITHZgdmn-m8tk1_QCzpT0XwEHo7bY3Qe-M,638
|
50
|
-
general_manager/utils/makeCacheKey.py,sha256=UlFsxHXgsYy69AAelkF6GDvY4h7AImT2bBn6iD6dvi4,1110
|
51
|
-
general_manager/utils/noneToZero.py,sha256=KfQtMQnrT6vsYST0K7lv6pVujkDcK3XL8czHYOhgqKQ,539
|
52
|
-
general_manager/utils/pathMapping.py,sha256=pswtxZbvj4MdDN6o-y1qTjl6XFHvjDTe-H3NZyFTrPQ,6926
|
53
|
-
general_manager/utils/testing.py,sha256=ElZ8p4iZHxsHjDN8Lm5TmI6527CW747ltDOmtY6gAhk,11872
|
54
|
-
generalmanager-0.14.1.dist-info/licenses/LICENSE,sha256=OezwCA4X2-xXmRDvMaqHvHCeUmGtyCYjZ8F3XUxSGwc,1069
|
55
|
-
generalmanager-0.14.1.dist-info/METADATA,sha256=MeVaDd1vot7gn7RxNVtaCjNbj28aVeAwDHuWW7Ke5O0,7696
|
56
|
-
generalmanager-0.14.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
57
|
-
generalmanager-0.14.1.dist-info/top_level.txt,sha256=sTDtExP9ga-YP3h3h42yivUY-A2Q23C2nw6LNKOho4I,16
|
58
|
-
generalmanager-0.14.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|