ahorn-loader 0.1.0__py3-none-any.whl → 0.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.
Potentially problematic release.
This version of ahorn-loader might be problematic. Click here for more details.
- ahorn_loader/api.py +120 -32
- ahorn_loader/cli.py +3 -4
- ahorn_loader/utils/__init__.py +3 -0
- ahorn_loader/utils/cache.py +29 -0
- ahorn_loader-0.2.0.dist-info/METADATA +85 -0
- ahorn_loader-0.2.0.dist-info/RECORD +13 -0
- {ahorn_loader-0.1.0.dist-info → ahorn_loader-0.2.0.dist-info}/WHEEL +1 -1
- ahorn_loader-0.1.0.dist-info/METADATA +0 -53
- ahorn_loader-0.1.0.dist-info/RECORD +0 -11
- {ahorn_loader-0.1.0.dist-info → ahorn_loader-0.2.0.dist-info}/entry_points.txt +0 -0
ahorn_loader/api.py
CHANGED
|
@@ -1,19 +1,46 @@
|
|
|
1
1
|
"""Module to interact with the Ahorn dataset API."""
|
|
2
2
|
|
|
3
|
+
import contextlib
|
|
4
|
+
import gzip
|
|
3
5
|
import json
|
|
6
|
+
from collections.abc import Generator, Iterable
|
|
4
7
|
from datetime import UTC, datetime
|
|
5
8
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
9
|
+
from typing import TypedDict
|
|
10
|
+
from urllib.parse import ParseResult, urlparse
|
|
7
11
|
|
|
8
12
|
import requests
|
|
9
13
|
|
|
10
|
-
|
|
14
|
+
from .utils import get_cache_dir
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"download_dataset",
|
|
18
|
+
"load_dataset_data",
|
|
19
|
+
"load_datasets_data",
|
|
20
|
+
"read_dataset",
|
|
21
|
+
]
|
|
11
22
|
|
|
12
23
|
DATASET_API_URL = "https://ahorn.rwth-aachen.de/api/datasets.json"
|
|
13
|
-
CACHE_PATH = Path(__file__).parent.parent.parent / "cache" / "datasets.json"
|
|
14
24
|
|
|
15
25
|
|
|
16
|
-
|
|
26
|
+
class AttachmentDict(TypedDict):
|
|
27
|
+
url: str
|
|
28
|
+
size: int
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class DatasetDict(TypedDict):
|
|
32
|
+
slug: str
|
|
33
|
+
title: str
|
|
34
|
+
tags: list[str]
|
|
35
|
+
attachments: dict[str, AttachmentDict]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class DatasetsDataDict(TypedDict):
|
|
39
|
+
datasets: dict[str, DatasetDict]
|
|
40
|
+
time: str
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def load_datasets_data(*, cache_lifetime: int | None = None) -> dict[str, DatasetDict]:
|
|
17
44
|
"""Load dataset data from the Ahorn API.
|
|
18
45
|
|
|
19
46
|
Parameters
|
|
@@ -29,31 +56,28 @@ def load_datasets_data(*, cache_lifetime: int | None = None) -> dict[str, Any]:
|
|
|
29
56
|
and the values are dictionaries with dataset details such as title, tags, and
|
|
30
57
|
attachments.
|
|
31
58
|
"""
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
):
|
|
42
|
-
return cache["datasets"]
|
|
59
|
+
datasets_data_cache = get_cache_dir() / "datasets.json"
|
|
60
|
+
if datasets_data_cache.exists() and cache_lifetime is not None:
|
|
61
|
+
cache_mtime = datetime.fromtimestamp(
|
|
62
|
+
datasets_data_cache.stat().st_mtime, tz=UTC
|
|
63
|
+
)
|
|
64
|
+
if (datetime.now(tz=UTC) - cache_mtime).total_seconds() < cache_lifetime:
|
|
65
|
+
with datasets_data_cache.open("r", encoding="utf-8") as cache_file:
|
|
66
|
+
cache: DatasetsDataDict = json.load(cache_file)
|
|
67
|
+
return cache["datasets"]
|
|
43
68
|
|
|
44
69
|
response = requests.get(DATASET_API_URL, timeout=10)
|
|
45
70
|
response.raise_for_status()
|
|
46
71
|
|
|
47
|
-
|
|
48
|
-
with
|
|
72
|
+
datasets_data_cache.parent.mkdir(parents=True, exist_ok=True)
|
|
73
|
+
with datasets_data_cache.open("w", encoding="utf-8") as cache_file:
|
|
49
74
|
cache_file.write(response.text)
|
|
50
75
|
|
|
51
|
-
|
|
76
|
+
response_json: DatasetsDataDict = response.json()
|
|
77
|
+
return response_json["datasets"]
|
|
52
78
|
|
|
53
79
|
|
|
54
|
-
def load_dataset_data(
|
|
55
|
-
slug: str, *, cache_lifetime: int | None = None
|
|
56
|
-
) -> dict[str, Any]:
|
|
80
|
+
def load_dataset_data(slug: str, *, cache_lifetime: int | None = None) -> DatasetDict:
|
|
57
81
|
"""Load data for a specific dataset by its slug.
|
|
58
82
|
|
|
59
83
|
Parameters
|
|
@@ -66,19 +90,25 @@ def load_dataset_data(
|
|
|
66
90
|
|
|
67
91
|
Returns
|
|
68
92
|
-------
|
|
69
|
-
|
|
93
|
+
DatasetDict
|
|
70
94
|
Dictionary containing the dataset details.
|
|
95
|
+
|
|
96
|
+
Raises
|
|
97
|
+
------
|
|
98
|
+
KeyError
|
|
99
|
+
If the dataset with the given `slug` does not exist.
|
|
71
100
|
"""
|
|
72
101
|
datasets = load_datasets_data(cache_lifetime=cache_lifetime)
|
|
73
|
-
if "error" in datasets:
|
|
74
|
-
return {"error": datasets["error"]}
|
|
75
102
|
|
|
76
|
-
|
|
103
|
+
if slug not in datasets:
|
|
104
|
+
raise KeyError(f"Dataset with slug '{slug}' does not exist in AHORN.")
|
|
105
|
+
|
|
106
|
+
return datasets[slug]
|
|
77
107
|
|
|
78
108
|
|
|
79
109
|
def download_dataset(
|
|
80
110
|
slug: str, folder: Path | str, *, cache_lifetime: int | None = None
|
|
81
|
-
) ->
|
|
111
|
+
) -> Path:
|
|
82
112
|
"""Download a dataset by its slug to the specified folder.
|
|
83
113
|
|
|
84
114
|
Parameters
|
|
@@ -90,22 +120,80 @@ def download_dataset(
|
|
|
90
120
|
cache_lifetime : int, optional
|
|
91
121
|
How long to reuse cached data in seconds. If not provided, the cache will not
|
|
92
122
|
be used.
|
|
123
|
+
|
|
124
|
+
Returns
|
|
125
|
+
-------
|
|
126
|
+
Path
|
|
127
|
+
The path to the downloaded dataset file.
|
|
128
|
+
|
|
129
|
+
Raises
|
|
130
|
+
------
|
|
131
|
+
KeyError
|
|
132
|
+
If the dataset with the given `slug` does not exist.
|
|
133
|
+
RuntimeError
|
|
134
|
+
If the dataset file could not be downloaded due to some error.
|
|
93
135
|
"""
|
|
94
136
|
if isinstance(folder, str):
|
|
95
137
|
folder = Path(folder)
|
|
96
138
|
|
|
97
139
|
data = load_dataset_data(slug, cache_lifetime=cache_lifetime)
|
|
98
|
-
if "
|
|
99
|
-
raise
|
|
100
|
-
|
|
101
|
-
|
|
140
|
+
if "dataset" not in data["attachments"]:
|
|
141
|
+
raise RuntimeError(
|
|
142
|
+
f"Dataset '{slug}' does not contain required 'attachments/dataset' keys."
|
|
143
|
+
)
|
|
102
144
|
dataset_attachment = data["attachments"]["dataset"]
|
|
103
145
|
|
|
146
|
+
url: ParseResult = urlparse(dataset_attachment["url"])
|
|
147
|
+
folder.mkdir(parents=True, exist_ok=True)
|
|
148
|
+
filepath = folder / url.path.split("/")[-1]
|
|
149
|
+
|
|
104
150
|
response = requests.get(dataset_attachment["url"], timeout=10, stream=True)
|
|
105
151
|
response.raise_for_status()
|
|
106
|
-
|
|
107
|
-
filepath = folder / dataset_attachment["name"]
|
|
152
|
+
|
|
108
153
|
with filepath.open("wb") as f:
|
|
109
154
|
for chunk in response.iter_content(chunk_size=8192):
|
|
110
155
|
if chunk:
|
|
111
156
|
f.write(chunk)
|
|
157
|
+
|
|
158
|
+
return filepath
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@contextlib.contextmanager
|
|
162
|
+
def read_dataset(slug: str) -> Generator[Iterable[str], None, None]:
|
|
163
|
+
"""Download and yield a context-managed file object for the dataset lines by slug.
|
|
164
|
+
|
|
165
|
+
The dataset file will be stored in your system cache and can be deleted according
|
|
166
|
+
to your system's cache policy. To ensure that costly re-downloads do not occur, use
|
|
167
|
+
the `download_dataset` function to store the dataset file at a more permanent
|
|
168
|
+
location.
|
|
169
|
+
|
|
170
|
+
Parameters
|
|
171
|
+
----------
|
|
172
|
+
slug : str
|
|
173
|
+
The slug of the dataset to download.
|
|
174
|
+
|
|
175
|
+
Returns
|
|
176
|
+
-------
|
|
177
|
+
Context manager yielding an open file object (iterator over lines).
|
|
178
|
+
|
|
179
|
+
Raises
|
|
180
|
+
------
|
|
181
|
+
KeyError
|
|
182
|
+
If the dataset with the given `slug` does not exist.
|
|
183
|
+
RuntimeError
|
|
184
|
+
If the dataset file could not be downloaded due to other errors.
|
|
185
|
+
|
|
186
|
+
Examples
|
|
187
|
+
--------
|
|
188
|
+
>>> import ahorn_loader
|
|
189
|
+
>>> with ahorn_loader.read_dataset("contact-high-school") as f:
|
|
190
|
+
>>> for line in f:
|
|
191
|
+
>>> ...
|
|
192
|
+
"""
|
|
193
|
+
filepath = download_dataset(slug, get_cache_dir())
|
|
194
|
+
if filepath.suffix == ".gz":
|
|
195
|
+
with gzip.open(filepath, mode="rt", encoding="utf-8") as f:
|
|
196
|
+
yield f
|
|
197
|
+
else:
|
|
198
|
+
with filepath.open("r", encoding="utf-8") as f:
|
|
199
|
+
yield f
|
ahorn_loader/cli.py
CHANGED
|
@@ -51,15 +51,14 @@ def download(
|
|
|
51
51
|
folder : Path
|
|
52
52
|
The folder where the dataset should be saved. Defaults to the current directory.
|
|
53
53
|
"""
|
|
54
|
-
download_dataset(name, folder, cache_lifetime=3600)
|
|
55
|
-
typer.echo(f"Downloaded dataset to {folder}")
|
|
56
|
-
|
|
57
54
|
try:
|
|
58
55
|
download_dataset(name, folder, cache_lifetime=3600)
|
|
59
|
-
typer.echo(f"Downloaded dataset to {folder}")
|
|
56
|
+
typer.echo(f"Downloaded dataset to {folder.absolute()}")
|
|
60
57
|
except Exception as e:
|
|
61
58
|
typer.echo(f"Failed to download dataset: {e}")
|
|
62
59
|
raise typer.Exit(code=1) from e
|
|
60
|
+
|
|
61
|
+
|
|
63
62
|
@app.command()
|
|
64
63
|
def validate(
|
|
65
64
|
path: Annotated[
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Module with cache-related utility functions."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
__all__ = ["get_cache_dir"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_cache_dir() -> Path:
|
|
11
|
+
"""Return an appropriate cache location for the current platform.
|
|
12
|
+
|
|
13
|
+
Returns
|
|
14
|
+
-------
|
|
15
|
+
pathlib.Path
|
|
16
|
+
Platform-dependent cache directory.
|
|
17
|
+
"""
|
|
18
|
+
match sys.platform:
|
|
19
|
+
case "win32":
|
|
20
|
+
base = os.getenv("LOCALAPPDATA") or Path("~\\AppData\\Local").expanduser()
|
|
21
|
+
return Path(base) / "ahorn-loader" / "Cache"
|
|
22
|
+
case "darwin":
|
|
23
|
+
return Path.home() / "Library" / "Caches" / "ahorn-loader"
|
|
24
|
+
case _:
|
|
25
|
+
# Linux and other Unix
|
|
26
|
+
xdg = os.getenv("XDG_CACHE_HOME")
|
|
27
|
+
if xdg:
|
|
28
|
+
return Path(xdg) / "ahorn-loader"
|
|
29
|
+
return Path.home() / ".cache" / "ahorn-loader"
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: ahorn-loader
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Library and command-line application to interact with datasets in the Aachen Higher-Order Repository of Networks.
|
|
5
|
+
Author: Florian Frantzen
|
|
6
|
+
Author-email: Florian Frantzen <frantzen@netsci.rwth-aachen.de>
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: Intended Audience :: Science/Research
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering
|
|
17
|
+
Requires-Dist: requests>=2.32.4
|
|
18
|
+
Requires-Dist: typer>=0.16.0
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# `ahorn-loader`
|
|
23
|
+
|
|
24
|
+
Library and command-line application to interact with datasets in [AHORN](https://ahorn.rwth-aachen.de/).
|
|
25
|
+
|
|
26
|
+
<div align="center">
|
|
27
|
+
|
|
28
|
+
[](https://www.python.org/)
|
|
29
|
+
[](https://github.com/pyt-team/TopoNetX/blob/main/LICENSE)
|
|
30
|
+
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
`ahorn-loader` is both a command-line application and a Python package to interact with the AHORN repository for higher-order datasets.
|
|
36
|
+
|
|
37
|
+
### Command-Line Usage
|
|
38
|
+
|
|
39
|
+
To install and use `ahorn-loader` from the command line, you can run the following command:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
uvx ahorn-loader [command] [args]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Commands include:
|
|
46
|
+
- `ls`: List available datasets in AHORN.
|
|
47
|
+
- `download`: Download a dataset from AHORN.
|
|
48
|
+
- `validate`: Validate a specific dataset file (e.g., before adding it to AHORN).
|
|
49
|
+
|
|
50
|
+
To get a full help of available commands and options, run `ahorn-loader --help`.
|
|
51
|
+
|
|
52
|
+
### Python Package Usage
|
|
53
|
+
|
|
54
|
+
To use `ahorn-loader` as a Python package, you can install it via `pip` (or some other package manager of your choice):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install ahorn-loader
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Then, you can use it in your Python scripts:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
import ahorn_loader
|
|
64
|
+
|
|
65
|
+
# Download a dataset:
|
|
66
|
+
ahorn_loader.download_dataset("dataset_name", "target_path")
|
|
67
|
+
|
|
68
|
+
# Download and read a dataset:
|
|
69
|
+
# The dataset will be stored in your system's cache. For a more permanent storage
|
|
70
|
+
# location, use `ahorn_loader.download_dataset` instead.
|
|
71
|
+
with ahorn_loader.read_dataset("dataset_name") as dataset:
|
|
72
|
+
for line in dataset:
|
|
73
|
+
...
|
|
74
|
+
|
|
75
|
+
# Validate a specific dataset (e.g., before adding it to AHORN):
|
|
76
|
+
ahorn_loader.validate("path_to_dataset_file")
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Funding
|
|
80
|
+
|
|
81
|
+
<img align="right" width="200" src="https://raw.githubusercontent.com/netsci-rwth/ahorn/main/public/images/erc_logo.png">
|
|
82
|
+
|
|
83
|
+
Funded by the European Union (ERC, HIGH-HOPeS, 101039827).
|
|
84
|
+
Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Research Council Executive Agency.
|
|
85
|
+
Neither the European Union nor the granting authority can be held responsible for them.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
ahorn_loader/__init__.py,sha256=kEDhV6uY5P7i2ceFDSPi7CCR9GekRszv7EzvYx4RDEw,83
|
|
2
|
+
ahorn_loader/api.py,sha256=_alXpuc0UfWLQxi-uS6QFLHpr_xa6cIoL32ff6z_kxA,5779
|
|
3
|
+
ahorn_loader/cli.py,sha256=4fFIQVhE-Zzvq47JMghKoMFAzhZXJ8lXRdtyAjvYzBY,2272
|
|
4
|
+
ahorn_loader/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
ahorn_loader/utils/__init__.py,sha256=kIYHc-9ExuESHM2TIXlh9-YF7r7hFiRfjAKYTQG4gGg,81
|
|
6
|
+
ahorn_loader/utils/cache.py,sha256=rRsn5z6LM1aFLufZGM4uppHVP553iR8cP3JTNxZiEKY,832
|
|
7
|
+
ahorn_loader/validator/__init__.py,sha256=tyGbqMMzzkGPI3pEb9uBAJoNMGUds_WdU_5575vGBM8,84
|
|
8
|
+
ahorn_loader/validator/rules.py,sha256=djiWi4_Y-UlC2XhwPGrZywyr56AoPfAcNpOnNMZ6w8I,3155
|
|
9
|
+
ahorn_loader/validator/validator.py,sha256=qfooTPfjZ2ieqraJ3CqdqADfDFlODHm-OU_LRPK0gmM,1437
|
|
10
|
+
ahorn_loader-0.2.0.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
|
|
11
|
+
ahorn_loader-0.2.0.dist-info/entry_points.txt,sha256=oyQAA_k5r0sAD_lBKgQLPhpxqk0-UTagDJlsU97AJ4s,55
|
|
12
|
+
ahorn_loader-0.2.0.dist-info/METADATA,sha256=WrQAi5YC7DO58MgTNtxv7IlJ3qqs8H-mkX-JcXu9D2s,3020
|
|
13
|
+
ahorn_loader-0.2.0.dist-info/RECORD,,
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.3
|
|
2
|
-
Name: ahorn-loader
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: Add your description here
|
|
5
|
-
Author: Florian Frantzen
|
|
6
|
-
Author-email: Florian Frantzen <florian.frantzen@cs.rwth-aachen.de>
|
|
7
|
-
Requires-Dist: requests>=2.32.4
|
|
8
|
-
Requires-Dist: typer>=0.16.0
|
|
9
|
-
Requires-Python: >=3.12
|
|
10
|
-
Description-Content-Type: text/markdown
|
|
11
|
-
|
|
12
|
-
# `ahorn-loader`
|
|
13
|
-
|
|
14
|
-
Library and command-line application to interact with datasets in [AHORN](https://ahorn.rwth-aachen.de/).
|
|
15
|
-
|
|
16
|
-
## Usage
|
|
17
|
-
|
|
18
|
-
`ahorn-loader` is both a command-line application and a Python package to interact with the AHORN repository for higher-order datasets.
|
|
19
|
-
|
|
20
|
-
### Command-Line Usage
|
|
21
|
-
|
|
22
|
-
To install and use `ahorn-loader` from the command line, you can run the following command:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
uvx ahorn-loader [command] [args]
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Commands include:
|
|
29
|
-
- `ls`: List available datasets in AHORN.
|
|
30
|
-
- `download`: Download a dataset from AHORN.
|
|
31
|
-
- `validate`: Validate a specific dataset file (e.g., before adding it to AHORN).
|
|
32
|
-
|
|
33
|
-
To get a full help of available commands and options, run `ahorn-loader --help`.
|
|
34
|
-
|
|
35
|
-
### Python Package Usage
|
|
36
|
-
|
|
37
|
-
To use `ahorn-loader` as a Python package, you can install it via `pip` (or some other package manager of your choice):
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
pip install ahorn-loader
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Then, you can use it in your Python scripts:
|
|
44
|
-
|
|
45
|
-
```python
|
|
46
|
-
import ahorn_loader
|
|
47
|
-
|
|
48
|
-
# download a dataset
|
|
49
|
-
ahorn_loader.download('dataset_name', 'target_path')
|
|
50
|
-
|
|
51
|
-
# validate a specific dataset (e.g., before adding it to AHORN)
|
|
52
|
-
ahorn_loader.validate('path_to_dataset_file')
|
|
53
|
-
```
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
ahorn_loader/__init__.py,sha256=9040e157ab98e4fee2d9c7850d23e2ec2091f467a446ccefec4cef631e110c4c,83
|
|
2
|
-
ahorn_loader/api.py,sha256=9bda372b6aa013192be0561280d05ea5b6a65185448e0554a23dc7525567c11a,3621
|
|
3
|
-
ahorn_loader/cli.py,sha256=104c3c033404a9f4ed5be86cdd835c56fd8998711f40adb9a3790007334eb8eb,2366
|
|
4
|
-
ahorn_loader/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
|
|
5
|
-
ahorn_loader/validator/__init__.py,sha256=b7219ba8c333ce418f237a446fdb81009a0d30651db3f59d53fe79ef9bc604cf,84
|
|
6
|
-
ahorn_loader/validator/rules.py,sha256=7638968b8fd8f94942d978703c6ad9cb0cabe7a0283df01c3693a734c67ac3c2,3155
|
|
7
|
-
ahorn_loader/validator/validator.py,sha256=a9fa284cf7e367689eaab689dc2a9da800df0c594e0c79be394fcb44f2b48263,1437
|
|
8
|
-
ahorn_loader-0.1.0.dist-info/WHEEL,sha256=2b400f346628f0064eb5bbf656b39df8dfcb092437ab08244409d295749b81a3,78
|
|
9
|
-
ahorn_loader-0.1.0.dist-info/entry_points.txt,sha256=a3240003f939af4b000ff9412a040b3e1a71aa4d3e5136a00c996c53dec0278b,55
|
|
10
|
-
ahorn_loader-0.1.0.dist-info/METADATA,sha256=789ebb28797faf80f8eedf81c4861430bd70b6236e6ec5efd17d285ce2e122da,1467
|
|
11
|
-
ahorn_loader-0.1.0.dist-info/RECORD,,
|
|
File without changes
|