kodexa 7.0.1a8003211616__py3-none-any.whl → 7.0.1a9196667375__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.
kodexa/platform/kodexa.py CHANGED
@@ -39,12 +39,33 @@ logger = logging.getLogger()
39
39
  dirs = AppDirs("Kodexa", "Kodexa")
40
40
 
41
41
 
42
- def get_config(profile="default"):
42
+ def get_profile(profile=None):
43
+ """
44
+ Gets the current profile.
45
+
46
+ Args:
47
+ profile (str, optional): The profile to get. Defaults to None.
48
+
49
+ Returns:
50
+ str: The profile if it is defined, or "default" if it is not.
51
+ """
52
+ kodexa_config = get_config()
53
+ if profile is None:
54
+ if "_current_profile_" in kodexa_config:
55
+ return kodexa_config["_current_profile_"]
56
+ else:
57
+ return "default"
58
+ return profile
59
+
60
+ CURRENT_CONFIG = None
61
+
62
+ def get_config(profile=None, create=False):
43
63
  """
44
64
  Gets the kodexa config object used for local PAT storage.
45
65
 
46
66
  Args:
47
- profile (str, optional): The profile to get the config for. Defaults to None.
67
+ profile (str, optional): The profile to get the config for. Defaults to current profile or "default"
68
+ create (bool, optional): Whether to create a new profile if it does not exist. Defaults to False.
48
69
 
49
70
  Returns:
50
71
  dict: The kodexa config as a dictionary. If the profile exists in the config, it returns the config for that profile.
@@ -52,17 +73,34 @@ def get_config(profile="default"):
52
73
  it returns the default config. If the config file does not exist, it returns a default config or a new profile with
53
74
  default values depending on whether a profile was provided or not.
54
75
  """
76
+ global CURRENT_CONFIG
77
+ if CURRENT_CONFIG:
78
+ return CURRENT_CONFIG
79
+
55
80
  path = os.path.join(dirs.user_config_dir, ".kodexa.json")
56
81
  if os.path.exists(path):
57
82
  with open(path, "r") as outfile:
58
83
  kodexa_config = json.load(outfile)
84
+
85
+ if "_current_profile_" in kodexa_config and profile is None:
86
+ profile = kodexa_config["_current_profile_"]
87
+ if profile is None:
88
+ raise Exception("No profile set")
89
+ else:
90
+ profile = "default" if profile is None else profile
91
+
59
92
  if profile not in kodexa_config:
60
- kodexa_config[profile] = {
61
- "url": None,
62
- "access_token": None,
63
- }
93
+ if create:
94
+ kodexa_config[profile] = {
95
+ "url": None,
96
+ "access_token": None,
97
+ }
98
+ else:
99
+ raise Exception(f"Profile {profile} does not exist")
100
+ CURRENT_CONFIG = kodexa_config
64
101
  return kodexa_config
65
102
  else:
103
+ profile = "default" if profile is None else profile
66
104
  return (
67
105
  {profile: {"url": None, "access_token": None}}
68
106
  )
@@ -87,6 +125,8 @@ def save_config(config_obj):
87
125
  raise
88
126
  with open(path, "w") as outfile:
89
127
  json.dump(config_obj, outfile)
128
+ global CURRENT_CONFIG
129
+ CURRENT_CONFIG = config_obj
90
130
 
91
131
 
92
132
  class KodexaPlatform:
@@ -120,7 +160,7 @@ class KodexaPlatform:
120
160
  return KodexaClient(KodexaPlatform.get_url(), KodexaPlatform.get_access_token())
121
161
 
122
162
  @staticmethod
123
- def get_access_token(profile="default") -> str:
163
+ def get_access_token(profile=None) -> str:
124
164
  """
125
165
  Get the access token.
126
166
 
@@ -135,11 +175,11 @@ class KodexaPlatform:
135
175
  return (
136
176
  access_token
137
177
  if access_token is not None
138
- else kodexa_config[profile]["access_token"]
178
+ else kodexa_config[get_profile(profile)]["access_token"]
139
179
  )
140
180
 
141
181
  @staticmethod
142
- def get_url(profile="default") -> str:
182
+ def get_url(profile=None) -> str:
143
183
  """
144
184
  Get the URL to use to access a Kodexa Platform.
145
185
 
