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.
- cloudcatalog-1.2.1/.github/workflows/pylint.yml +23 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.gitignore +1 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/PKG-INFO +31 -5
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/README.md +27 -2
- cloudcatalog-1.2.1/docs/CloudCatalog-Demo.ipynb +1178 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/Notes.md +1 -1
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/cloudcatalog-spec-1.1.md +1 -1
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/cloudcatalog-spec.md +3 -3
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/pyproject.toml +16 -2
- cloudcatalog-1.2.1/src/cloudcatalog/__init__.py +4 -0
- cloudcatalog-1.2.1/src/cloudcatalog/cloudspider.py +166 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/README.md +7 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/__init__.py +5 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/catalog_editor.py +138 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/cdaweb_xml_checker.py +456 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/cloudcat_indexer.py +323 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/filtersort_nc_cdf.sh +19 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/find_in_catalog.py +22 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/generic_time_regex.py +124 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/manifest2indices.py +417 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/manifest_splitter.py +75 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/reorder_csv_columns.py +32 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/cdaweb_example.txt +179 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/odr2catalog.sh +89 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/smallall.xml +83664 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/sample_data/smallmanifest.csv +30 -0
- cloudcatalog-1.2.1/src/cloudcatalog/generators/tweak_start.py +71 -0
- cloudcatalog-1.0.2/src/cloudcatalog.py → cloudcatalog-1.2.1/src/cloudcatalog/main.py +316 -48
- cloudcatalog-1.2.1/src/cloudcatalog/updater/__init__.py +9 -0
- cloudcatalog-1.2.1/src/cloudcatalog/updater/catalog_updater.py +207 -0
- {cloudcatalog-1.0.2/src → cloudcatalog-1.2.1/src/cloudcatalog/updater}/recatalog.py +27 -21
- cloudcatalog-1.2.1/src/cloudcatalog/updater/updater_gui.py +90 -0
- cloudcatalog-1.2.1/src/cloudcatalog/updater/version_file.py +42 -0
- {cloudcatalog-1.0.2/tests → cloudcatalog-1.2.1/src/cloudcatalog/validators}/validation.py +16 -12
- {cloudcatalog-1.0.2/src/utils → cloudcatalog-1.2.1/src/cloudcatalog/validators}/validator.py +33 -27
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/src/cloudcatalog.egg-info/PKG-INFO +31 -5
- cloudcatalog-1.2.1/src/cloudcatalog.egg-info/SOURCES.txt +71 -0
- cloudcatalog-1.2.1/src/cloudcatalog.egg-info/entry_points.txt +7 -0
- cloudcatalog-1.2.1/src/cloudcatalog.egg-info/top_level.txt +1 -0
- cloudcatalog-1.2.1/tests/catdata/cat.csv-test +4 -0
- cloudcatalog-1.2.1/tests/catdata/catalog.json-test +76 -0
- cloudcatalog-1.2.1/tests/catdata/catalog_stub.json +76 -0
- cloudcatalog-1.2.1/tests/catdata/catalog_stub.json-test +76 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/test_catalog_registry.py +14 -36
- cloudcatalog-1.2.1/tests/test_catalog_updater.py +39 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/test_entire_catalog_search.py +21 -19
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/tests/test_hdrl.py +11 -9
- cloudcatalog-1.2.1/tests/test_mms.py +27 -0
- cloudcatalog-1.2.1/tests/test_reverse_lookup.py +28 -0
- cloudcatalog-1.0.2/src/__init__.py +0 -5
- cloudcatalog-1.0.2/src/cloudcatalog.egg-info/SOURCES.txt +0 -43
- cloudcatalog-1.0.2/src/cloudcatalog.egg-info/top_level.txt +0 -6
- cloudcatalog-1.0.2/src/cloudcatalog_ui.py +0 -26
- cloudcatalog-1.0.2/src/data/README.rst +0 -6
- cloudcatalog-1.0.2/tests/test_mms.py +0 -15
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.coveragerc +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.github/bug_report.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.github/feature_request.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.gitlab-ci.yml +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/.pre-commit-config.yaml +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/LICENSE.MD +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/TODO.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/CONTRIBUTING.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/Makefile +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/conf.py +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/demo.py +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-04.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-05.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-06.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/earlier/cloudcatalog-spec-1.0.md +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/index.rst +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/make.bat +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/docs/scr_logo.png +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/requirements-dev.txt +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/requirements.txt +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/setup.cfg +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/src/cloudcatalog.egg-info/dependency_links.txt +0 -0
- {cloudcatalog-1.0.2 → cloudcatalog-1.2.1}/src/cloudcatalog.egg-info/requires.txt +0 -0
- {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')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: cloudcatalog
|
|
3
|
-
Version: 1.
|
|
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.
|
|
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.
|
|
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 = "
|
|
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.
|
|
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 = "
|
|
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
|
```
|