cmem-cmemc 24.1.4__py3-none-any.whl → 24.2.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.
@@ -0,0 +1,63 @@
1
+ """Client module to handle Path API calls."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import ABC, abstractmethod
6
+ from typing import TYPE_CHECKING
7
+
8
+ if TYPE_CHECKING:
9
+ from collections.abc import Generator
10
+
11
+
12
+ class StoragePath(ABC):
13
+ """Storage path interface."""
14
+
15
+ def __init__(self, path: str):
16
+ self.path = path
17
+
18
+ @property
19
+ @abstractmethod
20
+ def suffix(self) -> str:
21
+ """Return the suffix of the path."""
22
+
23
+ @property
24
+ @abstractmethod
25
+ def name(self) -> str:
26
+ """Return the file name."""
27
+
28
+ @property
29
+ @abstractmethod
30
+ def parent(self) -> StoragePath:
31
+ """The logical parent of the path."""
32
+
33
+ @abstractmethod
34
+ def is_dir(self) -> bool:
35
+ """Check if the path is a directory."""
36
+
37
+ @abstractmethod
38
+ def is_file(self) -> bool:
39
+ """Check if the path is a file."""
40
+
41
+ @abstractmethod
42
+ def exists(self) -> bool:
43
+ """Check if the path exists."""
44
+
45
+ @abstractmethod
46
+ def mkdir(self, parents: bool = False, exist_ok: bool = False) -> None:
47
+ """Create a directory."""
48
+
49
+ @abstractmethod
50
+ def absolute(self) -> StoragePath:
51
+ """Return an absolute version of this path"""
52
+
53
+ def resolve(self) -> StoragePath:
54
+ """Resolve the resolved path of the path."""
55
+ raise NotImplementedError(f"resolve in {self.__class__} is not implemented yet.")
56
+
57
+ @abstractmethod
58
+ def glob(self, pattern: str) -> Generator[StoragePath, StoragePath, StoragePath]:
59
+ """Iterate over this subtree and yield all existing files"""
60
+
61
+ @abstractmethod
62
+ def __truediv__(self, key: str) -> StoragePath:
63
+ """Return StoragePath with appending the key to the exising path"""
@@ -0,0 +1,65 @@
1
+ """Provides functionality for interacting with http/https paths"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from cmem_cmemc.smart_path.clients import StoragePath
8
+
9
+ if TYPE_CHECKING:
10
+ from collections.abc import Generator
11
+
12
+
13
+ class HttpPath(StoragePath):
14
+ """Client class for interacting with Amazon S3 storage.
15
+
16
+ This class provides methods for working with http paths within the context
17
+ of the `Path` application.
18
+ """
19
+
20
+ @property
21
+ def suffix(self) -> str:
22
+ """Return the suffix of the path."""
23
+ raise NotImplementedError(f"suffix in {self.__class__} is not implemented yet.")
24
+
25
+ @property
26
+ def name(self) -> str:
27
+ """Determine the name of the path."""
28
+ return self.path.split("/")[-1]
29
+
30
+ @property
31
+ def parent(self) -> HttpPath:
32
+ """The logical parent of the path."""
33
+ raise NotImplementedError(f"parent in {self.__class__} is not implemented yet.")
34
+
35
+ def is_dir(self) -> bool:
36
+ """Determine if path is a directory or not."""
37
+ return False
38
+
39
+ def is_file(self) -> bool:
40
+ """Determine if path is a file or not."""
41
+ return not self.is_dir()
42
+
43
+ def exists(self) -> bool:
44
+ """Return the suffix of the path."""
45
+ raise NotImplementedError(f"exists in {self.__class__} is not implemented yet.")
46
+
47
+ def mkdir(self, parents: bool = False, exist_ok: bool = False) -> None:
48
+ """Return the suffix of the path."""
49
+ raise NotImplementedError(f"mkdir in {self.__class__} is not implemented yet.")
50
+
51
+ def absolute(self) -> HttpPath:
52
+ """Return an absolute version of this path"""
53
+ raise NotImplementedError(f"absolute in {self.__class__} is not implemented yet.")
54
+
55
+ def resolve(self) -> HttpPath:
56
+ """Resolve the resolved path of the path."""
57
+ raise NotImplementedError(f"resolve in {self.__class__} is not implemented yet.")
58
+
59
+ def glob(self, pattern: str) -> Generator[StoragePath, StoragePath, StoragePath]:
60
+ """Iterate over this subtree and yield all existing files"""
61
+ raise NotImplementedError(f"glob in {self.__class__} is not implemented yet.")
62
+
63
+ def __truediv__(self, key: str) -> HttpPath:
64
+ """Return path with appending the key"""
65
+ raise NotImplementedError(f"__truediv__ in {self.__class__} is not implemented yet.")
cmem_cmemc/utils.py CHANGED
@@ -2,23 +2,26 @@
2
2
 