@@ -154,7 +194,7 @@ class KodexaPlatform:
154
194
  return (
155
195
  env_url
156
196
  if env_url is not None
157
- else kodexa_config[profile]["url"]
197
+ else kodexa_config[get_profile(profile)]["url"]
158
198
  )
159
199
 
160
200
  @staticmethod
@@ -202,16 +242,19 @@ class KodexaPlatform:
202
242
  return [org_slug, slug, version]
203
243
 
204
244
  @classmethod
205
- def configure(cls, kodexa_url, access_token, profile="default"):
245
+ def configure(cls, kodexa_url, access_token, profile=None):
206
246
  """
207
247
  Configure kodexa access to platform
208
248
 
209
249
  Args
210
250
  kodexa_url (str): The URL of the Kodexa platform.
211
251
  access_token (str): The access token to use.
212
- profile (str, optional): The profile to use. Defaults to None.
252
+ profile (str, optional): The profile to use. Defaults to current profile or "default".
213
253
  """
214
254
  kodexa_config = get_config(profile)
255
+
256
+ kodexa_config["_current_profile_"] = profile
257
+
215
258
  kodexa_config[profile] = {
216
259
  "url": kodexa_url,
217
260
  "access_token": access_token,
@@ -220,27 +263,56 @@ class KodexaPlatform:
220
263
  save_config(kodexa_config)
221
264
 
222
265
  @classmethod
223
- def login(cls, kodexa_url, username, password, profile="default"):
266
+ def list_profiles(cls):
267
+ kodexa_config = get_config()
268
+
269
+ # its the keys without __current_profile__
270
+ return [key for key in kodexa_config if key != "_current_profile_"]
271
+
272
+ @classmethod
273
+ def get_current_profile(cls):
274
+ return get_profile()
275
+
276
+ @classmethod
277
+ def set_profile(cls, profile):
278
+ kodexa_config = get_config(profile)
279
+ kodexa_config["_current_profile_"] = profile
280
+ save_config(kodexa_config)
281
+
282
+ @classmethod
283
+ def delete_profile(cls, profile):
284
+ kodexa_config = get_config(profile)
285
+ del kodexa_config[profile]
286
+
287
+ if kodexa_config["_current_profile_"] == profile:
288
+ kodexa_config["_current_profile_"] = "default"
289
+
290
+ save_config(kodexa_config)
291
+
292
+ @classmethod
293
+ def login(cls, kodexa_url, token, profile=None):
224
294
  """
225
295
  Login to the Kodexa platform.
226
296
 
227
297
  Args:
228
298
  kodexa_url (str): The URL of the Kodexa platform.
229
- username (str): The username to use for login.
230
- password (str): The password to use for login.
299
+ token (str): The token to use for login.
231
300
  profile (str, optional): The profile to use. Defaults to None.
232
301
  """
233
302
  from requests.auth import HTTPBasicAuth
234
303
 
235
304
  obj_response = requests.get(
236
- f"{kodexa_url}/api/account/me/token",
237
- auth=HTTPBasicAuth(username, password),
238
- headers={"content-type": "application/json"}
305
+ f"{kodexa_url}/api/account/me",
306
+ headers={"content-type": "application/json", "x-access-token": token, "cf-access-token": os.environ.get("CF_TOKEN", "")}
239
307
  )
240
308
  if obj_response.status_code == 200:
241
- kodexa_config = get_config(profile)
309
+ kodexa_config = get_config(profile, create=True)
310
+
311
+ if profile not in kodexa_config:
312
+ kodexa_config[profile] = {}
313
+
242
314
  kodexa_config[profile]["url"] = kodexa_url
243
- kodexa_config[profile]["access_token"] = obj_response.text
315
+ kodexa_config[profile]["access_token"] = token
244
316
  save_config(kodexa_config)
245
317
  print("Logged in")
246
318
  else:
@@ -258,13 +330,17 @@ class KodexaPlatform:
258
330
  f"{KodexaPlatform.get_url()}/api",
259
331
  headers={
260
332
  "x-access-token": KodexaPlatform.get_access_token(),
333
+ "cf-access-token": os.environ.get("CF_TOKEN", ""),
261
334
  "content-type": "application/json",
262
335
  },
263
336
  )
264
337
  if r.status_code == 401:
265
338
  raise Exception("Your access token was not authorized")
266
339
  if r.status_code == 200:
267
- return r.json()
340
+ try:
341
+ return r.json()
342
+ except JSONDecodeError:
343
+ raise Exception("Unable to decode server information, check your access token")
268
344
 
