cloudcatalog 1.0.2__tar.gz → 1.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. cloudcatalog-1.2.1/.github/workflows/pylint.yml +23 -0
  2. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.gitignore +1 -0
  3. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/PKG-INFO +31 -5
  4. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/README.md +27 -2
  5. cloudcatalog-1.2.1/docs/CloudCatalog-Demo.ipynb +1178 -0
  6. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/Notes.md +1 -1
  7. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/cloudcatalog-spec-1.1.md +1 -1
  8. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/cloudcatalog-spec.md +3 -3
  9. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/pyproject.toml +16 -2
  10. cloudcatalog-1.2.1/src/cloudcatalog/__init__.py +4 -0
  11. cloudcatalog-1.2.1/src/cloudcatalog/cloudspider.py +166 -0
  12. cloudcatalog-1.2.1/src/cloudcatalog/generators/README.md +7 -0
  13. cloudcatalog-1.2.1/src/cloudcatalog/generators/__init__.py +5 -0
  14. cloudcatalog-1.2.1/src/cloudcatalog/generators/catalog_editor.py +138 -0
  15. cloudcatalog-1.2.1/src/cloudcatalog/generators/cdaweb_xml_checker.py +456 -0
  16. cloudcatalog-1.2.1/src/cloudcatalog/generators/cloudcat_indexer.py +323 -0
  17. cloudcatalog-1.2.1/src/cloudcatalog/generators/filtersort_nc_cdf.sh +19 -0
  18. cloudcatalog-1.2.1/src/cloudcatalog/generators/find_in_catalog.py +22 -0
  19. cloudcatalog-1.2.1/src/cloudcatalog/generators/generic_time_regex.py +124 -0
  20. cloudcatalog-1.2.1/src/cloudcatalog/generators/manifest2indices.py +417 -0
  21. cloudcatalog-1.2.1/src/cloudcatalog/generators/manifest_splitter.py +75 -0
  22. cloudcatalog-1.2.1/src/cloudcatalog/generators/reorder_csv_columns.py +32 -0
  23. cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/cdaweb_example.txt +179 -0
  24. cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/odr2catalog.sh +89 -0
  25. cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/smallall.xml +83664 -0
  26. cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/smallmanifest.csv +30 -0
  27. cloudcatalog-1.2.1/src/cloudcatalog/generators/tweak_start.py +71 -0
  28. cloudcatalog-1.0.2/src/cloudcatalog.py → cloudcatalog-1.2.1/src/cloudcatalog/main.py +316 -48
  29. cloudcatalog-1.2.1/src/cloudcatalog/updater/__init__.py +9 -0
  30. cloudcatalog-1.2.1/src/cloudcatalog/updater/catalog_updater.py +207 -0
  31. {cloudcatalog-1.0.2/src → cloudcatalog-1.2.1/src/cloudcatalog/updater}/recatalog.py +27 -21
  32. cloudcatalog-1.2.1/src/cloudcatalog/updater/updater_gui.py +90 -0
  33. cloudcatalog-1.2.1/src/cloudcatalog/updater/version_file.py +42 -0
  34. {cloudcatalog-1.0.2/tests → cloudcatalog-1.2.1/src/cloudcatalog/validators}/validation.py +16 -12
  35. {cloudcatalog-1.0.2/src/utils → cloudcatalog-1.2.1/src/cloudcatalog/validators}/validator.py +33 -27
  36. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/src/cloudcatalog.egg-info/PKG-INFO +31 -5
  37. cloudcatalog-1.2.1/src/cloudcatalog.egg-info/SOURCES.txt +71 -0
  38. cloudcatalog-1.2.1/src/cloudcatalog.egg-info/entry_points.txt +7 -0
  39. cloudcatalog-1.2.1/src/cloudcatalog.egg-info/top_level.txt +1 -0
  40. cloudcatalog-1.2.1/tests/catdata/cat.csv-test +4 -0
  41. cloudcatalog-1.2.1/tests/catdata/catalog.json-test +76 -0
  42. cloudcatalog-1.2.1/tests/catdata/catalog_stub.json +76 -0
  43. cloudcatalog-1.2.1/tests/catdata/catalog_stub.json-test +76 -0
  44. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/test_catalog_registry.py +14 -36
  45. cloudcatalog-1.2.1/tests/test_catalog_updater.py +39 -0
  46. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/test_entire_catalog_search.py +21 -19
  47. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/test_hdrl.py +11 -9
  48. cloudcatalog-1.2.1/tests/test_mms.py +27 -0
  49. cloudcatalog-1.2.1/tests/test_reverse_lookup.py +28 -0
  50. cloudcatalog-1.0.2/src/__init__.py +0 -5
  51. cloudcatalog-1.0.2/src/cloudcatalog.egg-info/SOURCES.txt +0 -43
  52. cloudcatalog-1.0.2/src/cloudcatalog.egg-info/top_level.txt +0 -6
  53. cloudcatalog-1.0.2/src/cloudcatalog_ui.py +0 -26
  54. cloudcatalog-1.0.2/src/data/README.rst +0 -6
  55. cloudcatalog-1.0.2/tests/test_mms.py +0 -15
  56. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.coveragerc +0 -0
  57. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.github/bug_report.md +0 -0
  58. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.github/feature_request.md +0 -0
  59. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.gitlab-ci.yml +0 -0
  60. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.pre-commit-config.yaml +0 -0
  61. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/LICENSE.MD +0 -0
  62. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/TODO.md +0 -0
  63. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/CONTRIBUTING.md +0 -0
  64. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/Makefile +0 -0
  65. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/conf.py +0 -0
  66. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/demo.py +0 -0
  67. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-04.md +0 -0
  68. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-05.md +0 -0
  69. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-06.md +0 -0
  70. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-1.0.md +0 -0
  71. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/index.rst +0 -0
  72. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/make.bat +0 -0
  73. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/scr_logo.png +0 -0
  74. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/requirements-dev.txt +0 -0
  75. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/requirements.txt +0 -0
  76. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/setup.cfg +0 -0
  77. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/src/cloudcatalog.egg-info/dependency_links.txt +0 -0
  78. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/src/cloudcatalog.egg-info/requires.txt +0 -0
  79. {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/__init__.py +0 -0
@@ -0,0 +1,23 @@
1
+ name: Pylint
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ python-version: ["3.8", "3.9", "3.10"]
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - name: Set up Python ${{ matrix.python-version }}
14
+ uses: actions/setup-python@v3
15
+ with:
16
+ python-version: ${{ matrix.python-version }}
17
+ - name: Install dependencies
18
+ run: |
19
+ python -m pip install --upgrade pip
20
+ pip install pylint
21
+ - name: Analysing the code with pylint
22
+ run: |
23
+ pylint $(git ls-files '*.py')
@@ -6,6 +6,7 @@ __pycache__/
6
6
  # cloud catalog common caches
7
7
  *_cache/
8
8
  src/*_cache/
9
+ *.bak
9
10
 
10
11
  # emacs save files
11
12
  *~
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cloudcatalog
3
- Version: 1.0.2
3
+ Version: 1.2.1
4
4
  Summary: API for accessing the generalized CloudCatalog (cloudcatalog) specification for sharing data in and across clouds
5
5
  Author-email: Johns Hopkins University Applied Physics Laboratory LLC <sandy.antunes@jhuapl.edu>
6
6
  License: MIT License
@@ -11,15 +11,25 @@ Keywords: cloud,index,catalog,AWS
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Topic :: Utilities
13
13
  Classifier: License :: OSI Approved :: MIT License
14
- Requires-Python: >=3.8
14
+ Requires-Python: >=3.9
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE.MD
17
17
  Requires-Dist: boto3
18
18
  Requires-Dist: pandas
19
+ Dynamic: license-file
19
20
 
20
21
  # CloudCatalog (cloudcatalog) API
21
22
 
23
+ Indexing millions of files for easy, searchable yet serverless and decentralized access is hard. CloudCatalog is a lightweight CSV- and JSON-based indexing schema enabling HAPI-like "data ID + time range" queries on massive cloud datasets, and includes an implementation of the API and support tools in Python. Key goals include that (1) data owners control their own indices, (2) indices are static files to avoid incurring server costs, (3) searching is efficient and (4) indices are easily constructable and maintainable by the scientists/data-owners (the 'lazy' part). In addition to the FAIR principles of findability, accessibility, interoperability, and reusability, it is serverless and decentralized so that contributors can publish and update their open science data without the worries of external gatekeeping or server maintenance.
24
+
22
25
  CloudCatalog is a generalized indexing specification for large cloud datasets.
26
+
27
+ * For sharing datasets across cloud frameworks
28
+ * Decentralized: data owners control their own data and access via JSON
29
+ * RESTful & serverless (indices are flat CSV files alongside their datasets)
30
+ * Removes need for doing slow/expensive disk ‘ls’ on large holdings
31
+ * Searchable
32
+
23
33
  The push to open science means many more published datasets, and finding and accessing is important to solve. CloudCatalog is an indexing method for sharing big datasets in cloud systems. It is scientist-friendly and it is easy to generate a set of indices. It uses static index files in time-ordered CSV format that are easy to fetch, easy to access via an API, and very low cost in both money and bandwidth needed to support. Metadata is kept in a simple JSON schema. We also provide a Python client toolset for scientists to access datasets that use CloudCatalog.
24
34
 
25
35
  The CloudCatalog specification and tools are open source, created by the HelioCloud project, and already used for 2 Petabytes of publicly available NASA and scientist-contributed data. We hope the community continues to adopt this CloudCatalog standard (in github, linked off heliocloud.org).
@@ -37,6 +47,22 @@ The CloudCatalog specification and tools are open source, created by the HelioCl
37
47
 
38
48
  The API is designed for retrieving file catalog (index) files from a specific ID entry in a catalog within a bucket. It also includes search functionality for searching through all data index catalogs found in the bucket list.
39
49
 
50
+ ## Command-line tools
51
+
52
+ We also include command-line tools for creating and viewing the networked catalogs.
53
+
54
+ #### Viewing tools
55
+
56
+ * cloudcatalog-tree: lists or returns list of all toplevel datasets and number of dataIDs available, fast
57
+ * cloudcatalog-spider: as 'tree' plus lists valid years and number of files, slow
58
+
59
+ #### Generator/updater tools (beta, use at risk for now)
60
+
61
+ * cloudcatalog-update-json: updates catalog.json using metadata from catalog_stub.json
62
+ * cloudcatalog-update-csv: updates catalog.json using metadata from cat.csv
63
+ * cloudcatalog-gui: GUI for selecting files for cloudcatalog-update-json
64
+ * cloudcatalog-manifest2indices: tries to convert an AWS Manifest.csv to individual [dataID]_[YYYY].csv indices
65
+
40
66
  ## Use Case
41
67
  Suppose there is a mission on S3 that follows the HelioCloud 'CloudCatalog' specification, and you want to obtain specific files from this mission.
42
68
 
@@ -64,7 +90,7 @@ fr = cloudcatalog.CloudCatalog(bucket_name)
64
90
  print(fr.get_catalog())
65
91
 
66
92
  # To find the specific ID we can also get the ID + Title by
67
- print(fr.get_entries())
93
+ print(fr.get_entries_id_title())
68
94
 
69
95
  # Now with the ID we can request the catalog index files as a Pandas dataframe
70
96
  fr_id = 'a_dataset_id_from_the_catalog'
@@ -93,7 +119,7 @@ mySDOlist = fr.request_cloud_catalog(dataid, start, stop)
93
119
 
94
120
  ### Add-on example for an MMS fetch of the filelist for all of a specific MMS item (64,383 files)
95
121
  ``` python
96
- dataid = "mms1_feeps_brst_electron"
122
+ dataid = "MMS1_FEEPS_BRST_L2_ELECTRON"
97
123
  start, stop = fr.get_entry(dataid)['start'], fr.get_entry(dataid)['stop']
98
124
  myMMSlist = fr.request_cloud_catalog(dataid, start, stop)
99
125
  ```
@@ -1,6 +1,15 @@
1
1
  # CloudCatalog (cloudcatalog) API
2
2
 
3
+ Indexing millions of files for easy, searchable yet serverless and decentralized access is hard. CloudCatalog is a lightweight CSV- and JSON-based indexing schema enabling HAPI-like "data ID + time range" queries on massive cloud datasets, and includes an implementation of the API and support tools in Python. Key goals include that (1) data owners control their own indices, (2) indices are static files to avoid incurring server costs, (3) searching is efficient and (4) indices are easily constructable and maintainable by the scientists/data-owners (the 'lazy' part). In addition to the FAIR principles of findability, accessibility, interoperability, and reusability, it is serverless and decentralized so that contributors can publish and update their open science data without the worries of external gatekeeping or server maintenance.
4
+
3
5
  CloudCatalog is a generalized indexing specification for large cloud datasets.
6
+
7
+ * For sharing datasets across cloud frameworks
8
+ * Decentralized: data owners control their own data and access via JSON
9
+ * RESTful & serverless (indices are flat CSV files alongside their datasets)
10
+ * Removes need for doing slow/expensive disk ‘ls’ on large holdings
11
+ * Searchable
12
+
4
13
  The push to open science means many more published datasets, and finding and accessing is important to solve. CloudCatalog is an indexing method for sharing big datasets in cloud systems. It is scientist-friendly and it is easy to generate a set of indices. It uses static index files in time-ordered CSV format that are easy to fetch, easy to access via an API, and very low cost in both money and bandwidth needed to support. Metadata is kept in a simple JSON schema. We also provide a Python client toolset for scientists to access datasets that use CloudCatalog.
5
14
 
6
15
  The CloudCatalog specification and tools are open source, created by the HelioCloud project, and already used for 2 Petabytes of publicly available NASA and scientist-contributed data. We hope the community continues to adopt this CloudCatalog standard (in github, linked off heliocloud.org).
@@ -18,6 +27,22 @@ The CloudCatalog specification and tools are open source, created by the HelioCl
18
27
 
19
28
  The API is designed for retrieving file catalog (index) files from a specific ID entry in a catalog within a bucket. It also includes search functionality for searching through all data index catalogs found in the bucket list.
20
29
 
30
+ ## Command-line tools
31
+
32
+ We also include command-line tools for creating and viewing the networked catalogs.
33
+
34
+ #### Viewing tools
35
+
36
+ * cloudcatalog-tree: lists or returns list of all toplevel datasets and number of dataIDs available, fast
37
+ * cloudcatalog-spider: as 'tree' plus lists valid years and number of files, slow
38
+
39
+ #### Generator/updater tools (beta, use at risk for now)
40
+
41
+ * cloudcatalog-update-json: updates catalog.json using metadata from catalog_stub.json
42
+ * cloudcatalog-update-csv: updates catalog.json using metadata from cat.csv
43
+ * cloudcatalog-gui: GUI for selecting files for cloudcatalog-update-json
44
+ * cloudcatalog-manifest2indices: tries to convert an AWS Manifest.csv to individual [dataID]_[YYYY].csv indices
45
+
21
46
  ## Use Case
22
47
  Suppose there is a mission on S3 that follows the HelioCloud 'CloudCatalog' specification, and you want to obtain specific files from this mission.
23
48
 
@@ -45,7 +70,7 @@ fr = cloudcatalog.CloudCatalog(bucket_name)
45
70
  print(fr.get_catalog())
46
71
 
47
72
  # To find the specific ID we can also get the ID + Title by
48
- print(fr.get_entries())
73
+ print(fr.get_entries_id_title())
49
74
 
50
75
  # Now with the ID we can request the catalog index files as a Pandas dataframe
51
76
  fr_id = 'a_dataset_id_from_the_catalog'
@@ -74,7 +99,7 @@ mySDOlist = fr.request_cloud_catalog(dataid, start, stop)
74
99
 
75
100
  ### Add-on example for an MMS fetch of the filelist for all of a specific MMS item (64,383 files)
76
101
  ``` python
77
- dataid = "mms1_feeps_brst_electron"
102
+ dataid = "MMS1_FEEPS_BRST_L2_ELECTRON"
78
103
  start, stop = fr.get_entry(dataid)['start'], fr.get_entry(dataid)['stop']
79
104
  myMMSlist = fr.request_cloud_catalog(dataid, start, stop)
80
105
  ```