3
3
  import json
4
4
  import os
5
+ import pathlib
5
6
  import re
6
7
  import sys
7
8
  import unicodedata
8
9
  from dataclasses import dataclass
9
10
  from importlib.metadata import version as cmemc_version
10
- from pathlib import Path
11
+ from zipfile import BadZipFile, ZipFile
11
12
 
12
13
  import requests
13
14
  from bs4 import BeautifulSoup
14
15
  from cmem.cmempy.dp.admin import get_prometheus_data
15
16
  from cmem.cmempy.dp.proxy.graph import get_graphs_list
17
+ from cmem.cmempy.queries import QueryCatalog
16
18
  from cmem.cmempy.workspace.projects.project import get_projects
17
19
  from prometheus_client import Metric
18
20
  from prometheus_client.parser import text_string_to_metric_families
19
21
 
20
22
  from cmem_cmemc.constants import NAMESPACES
21
23
  from cmem_cmemc.context import ApplicationContext
24
+ from cmem_cmemc.smart_path import SmartPath as Path
22
25
 
23
26
 
24
27
  def get_version() -> str:
@@ -88,7 +91,7 @@ def read_rdf_graph_files(directory_path: str) -> list[tuple[str, str]]:
88
91
  full_file_path = Path(root) / _file
89
92
  graph_file_name = _file + ".graph"
90
93
  full_graph_file_name_path = Path(root) / graph_file_name
91
- if not _file.endswith(".graph") and Path(full_graph_file_name_path).exists():
94
+ if not _file.endswith(".graph") and full_graph_file_name_path.exists():
92
95
  graph_name = read_file_to_string(str(full_graph_file_name_path)).strip()
93
96
  rdf_graphs.append((str(full_file_path.resolve()), graph_name))
94
97
  return rdf_graphs
@@ -97,7 +100,7 @@ def read_rdf_graph_files(directory_path: str) -> list[tuple[str, str]]:
97
100
  def read_file_to_string(file_path: str) -> str:
98
101
  """Read file to string."""
99
102
  with Path(file_path).open(mode="rb") as _file:
100
- return _file.read().decode("utf-8")
103
+ return str(_file.read().decode("utf-8"))
101
104
 
102
105
 
103
106
  def get_graphs(writeable: bool = True, readonly: bool = True) -> list:
@@ -304,24 +307,30 @@ class PublishedPackage:
304
307
 
305
308
  def get_published_packages() -> list[PublishedPackage]:
306
309
  """Get a scraped list of plugin packages scraped from pypi.org."""
307
- url = "https://pypi.org/search/?q=%22cmem-plugin-%22"
308
- soup = BeautifulSoup(requests.get(url, timeout=5).content, "html.parser")
310
+ url_pattern = "https://pypi.org/search/?q=%22cmem-plugin-%22&page={}"
309
311
  packages = []