269
345
  logger.warning(r.text)
270
346
  raise Exception(
@@ -307,7 +383,8 @@ class RemoteSession:
307
383
  logger.debug(f"Downloading metadata for action {ref}")
308
384
  r = requests.get(
309
385
  f"{KodexaPlatform.get_url()}/api/actions/{ref.replace(':', '/')}",
310
- headers={"x-access-token": KodexaPlatform.get_access_token()},
386
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
387
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
311
388
  )
312
389
  if r.status_code == 401:
313
390
  raise Exception("Your access token was not authorized")
@@ -327,7 +404,8 @@ class RemoteSession:
327
404
  r = requests.post(
328
405
  f"{KodexaPlatform.get_url()}/api/sessions",
329
406
  params={self.session_type: self.slug},
330
- headers={"x-access-token": KodexaPlatform.get_access_token()},
407
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
408
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
331
409
  )
332
410
 
333
411
  process_response(r)
@@ -366,7 +444,8 @@ class RemoteSession:
366
444
  f"{KodexaPlatform.get_url()}/api/sessions/{self.cloud_session.id}/execute",
367
445
  params={self.session_type: self.slug, "documentVersion": document.version},
368
446
  data=data,
369
- headers={"x-access-token": KodexaPlatform.get_access_token()},
447
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
448
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
370
449
  files=files,
371
450
  )
372
451
  try:
@@ -410,7 +489,8 @@ class RemoteSession:
410
489
  while execution.status == "PENDING" or execution.status == "RUNNING":
411
490
  r = requests.get(
412
491
  f"{KodexaPlatform.get_url()}/api/sessions/{self.cloud_session.id}/executions/{execution.id}",
413
- headers={"x-access-token": KodexaPlatform.get_access_token()},
492
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
493
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
414
494
  )
415
495
  try:
416
496
  execution = json.loads(r.text)
@@ -466,7 +546,8 @@ class RemoteSession:
466
546
  logger.info(f"Downloading output document [{execution.outputId}]")
467
547
  doc = requests.get(
468
548
  f"{KodexaPlatform.get_url()}/api/sessions/{self.cloud_session.id}/executions/{execution.id}/objects/{execution.outputId}",
469
- headers={"x-access-token": KodexaPlatform.get_access_token()},
549
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
550
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
470
551
  )
471
552
  return Document.from_kddb(doc.content)
472
553
 
@@ -637,13 +718,14 @@ class RemoteStep:
637
718
 
638
719
  """Allows you to interact with a step that has been deployed in the Kodexa platform"""
639
720
 
640
- def __init__(self, ref, step_type="ACTION", attach_source=False, options=None):
721
+ def __init__(self, ref, step_type="ACTION", attach_source=False, options=None, conditional=None):
641
722
  if options is None:
642
723
  options = {}
643
724
  self.ref = ref
644
725
  self.step_type = step_type
645
726
  self.attach_source = attach_source
646
727
  self.options = options
728
+ self.conditional = conditional
647
729
 
648
730
  def to_dict(self):
649
731
  """Converts the RemoteStep object to a dictionary.
@@ -651,7 +733,7 @@ class RemoteStep:
651
733
  Returns:
652
734
  dict: Dictionary representation of the RemoteStep object.
653
735
  """
654
- return {"ref": self.ref, "step_type": self.step_type, "options": self.options}
736
+ return {"ref": self.ref, "step_type": self.step_type, "options": self.options, "conditional": self.conditional}
655
737
 
656
738
  def get_name(self):
657
739
  """Generates a name for the RemoteStep object.
@@ -705,7 +787,7 @@ class RemoteStep:
705
787
  Returns:
706
788
  dict: Dictionary representing the configuration of the step.
707
789
  """
708
- return {"ref": self.ref, "options": self.options}
790
+ return {"ref": self.ref, "options": self.options, "conditional": self.conditional}
709
791
 
710
792
 
711
793
  class EventHelper:
@@ -754,7 +836,8 @@ class EventHelper:
754
836
  response = requests.post(
755
837
  f"{KodexaPlatform.get_url()}/api/sessions/{self.event.session_id}/executions/{self.event.execution.id}/logs",
756
838
  json=[{"entry": message}],
757
- headers={"x-access-token": KodexaPlatform.get_access_token()},
839
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
840
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
758
841
  timeout=300,
759
842
  )
