entropy-data 0.3.7__tar.gz → 0.3.9__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.
- {entropy_data-0.3.7 → entropy_data-0.3.9}/CHANGELOG.md +8 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/PKG-INFO +1 -1
- {entropy_data-0.3.7 → entropy_data-0.3.9}/README.md +1 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/pyproject.toml +1 -1
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/cli.py +2 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/access.py +5 -0
- entropy_data-0.3.9/src/entropy_data/commands/policies.py +79 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/output.py +1 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_access_request.py +5 -1
- entropy_data-0.3.9/tests/commands/test_policies.py +89 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.editorconfig +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.github/dependabot.yml +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.github/pull_request_template.md +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.github/workflows/ci.yaml +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.github/workflows/release.yaml +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.gitignore +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/.pre-commit-config.yaml +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/CLAUDE.md +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/Dockerfile +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/LICENSE +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/release +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/__init__.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/__main__.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/client.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/__init__.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/api_keys.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/assets.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/certifications.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/connection.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/connectors.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/costs.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/datacontracts.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/dataproducts.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/definitions.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/events.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/example_data.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/git_credentials.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/gitconnections.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/import_export.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/lineage.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/notification_channels.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/organization.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/search.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/semantics.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/settings.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/sourcesystems.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/tags.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/teams.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/test_results.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/usage.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/config.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/util.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/__init__.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/__init__.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_api_keys.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_assets.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_connection.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_connectors.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_costs.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_datacontracts.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_dataproducts.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_git_credentials.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_gitconnections.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_lineage.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_notification_channels.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_organization.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_semantics.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_settings.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_tags.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_teams.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/commands/test_usage.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/conftest.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/test_client.py +0 -0
- {entropy_data-0.3.7 → entropy_data-0.3.9}/tests/test_config.py +0 -0
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.3.9]
|
|
6
|
+
|
|
7
|
+
- `entropy-data access request` now sets `info.startDate` to today by default. Without it, the platform left auto-approved agreements with `info.active: false`, and lineage / input-port views silently skipped them.
|
|
8
|
+
|
|
9
|
+
## [0.3.8]
|
|
10
|
+
|
|
11
|
+
- Add `entropy-data policies list|get|put|delete` to manage policies. Wraps `/api/policies` and `/api/policies/{externalId}`.
|
|
12
|
+
|
|
5
13
|
## [0.3.7]
|
|
6
14
|
|
|
7
15
|
- Add `yaml` as a third value for `--output` / `-o` alongside `table` and `json`. Useful when piping results into editors or files that expect YAML (e.g. data contracts).
|
|
@@ -87,6 +87,7 @@ entropy-data [--version] [--connection NAME] [--output table|json] [--debug]
|
|
|
87
87
|
sourcesystems list | get | put | delete
|
|
88
88
|
definitions list | get | put | delete
|
|
89
89
|
certifications list | get | put | delete
|
|
90
|
+
policies list | get | put | delete
|
|
90
91
|
example-data list | get | put | delete
|
|
91
92
|
test-results list | get | publish | delete
|
|
92
93
|
costs list | add | delete
|
|
@@ -105,6 +105,7 @@ from entropy_data.commands.example_data import example_data_app # noqa: E402
|
|
|
105
105
|
from entropy_data.commands.import_export import import_app # noqa: E402
|
|
106
106
|
from entropy_data.commands.lineage import lineage_app # noqa: E402
|
|
107
107
|
from entropy_data.commands.organization import organization_app # noqa: E402
|
|
108
|
+
from entropy_data.commands.policies import policies_app # noqa: E402
|
|
108
109
|
from entropy_data.commands.search import search_app # noqa: E402
|
|
109
110
|
from entropy_data.commands.semantics import semantics_app # noqa: E402
|
|
110
111
|
from entropy_data.commands.settings import settings_app # noqa: E402
|
|
@@ -122,6 +123,7 @@ app.add_typer(access_app, name="access", help="Manage access (data usage agreeme
|
|
|
122
123
|
app.add_typer(sourcesystems_app, name="sourcesystems", help="Manage source systems.")
|
|
123
124
|
app.add_typer(definitions_app, name="definitions", help="Manage definitions.")
|
|
124
125
|
app.add_typer(certifications_app, name="certifications", help="Manage certifications.")
|
|
126
|
+
app.add_typer(policies_app, name="policies", help="Manage policies.")
|
|
125
127
|
app.add_typer(example_data_app, name="example-data", help="Manage example data.")
|
|
126
128
|
app.add_typer(test_results_app, name="test-results", help="Manage test results.")
|
|
127
129
|
app.add_typer(costs_app, name="costs", help="Manage costs.")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Access (data usage agreements) commands."""
|
|
2
2
|
|
|
3
3
|
import uuid
|
|
4
|
+
from datetime import date
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from typing import Annotated, Optional
|
|
6
7
|
|
|
@@ -207,6 +208,10 @@ def request_access(
|
|
|
207
208
|
"consumer": consumer,
|
|
208
209
|
"info": {
|
|
209
210
|
"purpose": purpose,
|
|
211
|
+
# Default startDate so the platform can flip info.active to true once approved.
|
|
212
|
+
# Without it, the agreement stays inactive even after approval, and the data
|
|
213
|
+
# product's lineage / input-port views silently skip it.
|
|
214
|
+
"startDate": date.today().isoformat(),
|
|
210
215
|
},
|
|
211
216
|
}
|
|
212
217
|
if roles:
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Policies commands."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Annotated, Optional
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
|
|
8
|
+
from entropy_data.output import OutputFormat, print_link, print_resource, print_resource_list, print_success
|
|
9
|
+
from entropy_data.util import read_body
|
|
10
|
+
|
|
11
|
+
policies_app = typer.Typer(no_args_is_help=True)
|
|
12
|
+
RESOURCE_PATH = "policies"
|
|
13
|
+
RESOURCE_TYPE = "policies"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@policies_app.command("list")
|
|
17
|
+
def list_policies(
|
|
18
|
+
output: Annotated[Optional[OutputFormat], typer.Option("--output", "-o", help="Output format.")] = None,
|
|
19
|
+
) -> None:
|
|
20
|
+
"""List all policies."""
|
|
21
|
+
from entropy_data.cli import get_client, get_output_format, handle_error
|
|
22
|
+
|
|
23
|
+
fmt = output or get_output_format()
|
|
24
|
+
try:
|
|
25
|
+
client = get_client()
|
|
26
|
+
data, has_next = client.list_resources(RESOURCE_PATH)
|
|
27
|
+
print_resource_list(data, RESOURCE_TYPE, fmt, has_next_page=has_next)
|
|
28
|
+
except Exception as e:
|
|
29
|
+
handle_error(e)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@policies_app.command("get")
|
|
33
|
+
def get_policy(
|
|
34
|
+
id: Annotated[str, typer.Argument(help="Policy ID.")],
|
|
35
|
+
output: Annotated[Optional[OutputFormat], typer.Option("--output", "-o", help="Output format.")] = None,
|
|
36
|
+
) -> None:
|
|
37
|
+
"""Get a policy by ID."""
|
|
38
|
+
from entropy_data.cli import get_client, get_output_format, handle_error
|
|
39
|
+
|
|
40
|
+
fmt = output or get_output_format()
|
|
41
|
+
try:
|
|
42
|
+
client = get_client()
|
|
43
|
+
data = client.get_resource(RESOURCE_PATH, id)
|
|
44
|
+
print_resource(data, RESOURCE_TYPE, fmt)
|
|
45
|
+
except Exception as e:
|
|
46
|
+
handle_error(e)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@policies_app.command("put")
|
|
50
|
+
def put_policy(
|
|
51
|
+
id: Annotated[str, typer.Argument(help="Policy ID.")],
|
|
52
|
+
file: Annotated[Path, typer.Option("--file", "-f", help="JSON or YAML file (use - for stdin).")] = ...,
|
|
53
|
+
) -> None:
|
|
54
|
+
"""Create or update a policy."""
|
|
55
|
+
from entropy_data.cli import get_client, handle_error
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
body = read_body(file)
|
|
59
|
+
client = get_client()
|
|
60
|
+
location = client.put_resource(RESOURCE_PATH, id, body)
|
|
61
|
+
print_success(f"Policy '{id}' saved.")
|
|
62
|
+
print_link(location)
|
|
63
|
+
except Exception as e:
|
|
64
|
+
handle_error(e)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@policies_app.command("delete")
|
|
68
|
+
def delete_policy(
|
|
69
|
+
id: Annotated[str, typer.Argument(help="Policy ID.")],
|
|
70
|
+
) -> None:
|
|
71
|
+
"""Delete a policy."""
|
|
72
|
+
from entropy_data.cli import get_client, handle_error
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
client = get_client()
|
|
76
|
+
client.delete_resource(RESOURCE_PATH, id)
|
|
77
|
+
print_success(f"Policy '{id}' deleted.")
|
|
78
|
+
except Exception as e:
|
|
79
|
+
handle_error(e)
|
|
@@ -42,6 +42,7 @@ RESOURCE_COLUMNS: dict[str, list[tuple[str, str]]] = {
|
|
|
42
42
|
"sourcesystems": [("ID", "id"), ("Name", "name"), ("Owner", "owner")],
|
|
43
43
|
"definitions": [("ID", "id"), ("Name", "title"), ("Owner", "owner")],
|
|
44
44
|
"certifications": [("ID", "id"), ("Name", "name"), ("Rank", "rank"), ("Tag", "tag")],
|
|
45
|
+
"policies": [("ID", "id"), ("Name", "name"), ("Status", "status")],
|
|
45
46
|
"example-data": [("ID", "id"), ("Data Product", "dataProductId"), ("Schema", "schemaName")],
|
|
46
47
|
"test-results": [("ID", "id"), ("Data Contract", "dataContractId"), ("Result", "result")],
|
|
47
48
|
"events": [("ID", "id"), ("Type", "type"), ("Subject", "subject"), ("Time", "time")],
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import re
|
|
5
|
+
from datetime import date
|
|
5
6
|
|
|
6
7
|
import responses
|
|
7
8
|
from typer.testing import CliRunner
|
|
@@ -49,7 +50,10 @@ def test_request_with_consumer_team(monkeypatch, tmp_path):
|
|
|
49
50
|
body = captured["body"]
|
|
50
51
|
assert body["provider"] == {"dataProductId": "dp_account_master", "outputPortId": "accounts"}
|
|
51
52
|
assert body["consumer"] == {"teamId": "customer-success"}
|
|
52
|
-
assert body["info"] == {
|
|
53
|
+
assert body["info"] == {
|
|
54
|
+
"purpose": "Building churn model.",
|
|
55
|
+
"startDate": date.today().isoformat(),
|
|
56
|
+
}
|
|
53
57
|
assert UUID_RE.match(body["id"])
|
|
54
58
|
|
|
55
59
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""Tests for policies commands."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
import responses
|
|
6
|
+
from typer.testing import CliRunner
|
|
7
|
+
|
|
8
|
+
import entropy_data.config as cfg
|
|
9
|
+
from entropy_data.cli import app
|
|
10
|
+
|
|
11
|
+
runner = CliRunner()
|
|
12
|
+
BASE_URL = "https://api.entropy-data.com"
|
|
13
|
+
|
|
14
|
+
POLICIES_LIST = [
|
|
15
|
+
{"id": "pol_pii_handling", "name": "PII Handling", "status": "Published", "content": "..."},
|
|
16
|
+
{"id": "pol_retention", "name": "Data Retention", "status": "Draft", "content": "..."},
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@responses.activate
|
|
21
|
+
def test_policies_list(monkeypatch, tmp_path):
|
|
22
|
+
monkeypatch.setattr(cfg, "CONFIG_FILE", tmp_path / "config.toml")
|
|
23
|
+
monkeypatch.setenv("ENTROPY_DATA_API_KEY", "test-key")
|
|
24
|
+
responses.add(responses.GET, f"{BASE_URL}/api/policies", json=POLICIES_LIST, status=200)
|
|
25
|
+
result = runner.invoke(app, ["policies", "list"])
|
|
26
|
+
assert result.exit_code == 0
|
|
27
|
+
assert "PII Handling" in result.output
|
|
28
|
+
assert "Data Retention" in result.output
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@responses.activate
|
|
32
|
+
def test_policies_list_json(monkeypatch, tmp_path):
|
|
33
|
+
monkeypatch.setattr(cfg, "CONFIG_FILE", tmp_path / "config.toml")
|
|
34
|
+
monkeypatch.setenv("ENTROPY_DATA_API_KEY", "test-key")
|
|
35
|
+
responses.add(responses.GET, f"{BASE_URL}/api/policies", json=POLICIES_LIST, status=200)
|
|
36
|
+
result = runner.invoke(app, ["policies", "list", "--output", "json"])
|
|
37
|
+
assert result.exit_code == 0
|
|
38
|
+
data = json.loads(result.output)
|
|
39
|
+
assert len(data) == 2
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@responses.activate
|
|
43
|
+
def test_policies_get(monkeypatch, tmp_path):
|
|
44
|
+
monkeypatch.setattr(cfg, "CONFIG_FILE", tmp_path / "config.toml")
|
|
45
|
+
monkeypatch.setenv("ENTROPY_DATA_API_KEY", "test-key")
|
|
46
|
+
responses.add(
|
|
47
|
+
responses.GET,
|
|
48
|
+
f"{BASE_URL}/api/policies/pol_pii_handling",
|
|
49
|
+
json=POLICIES_LIST[0],
|
|
50
|
+
status=200,
|
|
51
|
+
)
|
|
52
|
+
result = runner.invoke(app, ["policies", "get", "pol_pii_handling"])
|
|
53
|
+
assert result.exit_code == 0
|
|
54
|
+
assert "PII Handling" in result.output
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@responses.activate
|
|
58
|
+
def test_policies_put(monkeypatch, tmp_path):
|
|
59
|
+
monkeypatch.setattr(cfg, "CONFIG_FILE", tmp_path / "config.toml")
|
|
60
|
+
monkeypatch.setenv("ENTROPY_DATA_API_KEY", "test-key")
|
|
61
|
+
responses.add(
|
|
62
|
+
responses.PUT,
|
|
63
|
+
f"{BASE_URL}/api/policies/pol_pii_handling",
|
|
64
|
+
status=200,
|
|
65
|
+
)
|
|
66
|
+
policy_file = tmp_path / "policy.json"
|
|
67
|
+
policy_file.write_text(json.dumps({"id": "pol_pii_handling", "name": "PII Handling", "status": "Draft"}))
|
|
68
|
+
result = runner.invoke(app, ["policies", "put", "pol_pii_handling", "--file", str(policy_file)])
|
|
69
|
+
assert result.exit_code == 0
|
|
70
|
+
assert "saved" in result.output
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@responses.activate
|
|
74
|
+
def test_policies_delete(monkeypatch, tmp_path):
|
|
75
|
+
monkeypatch.setattr(cfg, "CONFIG_FILE", tmp_path / "config.toml")
|
|
76
|
+
monkeypatch.setenv("ENTROPY_DATA_API_KEY", "test-key")
|
|
77
|
+
responses.add(responses.DELETE, f"{BASE_URL}/api/policies/pol_pii_handling", status=200)
|
|
78
|
+
result = runner.invoke(app, ["policies", "delete", "pol_pii_handling"])
|
|
79
|
+
assert result.exit_code == 0
|
|
80
|
+
assert "deleted" in result.output
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_policies_help():
|
|
84
|
+
result = runner.invoke(app, ["policies", "--help"])
|
|
85
|
+
assert result.exit_code == 0
|
|
86
|
+
assert "list" in result.output
|
|
87
|
+
assert "get" in result.output
|
|
88
|
+
assert "put" in result.output
|
|
89
|
+
assert "delete" in result.output
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{entropy_data-0.3.7 → entropy_data-0.3.9}/src/entropy_data/commands/notification_channels.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|