310
- snippets = soup.find_all("a", class_="package-snippet")
311
- for _ in snippets:
312
- name = _.findChildren(class_="package-snippet__name")[0].getText()
313
- if name == "cmem-plugin-base":
314
- continue
315
- if not name.startswith("cmem-plugin-"):
316
- continue
317
- description = _.findChildren(class_="package-snippet__description")[0].getText()
318
- package_version = _.findChildren(class_="package-snippet__version")[0].getText()
319
- published = _.findChildren(name="time")[0].attrs["datetime"]
320
- packages.append(
321
- PublishedPackage(
322
- name=name, description=description, version=package_version, published=published
312
+ page = 0
313
+ while True:
314
+ page += 1
315
+ url = url_pattern.format(page)
316
+ soup = BeautifulSoup(requests.get(url, timeout=5).content, "html.parser")
317
+ snippets = soup.find_all("a", class_="package-snippet")
318
+ if len(snippets) == 0:
319
+ break
320
+ for _ in snippets:
321
+ name = _.findChildren(class_="package-snippet__name")[0].getText()
322
+ if name == "cmem-plugin-base":
323
+ continue
324
+ if not name.startswith("cmem-plugin-"):
325
+ continue
326
+ description = _.findChildren(class_="package-snippet__description")[0].getText()
327
+ package_version = _.findChildren(class_="package-snippet__version")[0].getText()
328
+ published = _.findChildren(name="time")[0].attrs["datetime"]
329
+ packages.append(
330
+ PublishedPackage(
331
+ name=name, description=description, version=package_version, published=published
332
+ )
323
333
  )
324
- )
325
334
  return packages
326
335
 
327
336
 
@@ -344,3 +353,50 @@ def convert_qname_to_iri(qname: str, default_ns: str) -> str:
344
353
  return default_ns + qname[1:]
345
354
 
346
355
  return qname
356
+
357
+
358
+ def get_query_text(file_or_uri: str, required_projections: set) -> str:
359
+ """Get query text for a file or graph catalog URI.
360
+
361
+ Args:
362
+ ----
363
+ file_or_uri (str): The file path or URI to fetch the query from.
364
+ required_projections (set): A set of required projections.
365
+
366
+ Returns:
367
+ -------
368
+ str: The query text.
369
+
370
+ Raises:
371
+ ------
372
+ ValueError: If the input is not a readable file or a query URI,
373
+ or if the query contains placeholders,
374
+ or if the query does not include the required projections.
375
+
376
+ """
377
+ sparql_query = QueryCatalog().get_query(file_or_uri)
378
+ if sparql_query is None:
379
+ raise ValueError(f"{file_or_uri} is neither a readable file nor a query URI.")
380
+
381
+ if sparql_query.get_placeholder_keys():
382
+ raise ValueError("Placeholder queries are not supported.")
383
+
384
+ result = sparql_query.get_json_results()
385
+ projected_vars = set(result["head"]["vars"])
386
+
387
+ missing_projections = required_projections - projected_vars
388
+ if missing_projections:
389
+ missing = ", ".join(missing_projections)
390
+ raise ValueError(f"Select query must include projections for: {missing}")
391
+ txt: str = sparql_query.text
392
+ return txt
393
+
394
+
395
+ def validate_zipfile(zipfile: str | pathlib.Path) -> bool:
396
+ """Validate a zipfile."""
397
+ zipfile = pathlib.Path(zipfile)
398
+ try:
399
+ ZipFile(zipfile).testzip()
400
+ except BadZipFile:
401
+ return False
402
+ return True
@@ -199,4 +199,4 @@
199
199
  distributed under the License is distributed on an "AS IS" BASIS,
200
200
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
201
  See the License for the specific language governing permissions and
202
- limitations under the License.
202
+ limitations under the License.
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cmem-cmemc
3
- Version: 24.1.4
3
+ Version: 24.2.0
4
4
  Summary: Command line client for eccenca Corporate Memory
5
5
  Home-page: https://eccenca.com/go/cmemc
6
- License: Apache 2.0
6
+ License: Apache-2.0
7
7
  Author: eccenca
8
8
  Author-email: cmempy-developer@eccenca.com
9
9
  Requires-Python: >=3.10,<4.0
@@ -15,7 +15,6 @@ Classifier: Intended Audience :: Information Technology
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Intended Audience :: System Administrators
17
17
  Classifier: License :: OSI Approved :: Apache Software License
18
- Classifier: License :: Other/Proprietary License
19
18
  Classifier: Natural Language :: English
20
19
  Classifier: Operating System :: OS Independent
21
20
  Classifier: Programming Language :: Python :: 3
@@ -26,25 +25,28 @@ Classifier: Programming Language :: Python :: 3 :: Only
26
25
  Classifier: Topic :: Database
27
26
  Classifier: Topic :: Software Development :: Testing
28
27
  Classifier: Topic :: Utilities
29
- Requires-Dist: beautifulsoup4 (>=4.12.2,<5.0.0)
30
- Requires-Dist: certifi (>=2023.5.7)
28
+ Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
29
+ Requires-Dist: certifi (>=2024.2.2)
31
30
  Requires-Dist: click (>=8.1.7,<9.0.0)
32
- Requires-Dist: click-didyoumean (>=0.3.0,<0.4.0)
33
- Requires-Dist: click-help-colors (>=0.9.1,<0.10.0)
34
- Requires-Dist: cmem-cmempy (==24.1.1)
35
- Requires-Dist: configparser (>=5.3.0,<6.0.0)
36
- Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
37
- Requires-Dist: natsort (>=8.3.1,<9.0.0)
38
- Requires-Dist: prometheus-client (>=0.16.0,<0.17.0)
39
- Requires-Dist: pygments (>=2.15.1,<3.0.0)
40
- Requires-Dist: pyjwt (>=2.7.0,<3.0.0)
41
- Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
31
+ Requires-Dist: click-didyoumean (>=0.3.1,<0.4.0)
32
+ Requires-Dist: click-help-colors (>=0.9.4,<0.10.0)
33
+ Requires-Dist: cmem-cmempy (==24.2.0)
34
+ Requires-Dist: configparser (>=6.0.1,<7.0.0)
35
+ Requires-Dist: jinja2 (>=3.1.3,<4.0.0)
36
+ Requires-Dist: junit-xml (>=1.9,<2.0)
37
+ Requires-Dist: natsort (>=8.4.0,<9.0.0)
38
+ Requires-Dist: pip (>=24.2,<25.0)
39
+ Requires-Dist: prometheus-client (>=0.20.0,<0.21.0)
40
+ Requires-Dist: pygments (>=2.17.2,<3.0.0)
41
+ Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
42
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
42
43
  Requires-Dist: requests (>=2.31.0,<3.0.0)
43
- Requires-Dist: rich (>=13.7.0,<14.0.0)
44
+ Requires-Dist: rich (>=13.7.1,<14.0.0)
44
45
  Requires-Dist: six (>=1.16.0,<2.0.0)
46
+ Requires-Dist: smart-open (>=7.0.4,<8.0.0)
45
47
  Requires-Dist: timeago (>=1.0.16,<2.0.0)
46
- Requires-Dist: treelib (>=1.6.4,<2.0.0)
47
- Requires-Dist: urllib3 (>=2,<3)
48
+ Requires-Dist: treelib (>=1.7.0,<2.0.0)
49
+ Requires-Dist: urllib3 (>=2.2.1,<3.0.0)
48
50
  Description-Content-Type: text/markdown
49
51
 
50
52
  # cmemc
@@ -0,0 +1,42 @@
1
+ cmem_cmemc/__init__.py,sha256=Uwm6QW_Bou1VtRWVRcnMs1ilHVCi9moddXgcEqs6c3E,5484
2
+ cmem_cmemc/_cmemc.zsh,sha256=fmkrBHIQxus8cp2AgO1tzZ5mNZdGL_83cYz3a9uAdsg,1326
3
+ cmem_cmemc/commands/__init__.py,sha256=sFzT-3i01sLlxL8_nSTXaYerDfTo3fTEvvcL3jx3Y50,3681
4
+ cmem_cmemc/commands/acl.py,sha256=8Xvd98-aR-tDY9y8QB8varZgOOCOI4DpKnhDqKDNfIo,15597
5
+ cmem_cmemc/commands/admin.py,sha256=YYl8sHUS9gewgEfVALJYwbc1xpUK7mX-RoJpiXlAqr0,9159
6
+ cmem_cmemc/commands/client.py,sha256=23Sc3h64eAMaB4bJVfiamR470DMpDj1hsPWKsxUSMLg,5039
7
+ cmem_cmemc/commands/config.py,sha256=9-xEtHoJyaqU9J7C8a3Q7SpPvJQHLufMXxZYuXYQ5Pk,5699
8
+ cmem_cmemc/commands/dataset.py,sha256=_6pZyYOpIpv6EU2Cg1GJnCVLEVWcGaV9AUyCskhcT8U,30282
9
+ cmem_cmemc/commands/graph.py,sha256=eVJ6SJiDD_xIkE-Ua0PNiI_K4pAQLkP-Puk_ZCDsXBM,27935
10
+ cmem_cmemc/commands/metrics.py,sha256=BlZvYvp1RWLl9rEknxxcOnOh2_zQgGqMEEXFwtJa58E,7832
11
+ cmem_cmemc/commands/project.py,sha256=Dgnd5MxBtJ8zS-wN-1HFraim2PoL4s8LBw6SUeh94b8,19734
12
+ cmem_cmemc/commands/python.py,sha256=Mwt2wZyXOlrnc3nzbnt2wM441IKvxFBE2a3P54uYhk8,10285
13
+ cmem_cmemc/commands/query.py,sha256=r9eTjoB_PR_gsb3R0jIU0oVGThDbs2LmFwRoycBTvYg,26938
14
+ cmem_cmemc/commands/resource.py,sha256=n6ri6Tu2sNUNZuNfNGpRnMQxOx9VeTFGL1OWXUKKpjE,7534
15
+ cmem_cmemc/commands/scheduler.py,sha256=L9Cl7u3Nq3UjfgRzayivxxCHq2U6ZtpqtTCsXsndnFg,8512
16
+ cmem_cmemc/commands/store.py,sha256=esFPX4b8TnN64F4XMCrT44JS5DSoCGjWxlncGYyiW1s,9254
17
+ cmem_cmemc/commands/user.py,sha256=0BbPoPhguSeMjLUn29Qh3kRcMbpQ75bAwDHgYWrZMyQ,12288
18
+ cmem_cmemc/commands/validation.py,sha256=hGCXKdZ3q8VkhiFuzsz1IIKYerGggxrW7JXgdlo92Qc,27963
19
+ cmem_cmemc/commands/variable.py,sha256=IvQ-Yzg2z8Hb-ZstEuOCTMBDg0N931z_73K9xZPbdoM,11356
20
+ cmem_cmemc/commands/vocabulary.py,sha256=mDJ6eWKtN-ChPjnST6Xy8gmPNlO1pE7vzz_tkgGvUlQ,17342
21
+ cmem_cmemc/commands/workflow.py,sha256=nBI7pr54FqBJMhYc__CQW7BxI9DdVUYsvXZLsskdwoU,25315
22
+ cmem_cmemc/commands/workspace.py,sha256=pRx4hesL-z34m2V-FyTk4FfXErJugLDD6ufbqL6KJd8,4191
23
+ cmem_cmemc/completion.py,sha256=oP8I-hVe3KvzQ2cjyaCzSsMpoaKw9A06pVLiA5Owlaw,43135
24
+ cmem_cmemc/constants.py,sha256=s16jrvmIt42a1SrahwjON5prk8ry6MuAXHeBnuMDZyY,422
25
+ cmem_cmemc/context.py,sha256=fiMciWYlnBi0vuyBzIW2KIODxjm7XjzCMtoMYMuqRDI,18538
26
+ cmem_cmemc/exceptions.py,sha256=SpUHdmVM8cZpSjBv6ICgr9NLr3OJ5XO42DlvjohprVo,232
27
+ cmem_cmemc/manual_helper/__init__.py,sha256=G3Lqw2aPxo8x63Tg7L0aa5VD9BMaRzZDmhrog7IuEPg,43
28
+ cmem_cmemc/manual_helper/graph.py,sha256=qDchHdjRRDW2oZ66by81NxhoDgNxXaAUxq2keewEiVU,3598
29
+ cmem_cmemc/manual_helper/multi_page.py,sha256=K-S2_NubrHGynO5I_IMAanO2pZN2KETUV00wpjMqvjI,12171
30
+ cmem_cmemc/manual_helper/single_page.py,sha256=sVSeaZmPa-Cs6dtp27MqyiO6rIrskY9BtDyeAZhBWXM,1477
31
+ cmem_cmemc/object_list.py,sha256=Iyl5cu8CmeT_2RNKDsjhhSsoWoQ6AUh0rKzKwHV_Ruc,13106
32
+ cmem_cmemc/parameter_types/__init__.py,sha256=Jqhwnw5a2oPNMClzUyovWiieK60RCl3rvSNr-t3wP84,36
33
+ cmem_cmemc/parameter_types/path.py,sha256=ATwvdXHqI5GjPw9p2jCoN2pLoXlRrxPTvI0Q9Z2k_FI,1868
34
+ cmem_cmemc/smart_path/__init__.py,sha256=zDgm1kDrzLyCuIcNb8VXSdnb_CcVNjGkjgiIDVlsh74,3023
35
+ cmem_cmemc/smart_path/clients/__init__.py,sha256=YFOm69BfTCRvAcJjN_CoUmCv3kzEciyYOPUG337p_pA,1696
36
+ cmem_cmemc/smart_path/clients/http.py,sha256=3clZu2v4uuOvPY4MY_8SVSy7hIXJDNooahFRBRpy0ok,2347
37
+ cmem_cmemc/utils.py,sha256=eKXo0bVbEyaW-bARbodxv0gggnnbB6FE5pfI8MWR0cI,13173
38
+ cmem_cmemc-24.2.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
39
+ cmem_cmemc-24.2.0.dist-info/METADATA,sha256=NP18u40La3sRgvUlMnmdgtd5sb8Dq1xV8O-cN-Dx5Sc,5572
40
+ cmem_cmemc-24.2.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
41
+ cmem_cmemc-24.2.0.dist-info/entry_points.txt,sha256=znWUTG-zgDITu6Frsd-OtNxBxj6Uo8Fa7bz6gaZYMrA,41
42
+ cmem_cmemc-24.2.0.dist-info/RECORD,,
@@ -1,37 +0,0 @@
1
- cmem_cmemc/__init__.py,sha256=z7zjBQWM1c2nW9ylGUelIPiKBtXhIO38qILBJXzuEWs,5532
2
- cmem_cmemc/_cmemc.zsh,sha256=fmkrBHIQxus8cp2AgO1tzZ5mNZdGL_83cYz3a9uAdsg,1326
3
- cmem_cmemc/commands/__init__.py,sha256=_PsHWhMFwyfRAYInt0AOs3dA3Cuqhsnf_enFLjxVCGQ,3626
4
- cmem_cmemc/commands/acl.py,sha256=cA76UvQquhZc9MdS3e94kcfSn9V_RzTQ5XM0Ko6w6hM,13769
5
- cmem_cmemc/commands/admin.py,sha256=pv9N9laUWV7xevOw0toLBezRz2_B5spcgwU2B-pqaAY,8681
6
- cmem_cmemc/commands/client.py,sha256=23Sc3h64eAMaB4bJVfiamR470DMpDj1hsPWKsxUSMLg,5039
7
- cmem_cmemc/commands/config.py,sha256=9-xEtHoJyaqU9J7C8a3Q7SpPvJQHLufMXxZYuXYQ5Pk,5699
8
- cmem_cmemc/commands/dataset.py,sha256=hn3449Aby_lMgBHumSHqFn6SZS9q3cmh3ZMoUOG85RE,30198
9
- cmem_cmemc/commands/graph.py,sha256=_VtYwOU3SmNbKAQaSKHrVSTOSP3FCrs-W4jmzTQzx7M,27329
10
- cmem_cmemc/commands/metrics.py,sha256=BlZvYvp1RWLl9rEknxxcOnOh2_zQgGqMEEXFwtJa58E,7832
11
- cmem_cmemc/commands/project.py,sha256=XP4vovTTgMzvO-218SpWYnFejayWoNN4DLTp448zVuU,19268
12
- cmem_cmemc/commands/python.py,sha256=4fYWztPZjLVuz12vuApHE8el9zQvbnwGDiLh1fo7vqA,9666
13
- cmem_cmemc/commands/query.py,sha256=mx_pZB9ovD8j_svpdDTE82R1pUrwL41OICwcExpXA4s,26792
14
- cmem_cmemc/commands/resource.py,sha256=n6ri6Tu2sNUNZuNfNGpRnMQxOx9VeTFGL1OWXUKKpjE,7534
15
- cmem_cmemc/commands/scheduler.py,sha256=L9Cl7u3Nq3UjfgRzayivxxCHq2U6ZtpqtTCsXsndnFg,8512
16
- cmem_cmemc/commands/store.py,sha256=PybRXCO6R84lEWR8fsTB1jZrc8CMGrWejpruPuM9lIM,6741
17
- cmem_cmemc/commands/user.py,sha256=0BbPoPhguSeMjLUn29Qh3kRcMbpQ75bAwDHgYWrZMyQ,12288
18
- cmem_cmemc/commands/validation.py,sha256=Kr5zk_9_LPoRz11LVJ_vkEhP2KrVg8Ns2aiMfiCt-cI,19984
19
- cmem_cmemc/commands/variable.py,sha256=IvQ-Yzg2z8Hb-ZstEuOCTMBDg0N931z_73K9xZPbdoM,11356
20
- cmem_cmemc/commands/vocabulary.py,sha256=9bD_Ah6uVd4GwywIRAahSLfcqxE8yrawXIUmSMW-dMA,16693
21
- cmem_cmemc/commands/workflow.py,sha256=msBdaNClFuSdPD8KIC9sjno8C4gunyAI7n_hev4yq2w,24632
22
- cmem_cmemc/commands/workspace.py,sha256=4kMstZejLdP8KIrt9p3BMw8mrrNUrdX7E8_fSI78nc4,4097
23
- cmem_cmemc/completion.py,sha256=amF9lWdxrWvS1CAQkEOQH1S7FpbmMniw6xjKlFOw4kY,42011
24
- cmem_cmemc/constants.py,sha256=s16jrvmIt42a1SrahwjON5prk8ry6MuAXHeBnuMDZyY,422
25
- cmem_cmemc/context.py,sha256=tLyVsma3oCLUEwpywUwX-ZLtp1XqEYLnC_bVK4Ro0ps,17730
26
- cmem_cmemc/exceptions.py,sha256=SpUHdmVM8cZpSjBv6ICgr9NLr3OJ5XO42DlvjohprVo,232
27
- cmem_cmemc/manual_helper/__init__.py,sha256=G3Lqw2aPxo8x63Tg7L0aa5VD9BMaRzZDmhrog7IuEPg,43
28
- cmem_cmemc/manual_helper/graph.py,sha256=qDchHdjRRDW2oZ66by81NxhoDgNxXaAUxq2keewEiVU,3598
29
- cmem_cmemc/manual_helper/multi_page.py,sha256=K-S2_NubrHGynO5I_IMAanO2pZN2KETUV00wpjMqvjI,12171
30
- cmem_cmemc/manual_helper/single_page.py,sha256=sVSeaZmPa-Cs6dtp27MqyiO6rIrskY9BtDyeAZhBWXM,1477
31
- cmem_cmemc/object_list.py,sha256=QU-8JE5jvFcrUelEC4l5z7A9SInNnCRzRTS1bMw5FZc,13256
32
- cmem_cmemc/utils.py,sha256=LPotUSjAMSP2GFg5a5zqCQcpgFeR3Txht8nTTKneO2U,11362
33
- cmem_cmemc-24.1.4.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
34
- cmem_cmemc-24.1.4.dist-info/METADATA,sha256=hotbXDTJj2LeY9nrMH6RtyLXZwcdmpjukX7SjU_k8zk,5492
35
- cmem_cmemc-24.1.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
36
- cmem_cmemc-24.1.4.dist-info/entry_points.txt,sha256=znWUTG-zgDITu6Frsd-OtNxBxj6Uo8Fa7bz6gaZYMrA,41
37
- cmem_cmemc-24.1.4.dist-info/RECORD,,