760
843
  if response.status_code != 200:
@@ -778,7 +861,8 @@ class EventHelper:
778
861
 
779
862
  co_response = requests.get(
780
863
  f"{KodexaPlatform.get_url()}/api/sessions/{self.event.session_id}/executions/{self.event.execution.id}/objects/{content_object_id}",
781
- headers={"x-access-token": KodexaPlatform.get_access_token()},
864
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
865
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
782
866
  timeout=300
783
867
  )
784
868
  process_response(co_response)
@@ -805,7 +889,8 @@ class EventHelper:
805
889
  co_response = requests.post(
806
890
  f"{KodexaPlatform.get_url()}/api/sessions/{self.event.session_id}/executions/{self.event.execution.id}/objects",
807
891
  data=data,
808
- headers={"x-access-token": KodexaPlatform.get_access_token()},
892
+ headers={"x-access-token": KodexaPlatform.get_access_token(),
893
+ "cf-access-token": os.environ.get("CF_TOKEN", "")},
809
894
  files=files,
810
895
  timeout=300
811
896
  )
@@ -43,43 +43,3 @@ class TestAssistant(Assistant):
43
43
  return AssistantResponse(
44
44
  pipelines=[AssistantPipeline(pipeline=pipeline, write_back_to_store=True)]
45
45
  )
46
-
47
-
48
- def test_profile_default():
49
- """
50
- :assert: Checks if the default profile is set correctly
51
- """
52
- kodexa_url = os.getenv("URL")
53
- access_token = os.getenv("ACCESS_TOKEN")
54
- KodexaPlatform.configure(kodexa_url, access_token)
55
- assert KodexaPlatform.get_url() == kodexa_url and KodexaPlatform.get_access_token() == access_token
56
-
57
-
58
- def test_profile_custom():
59
- """
60
- :assert: Checks if the custom profile is set correctly
61
- """
62
- kodexa_url = os.getenv("URL")
63
- access_token = os.getenv("ACCESS_TOKEN")
64
- profile = "dev-profile"
65
- KodexaPlatform.configure(kodexa_url, access_token, profile)
66
- assert KodexaPlatform.get_url(profile) == kodexa_url and KodexaPlatform.get_access_token(profile) == access_token
67
-
68
-
69
- def test_kodexa_client_default_profile():
70
- kodexa_cli = KodexaClient()
71
- assert kodexa_cli.base_url == KodexaPlatform.get_url("default") and \
72
- kodexa_cli.access_token == KodexaPlatform.get_access_token("default")
73
-
74
-
75
- def test_kodexa_client_custom_profile():
76
- kodexa_cli = KodexaClient(profile="dev-profile")
77
- assert kodexa_cli.base_url == KodexaPlatform.get_url("dev-profile") and \
78
- kodexa_cli.access_token == KodexaPlatform.get_access_token("dev-profile")
79
-
80
-
81
- def test_customized_kodexe_client():
82
- kodexa_url = "https://test.test.com"
83
- access_token = "test-token"
84
- kodexa_cli = KodexaClient(kodexa_url, access_token)
85
- assert kodexa_cli.base_url != KodexaPlatform.get_url() and kodexa_cli.access_token != KodexaPlatform.get_access_token()
@@ -3,6 +3,8 @@ import importlib
3
3
  import logging
4
4
  from typing import List
5
5
 
6
+ from addict import Dict
7
+
6
8
  from kodexa import Assistant, AssistantResponse
7
9
  from kodexa import (
8
10
  ContentEvent,
@@ -316,7 +318,7 @@ class ExtensionPackUtil:
316
318
  import json
317
319
 
318
320
  with open(file_path, "r") as stream:
319
- self.kodexa_metadata = json.load(stream)
321
+ self.kodexa_metadata = Dict(json.load(stream))
320
322
 
321
323
  def get_step(self, action_slug, options=None):
322
324
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kodexa
3
- Version: 7.0.1a8003211616
3
+ Version: 7.0.1a9196667375
4
4
  Summary: Python SDK for the Kodexa Platform
5
5
  Author: Austin Redenbaugh
6
6
  Author-email: austin@kodexa.com
@@ -17,16 +17,17 @@ Requires-Dist: addict (>=2.4.0,<3.0.0)
17
17
  Requires-Dist: appdirs (>=1.4.4,<2.0.0)
18
18
  Requires-Dist: better-exceptions (>=0.3.3,<0.4.0)
19
19
  Requires-Dist: chevron (>=0.14.0,<0.15.0)
20
- Requires-Dist: deepdiff (>=6.5.0,<7.0.0)
20
+ Requires-Dist: deepdiff (>=7.0.1,<8.0.0)
21
21
  Requires-Dist: msgpack (>=1.0.6,<2.0.0)
22
22
  Requires-Dist: ply (>=3.11,<4.0)
23
23
  Requires-Dist: pydantic (>=2.5.3,<3.0.0)
24
24
  Requires-Dist: pydantic-yaml (>=1.0.0,<2.0.0)
25
- Requires-Dist: pyfunctional (>=1.4.3,<1.5.0)
25
+ Requires-Dist: pyfunctional (==1.5.0)
26
26
  Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
27
27
  Requires-Dist: pyyaml (>=6.0,<7.0)
28
28
  Requires-Dist: requests (>=2.28.1,<3.0.0)
29
29
  Requires-Dist: semver (>=3.0.1,<4.0.0)
30
+ Requires-Dist: simpleeval (>=0.9.13,<0.10.0)
30
31
  Requires-Dist: urllib3 (>=2.0.0,<3.0.0)
31
32
  Description-Content-Type: text/markdown
32
33
 
@@ -66,18 +67,6 @@ working with a Kodexa platform instance.
66
67
 
67
68
  Documentation is available at the [Kodexa Documentation Portal](https://docs.kodexa.com)
68
69
 
69
- ## Current Development
70
-
71
- [//]: # (Replace it with the diagrams and descriptions for build releases)
72
- **BUILD VERSION FLOW**
73
- ![build-version-flow.png](docs%2Fbuild-version-flow.png)
74
- Build version will differ based on the branches that are published to pypi.
75
-
76
- **GITHUB PROCESS**
77
- ![github-process.png](docs%2Fgithub-process.png)
78
- Changes that contain bugs, features, and fixes should first be pushed to the test branch.
79
- Once these changes are thoroughly tested, they can be submitted as a pull request to the main branch. The pull request should be reviewed and approved by an appropriate person before the changes can be merged.
80
-
81
70
  ## Set-up
82
71
 
83
72
  We use poetry to manage our dependencies, so you can install them with:
@@ -5,15 +5,18 @@ kodexa/connectors/__init__.py,sha256=WF6G_MUeU32TlKSUKkpNoNX7dq8iBPliFMep4E8BmZc
5
5
  kodexa/connectors/connectors.py,sha256=FpUZDkSyHld2b9eYRuVOWzaFtuGoaRuPXXicJB7THbc,10413
6
6
  kodexa/model/__init__.py,sha256=rtLXYJBxB-rnukhslN9rlqoB3--1H3253HyHGbD_Gc8,796
7
7
  kodexa/model/base.py,sha256=CaZK8nMhT1LdCpt4aLhebJGcorjq9qRID1FjnXnP14M,521
8
- kodexa/model/model.py,sha256=Bghea55_XvALtro3_Z3fXsEjGmK2_dTKgPOOC8ZEyyo,115050
9
- kodexa/model/objects.py,sha256=SrLXuEmy2nEDDN09uza-o3A_Ww7qp3P7wSt_fq_a3r0,171871
10
- kodexa/model/persistence.py,sha256=JW7CmEyyMfk4h7tWFn5Dj21nFExaeNv8OE7wD6Q7Khs,59492
8
+ kodexa/model/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ kodexa/model/entities/product.py,sha256=ZDpHuBE_9FJ-klnkyBvTfPwYOqBkM1wraZMtHqNA8FQ,3526
10
+ kodexa/model/entities/product_subscription.py,sha256=UcmWR-qgLfdV7VCtJNwzgkanoS8nBSL6ngVuxQUK1M8,3810
11
+ kodexa/model/model.py,sha256=xAUPiW_1V9Kn9yitrvKFVuG_ms_N4HlAx23dwGln8Ro,115561
12
+ kodexa/model/objects.py,sha256=ox1tie8X95VTgIEHa220G7qqBeCgsYOATJjkQNtMFFA,174335
13
+ kodexa/model/persistence.py,sha256=sx5FwTSsWMdAZpAs0-6PqyULHkQyNQClApUKJZ-ly8M,62032
11
14
  kodexa/pipeline/__init__.py,sha256=sA7f5D6qkdMrpp2xTIeefnrUBI6xxEEWostvxfX_1Cs,236
12
- kodexa/pipeline/pipeline.py,sha256=cIRFOoJkguIYgNzx6FYrODdBpcY25CM_SULsqSsHeXE,24323
15
+ kodexa/pipeline/pipeline.py,sha256=ZYpJAWcwV4YRK589DUhU0vXGQlkNSj4J2TsGbYqTLjo,25221
13
16
  kodexa/platform/__init__.py,sha256=1O3oiWMg292NPL_NacKDnK1T3_R6cMorrPRue_9e-O4,216
14
- kodexa/platform/client.py,sha256=-TAVAwgV8jWzZ8yG8Ve8c51J5VbGkqmeN4Qk4Ii9nVw,209681
17
+ kodexa/platform/client.py,sha256=ZfdDS0L0DK6Zi88fe2cYCcCqQRLamv2ARXkXL4Z7xww,218016
15
18
  kodexa/platform/interaction.py,sha256=6zpcwXKNZstUGNS6m4JsoRXAqCZPJHWI-ZN3co8nnF0,1055
16
- kodexa/platform/kodexa.py,sha256=UOEyc6fNPx-I5Bg21Bzj5s5R4-W3PVMeJBFX7cnXPKA,30888
19
+ kodexa/platform/kodexa.py,sha256=Bvf6x43FWsFuAuQ4N8TvjSZq6niEtBTESmFCWVPASeQ,34024
17
20
  kodexa/selectors/__init__.py,sha256=xA9-4vpyaAZWPSk3bh2kvDLkdv6XEmm7PjFbpziiTIk,100
18
21
  kodexa/selectors/ast.py,sha256=gG-1st841IntgBE5V7p3Cq9azaym2jV5lB_AIywQTCI,13269
19
22
  kodexa/selectors/core.py,sha256=kkt02DN20gXeaDGoGubPPeeTV7rCr4sxTyELrI0l1YU,3691
@@ -31,11 +34,11 @@ kodexa/spatial/table_form_common.py,sha256=qJIqr6INNFTe8EPrXchZ9a1ZgS9dZnhx_wgvd
31
34
  kodexa/steps/__init__.py,sha256=qpmAtYePTv7G-HzUBx087bA3kq-PPGcFJf4_Z5P--0k,179
32
35
  kodexa/steps/common.py,sha256=fGEuKxcztcqrYFpXbu_OYkxh42yR9s5mkszmtkJhnQ8,10428
33
36
  kodexa/testing/__init__.py,sha256=P8W-SOnWsi48asfnQV06iyHrzZAzuX69j9oYwBvgp5s,323
34
- kodexa/testing/test_components.py,sha256=qGFHUN6nm6bEOa2ZCN0jDUWsCHRnEcjdcHSRetgIr-E,2571
35
- kodexa/testing/test_utils.py,sha256=2ioYPXeyvVkE-u5VtgFMW0AyGTvplERgmnKXELAffbY,13990
37
+ kodexa/testing/test_components.py,sha256=g5lP-GY0nTHuH5cIEw45vIejEeBaWkPKQGHL36jejBQ,1052
38
+ kodexa/testing/test_utils.py,sha256=DrLCkHxdb6AbZ-X3WmTMbQmnVIm55VEBL8MjtUK9POs,14021
36
39
  kodexa/training/__init__.py,sha256=xs2L62YpRkIRfslQwtQZ5Yxjhm7sLzX2TrVX6EuBnZQ,52
37
40
  kodexa/training/train_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- kodexa-7.0.1a8003211616.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
39
- kodexa-7.0.1a8003211616.dist-info/METADATA,sha256=cdZgTE1WuQqDaDDAlRfnQc70Fo-EGKbvaZyT13nmWt8,4076
40
- kodexa-7.0.1a8003211616.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
41
- kodexa-7.0.1a8003211616.dist-info/RECORD,,
41
+ kodexa-7.0.1a9196667375.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
42
+ kodexa-7.0.1a9196667375.dist-info/METADATA,sha256=ObLaHwuOr2TtfFB9qIBrViUL8eR8cg0zK19XjbVoHDM,3488
43
+ kodexa-7.0.1a9196667375.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
44
+ kodexa-7.0.1a9196667375.dist-info/RECORD,,