data-sourcerer 0.1.0__tar.gz → 0.2.0__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.
- data_sourcerer-0.2.0/.coderabbit.yaml +49 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/.github/workflows/bandit.yml +1 -1
- data_sourcerer-0.2.0/.github/workflows/deploy_docs.yml +28 -0
- data_sourcerer-0.2.0/.github/workflows/run_tests.yml +23 -0
- data_sourcerer-0.2.0/.pre-commit-config.yaml +10 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/.pylintrc +5 -5
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/PKG-INFO +25 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/README.md +8 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/overrides/home.html +27 -9
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/roadmap.md +1 -1
- data_sourcerer-0.2.0/pyproject.toml +98 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/data_sourcerer.egg-info/PKG-INFO +25 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/data_sourcerer.egg-info/SOURCES.txt +9 -1
- data_sourcerer-0.2.0/src/data_sourcerer.egg-info/requires.txt +25 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/__init__.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/entities.py +17 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/exceptions.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/repositories.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/services.py +14 -2
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/file_system/exceptions.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/file_system/services.py +2 -2
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/shared/entities.py +1 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/storage_provider/entities.py +3 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/storage_provider/exceptions.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/storage_provider/services.py +13 -9
- data_sourcerer-0.2.0/src/sourcerer/infrastructure/access_credentials/exceptions.py +29 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/access_credentials/registry.py +3 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/access_credentials/services.py +141 -44
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/db/models.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/file_system/exceptions.py +9 -9
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/file_system/services.py +16 -16
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/storage_provider/exceptions.py +28 -8
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/storage_provider/registry.py +2 -3
- data_sourcerer-0.2.0/src/sourcerer/infrastructure/storage_provider/services/azure.py +261 -0
- data_sourcerer-0.2.0/src/sourcerer/infrastructure/storage_provider/services/gcp.py +277 -0
- data_sourcerer-0.2.0/src/sourcerer/infrastructure/storage_provider/services/s3.py +290 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/utils.py +2 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/critical_error/main.py +3 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/file_system_finder/main.py +4 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/file_system_finder/widgets/file_system_navigator.py +12 -12
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/main.py +57 -33
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/delete_request.py +1 -2
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/download_request.py +1 -2
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/widgets/gradient.py +2 -5
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/widgets/storage_content.py +12 -13
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/widgets/storage_list_sidebar.py +8 -6
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/preview_content/main.py +15 -4
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/preview_content/styles.tcss +2 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/provider_creds_list/main.py +2 -2
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/provider_creds_registration/main.py +26 -11
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/question/main.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/shared/containers.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/shared/widgets/labeled_input.py +1 -1
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/storage_action_progress/main.py +34 -20
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/storage_action_progress/styles.tcss +11 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/utils.py +7 -3
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/settings.py +4 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/utils.py +2 -2
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/README.md +1 -1
- data_sourcerer-0.2.0/tests/sourcerer/access_credentials/test_services.py +461 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/sourcerer/file_system/test_services.py +10 -10
- data_sourcerer-0.2.0/tests/sourcerer/storage_provider/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/sourcerer/storage_provider/test_services.py +443 -143
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/uv.lock +1143 -52
- data_sourcerer-0.1.0/pyproject.toml +0 -43
- data_sourcerer-0.1.0/src/data_sourcerer.egg-info/requires.txt +0 -8
- data_sourcerer-0.1.0/src/sourcerer/infrastructure/access_credentials/exceptions.py +0 -16
- data_sourcerer-0.1.0/src/sourcerer/infrastructure/storage_provider/services.py +0 -509
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/.github/workflows/pylint.yml +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/.github/workflows/pyright.yml +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/.github/workflows/ruff.yml +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/.gitignore +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/LICENSE +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/billie-holiday.png +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/creds_registration.gif +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/keys_operations.gif +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/layer-1.png +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/layer-2.png +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/layer-3.png +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/layer-4.png +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/assets/layer-5.png +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/guides/register_credentials.md +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/index.md +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/js/parallax.js +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/docs/styles/styles.css +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/media/creds_registration.gif +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/media/keys_operations.gif +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/mkdocs.yml +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/setup.cfg +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/data_sourcerer.egg-info/dependency_links.txt +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/data_sourcerer.egg-info/entry_points.txt +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/data_sourcerer.egg-info/top_level.txt +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/file_system/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/file_system/entities.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/shared/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/storage_provider/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/access_credentials/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/access_credentials/repositories.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/db/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/db/config.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/file_system/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/infrastructure/storage_provider/__init__.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens → data_sourcerer-0.2.0/src/sourcerer/infrastructure/storage_provider/services}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/app.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/di_container.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/critical_error → data_sourcerer-0.2.0/src/sourcerer/presentation/screens}/__init__.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/file_system_finder/widgets → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/critical_error}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/critical_error/styles.tcss +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/file_system_finder/styles.tcss +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/main → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/file_system_finder/widgets}/__init__.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/main/messages → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/main}/__init__.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/main/mixins → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/main/messages}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/preview_request.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/resizing_rule.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/select_storage_item.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/uncheck_files_request.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/messages/upload_request.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/main/widgets → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/main/mixins}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/mixins/resize_containers_watcher_mixin.py +3 -3
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/styles.tcss +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/preview_content → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/main/widgets}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/main/widgets/resizing_rule.py +1 -1
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/provider_creds_list → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/preview_content}/__init__.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/provider_creds_registration → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/provider_creds_list}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/provider_creds_list/styles.tcss +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/question → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/provider_creds_registration}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/provider_creds_registration/styles.tcss +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/shared → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/question}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/question/styles.tcss +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/shared/widgets → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/shared}/__init__.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/screens/storage_action_progress → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/shared/widgets}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/screens/shared/widgets/button.py +0 -0
- {data_sourcerer-0.1.0/src/sourcerer/presentation/themes → data_sourcerer-0.2.0/src/sourcerer/presentation/screens/storage_action_progress}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/settings.py +0 -0
- {data_sourcerer-0.1.0/tests → data_sourcerer-0.2.0/src/sourcerer/presentation/themes}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/presentation/themes/github_dark.py +0 -0
- {data_sourcerer-0.1.0/tests/sourcerer → data_sourcerer-0.2.0/tests}/__init__.py +0 -0
- {data_sourcerer-0.1.0/tests/sourcerer/access_credentials → data_sourcerer-0.2.0/tests/sourcerer}/__init__.py +0 -0
- {data_sourcerer-0.1.0/tests/sourcerer/db → data_sourcerer-0.2.0/tests/sourcerer/access_credentials}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/sourcerer/access_credentials/test_registry.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/sourcerer/access_credentials/test_repositories.py +0 -0
- {data_sourcerer-0.1.0/tests/sourcerer/file_system → data_sourcerer-0.2.0/tests/sourcerer/db}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/sourcerer/db/test_models.py +0 -0
- {data_sourcerer-0.1.0/tests/sourcerer/storage_provider → data_sourcerer-0.2.0/tests/sourcerer/file_system}/__init__.py +0 -0
- {data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/tests/sourcerer/storage_provider/test_registry.py +0 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
|
2
|
+
language: "en"
|
3
|
+
early_access: true
|
4
|
+
reviews:
|
5
|
+
profile: "chill"
|
6
|
+
request_changes_workflow: false
|
7
|
+
high_level_summary: true
|
8
|
+
poem: false
|
9
|
+
review_status: true
|
10
|
+
collapse_walkthrough: false
|
11
|
+
path_instructions:
|
12
|
+
- path: "src/sourcerer/domain/**/*.py"
|
13
|
+
instructions: |
|
14
|
+
- Ensure domain models are immutable and follow DDD principles
|
15
|
+
- Verify that domain services are interface-driven
|
16
|
+
- Check for proper exception handling and domain-specific exceptions
|
17
|
+
- Validate that domain logic is independent of infrastructure
|
18
|
+
- Ensure pythonic codestyle and best practices are followed
|
19
|
+
- path: "src/sourcerer/infrastructure/**/*.py"
|
20
|
+
instructions: |
|
21
|
+
- Verify proper implementation of domain interfaces
|
22
|
+
- Check for appropriate error handling and mapping to domain exceptions
|
23
|
+
- Ensure infrastructure concerns are properly isolated
|
24
|
+
- Validate dependency injection usage
|
25
|
+
- Ensure pythonic codestyle and best practices are followed
|
26
|
+
- path: "src/sourcerer/presentation/**/*.py"
|
27
|
+
instructions: |
|
28
|
+
- Review UI component separation and responsibility
|
29
|
+
- Check proper use of dependency injection
|
30
|
+
- Verify error handling and user feedback
|
31
|
+
- Ensure presentation logic doesn't contain business rules
|
32
|
+
- Ensure pythonic codestyle and best practices are followed
|
33
|
+
- path: "tests/**/*"
|
34
|
+
instructions: |
|
35
|
+
- Assess the integration and e2e test code assessing sufficient code coverage for the changes associated in the pull request
|
36
|
+
- Ensure pythonic codestyle and best practices are followed
|
37
|
+
- path: "**/*.md"
|
38
|
+
instructions: |
|
39
|
+
"Assess the documentation for misspellings, grammatical errors, missing documentation and correctness"
|
40
|
+
auto_review:
|
41
|
+
enabled: false
|
42
|
+
ignore_title_keywords:
|
43
|
+
- "WIP"
|
44
|
+
- "DO NOT MERGE"
|
45
|
+
drafts: false
|
46
|
+
base_branches:
|
47
|
+
- "main"
|
48
|
+
chat:
|
49
|
+
auto_reply: true
|
@@ -0,0 +1,28 @@
|
|
1
|
+
name: deploy_docs
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- main
|
6
|
+
permissions:
|
7
|
+
contents: write
|
8
|
+
jobs:
|
9
|
+
deploy:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v4
|
13
|
+
- name: Configure Git Credentials
|
14
|
+
run: |
|
15
|
+
git config user.name github-actions[bot]
|
16
|
+
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
17
|
+
- uses: actions/setup-python@v5
|
18
|
+
with:
|
19
|
+
python-version: 3.x
|
20
|
+
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
21
|
+
- uses: actions/cache@v4
|
22
|
+
with:
|
23
|
+
key: mkdocs-material-${{ env.cache_id }}
|
24
|
+
path: .cache
|
25
|
+
restore-keys: |
|
26
|
+
mkdocs-material-
|
27
|
+
- run: pip install mkdocs-material
|
28
|
+
- run: mkdocs gh-deploy --force
|
@@ -0,0 +1,23 @@
|
|
1
|
+
name: Unit tests
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
permissions:
|
6
|
+
contents: read
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
build:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v4
|
13
|
+
- name: Set up Python 3.12
|
14
|
+
uses: actions/setup-python@v5
|
15
|
+
with:
|
16
|
+
python-version: "3.12"
|
17
|
+
- name: Install dependencies
|
18
|
+
run: |
|
19
|
+
python -m pip install --upgrade pip
|
20
|
+
pip install .[dev]
|
21
|
+
- name: Run tests
|
22
|
+
run: |
|
23
|
+
export PYTHONPATH="$PYTHONPATH:$PWD/src" && coverage run -m unittest && coverage report -m
|
@@ -283,17 +283,17 @@ valid-metaclass-classmethod-first-arg=mcs
|
|
283
283
|
|
284
284
|
# List of regular expressions of class ancestor names to ignore when counting
|
285
285
|
# public methods (see R0903)
|
286
|
-
exclude-too-few-public-methods=
|
286
|
+
exclude-too-few-public-methods=True
|
287
287
|
|
288
288
|
# List of qualified class names to ignore when counting class parents (see
|
289
289
|
# R0901)
|
290
290
|
ignored-parents=
|
291
291
|
|
292
292
|
# Maximum number of arguments for function / method.
|
293
|
-
max-args=
|
293
|
+
max-args=7
|
294
294
|
|
295
295
|
# Maximum number of attributes for a class (see R0902).
|
296
|
-
max-attributes=
|
296
|
+
max-attributes=10
|
297
297
|
|
298
298
|
# Maximum number of boolean expressions in an if statement (see R0916).
|
299
299
|
max-bool-expr=5
|
@@ -308,7 +308,7 @@ max-locals=15
|
|
308
308
|
max-parents=7
|
309
309
|
|
310
310
|
# Maximum number of positional arguments for function / method.
|
311
|
-
max-positional-arguments=
|
311
|
+
max-positional-arguments=7
|
312
312
|
|
313
313
|
# Maximum number of public methods for a class (see R0904).
|
314
314
|
max-public-methods=20
|
@@ -320,7 +320,7 @@ max-returns=6
|
|
320
320
|
max-statements=50
|
321
321
|
|
322
322
|
# Minimum number of public methods for a class (see R0903).
|
323
|
-
min-public-methods=
|
323
|
+
min-public-methods=0
|
324
324
|
|
325
325
|
|
326
326
|
[EXCEPTIONS]
|
@@ -1,11 +1,11 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: data-sourcerer
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
4
4
|
Summary: Sourcerer is a terminal cloud storage navigator.
|
5
5
|
Author-email: Bohdana Kuzmenko <bohdana.kuzmenko.dev@gmail.com>
|
6
6
|
License: MIT
|
7
|
-
Keywords: cloud,s3,gcp,cli,
|
8
|
-
Requires-Python: >=3.
|
7
|
+
Keywords: cloud,s3,gcp,cli,terminal,storage,textual,ui
|
8
|
+
Requires-Python: >=3.9
|
9
9
|
Description-Content-Type: text/markdown
|
10
10
|
License-File: LICENSE
|
11
11
|
Requires-Dist: boto3<2.0.0,>=1.26.0
|
@@ -16,6 +16,20 @@ Requires-Dist: humanize<5.0.0,>=4.12.1
|
|
16
16
|
Requires-Dist: sqlalchemy<3.0.0,>=2.0.38
|
17
17
|
Requires-Dist: sqlalchemy-utils<1.0.0,>=0.41.2
|
18
18
|
Requires-Dist: textual[syntax]<4.0.0,>=2.0.0
|
19
|
+
Requires-Dist: pyOpenSSL>=22.1.0; sys_platform == "linux"
|
20
|
+
Requires-Dist: azure-storage-blob<13.0.0,>=12.25.1
|
21
|
+
Requires-Dist: azure-identity<2.0.0,>=1.22.0
|
22
|
+
Requires-Dist: azure-mgmt-storage<23.0.0,>=22.2.0
|
23
|
+
Provides-Extra: dev
|
24
|
+
Requires-Dist: bandit>=1.8.3; extra == "dev"
|
25
|
+
Requires-Dist: black>=25.1.0; extra == "dev"
|
26
|
+
Requires-Dist: coverage>=7.8.0; extra == "dev"
|
27
|
+
Requires-Dist: mkdocs-material>=9.6.12; extra == "dev"
|
28
|
+
Requires-Dist: pre-commit>=4.2.0; extra == "dev"
|
29
|
+
Requires-Dist: pylint>=3.3.6; extra == "dev"
|
30
|
+
Requires-Dist: pyright>=1.1.400; extra == "dev"
|
31
|
+
Requires-Dist: ruff>=0.11.7; extra == "dev"
|
32
|
+
Requires-Dist: textual-dev>=1.7.0; extra == "dev"
|
19
33
|
Dynamic: license-file
|
20
34
|
|
21
35
|
# 🧙♂️ Sourcerer
|
@@ -41,7 +55,14 @@ engineers to view and manage files across multiple cloud providers like
|
|
41
55
|
## 🪄 Installation
|
42
56
|
|
43
57
|
```bash
|
44
|
-
pip install sourcerer
|
58
|
+
pip install data-sourcerer
|
59
|
+
```
|
60
|
+
--
|
61
|
+
|
62
|
+
## 🪄 Run
|
63
|
+
|
64
|
+
```bash
|
65
|
+
sourcerer
|
45
66
|
```
|
46
67
|
|
47
68
|
|
@@ -13,7 +13,8 @@
|
|
13
13
|
background-color: transparent;
|
14
14
|
backdrop-filter: blur(10px);
|
15
15
|
z-index: 10;
|
16
|
-
position:
|
16
|
+
position: fixed;
|
17
|
+
box-shadow: 0 0 0 transparent;
|
17
18
|
}
|
18
19
|
|
19
20
|
.md-main {
|
@@ -243,7 +244,7 @@
|
|
243
244
|
<div class="hero-content">
|
244
245
|
<h1>Sourcerer</h1>
|
245
246
|
<p>Your unified cloud storages interface</p>
|
246
|
-
<button class="cta-button">Try
|
247
|
+
<button class="cta-button">Try it out</button>
|
247
248
|
</div>
|
248
249
|
</section>
|
249
250
|
|
@@ -262,14 +263,21 @@
|
|
262
263
|
</div>
|
263
264
|
</section>
|
264
265
|
|
265
|
-
<section class="demo">
|
266
|
+
<section class="demo" id="install">
|
266
267
|
<h2>Install</h2>
|
267
268
|
<pre>
|
268
|
-
|
269
|
-
|
270
|
-
pip install sourcerer
|
271
|
-
|
272
|
-
|
269
|
+
<button class="copy-button" onclick="copyToClipboard('install-code')">🧙</button>
|
270
|
+
<code id="install-code">
|
271
|
+
pip install data-sourcerer
|
272
|
+
</code>
|
273
|
+
</pre>
|
274
|
+
<h2>Run</h2>
|
275
|
+
<pre>
|
276
|
+
<button class="copy-button" onclick="copyToClipboard('run-code')">🧙</button>
|
277
|
+
<code id="run-code">
|
278
|
+
sourcerer
|
279
|
+
</code>
|
280
|
+
</pre>
|
273
281
|
</section>
|
274
282
|
|
275
283
|
<section class="demo">
|
@@ -285,7 +293,17 @@ pip install sourcerer
|
|
285
293
|
</footer>
|
286
294
|
|
287
295
|
</div>
|
288
|
-
|
296
|
+
<script>
|
297
|
+
document.querySelector('.cta-button').addEventListener('click', () => {
|
298
|
+
document.getElementById('install').scrollIntoView({
|
299
|
+
behavior: 'smooth'
|
300
|
+
});
|
301
|
+
});
|
302
|
+
function copyToClipboard(blockId) {
|
303
|
+
const codeBlock = document.getElementById(blockId).innerText.trim();
|
304
|
+
navigator.clipboard.writeText(codeBlock).catch(err => console.error('Error copying text:', err))
|
305
|
+
}
|
306
|
+
</script>
|
289
307
|
|
290
308
|
{% endblock %}
|
291
309
|
{% block content %}
|
@@ -8,7 +8,7 @@ Our roadmap unveils the features, improvements, and integrations designed to emp
|
|
8
8
|
|
9
9
|
## 🗺️ The Roadmap
|
10
10
|
|
11
|
-
-
|
11
|
+
- ✅ **Initial release**
|
12
12
|
|
13
13
|
- ✅ **Multi-cloud storage viewing** – Navigate files and folders from:
|
14
14
|
- ✅ Google Cloud Storage (GCS)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
[project]
|
2
|
+
|
3
|
+
name = "data-sourcerer"
|
4
|
+
version = "0.2.0"
|
5
|
+
description = "Sourcerer is a terminal cloud storage navigator."
|
6
|
+
requires-python = ">=3.9"
|
7
|
+
|
8
|
+
keywords = ["cloud", "s3", "gcp", "cli", "terminal", "storage", "textual", "ui"]
|
9
|
+
license = {text = "MIT"}
|
10
|
+
|
11
|
+
authors = [
|
12
|
+
{name = "Bohdana Kuzmenko", email = "bohdana.kuzmenko.dev@gmail.com"},
|
13
|
+
]
|
14
|
+
|
15
|
+
readme = {file = "README.md", content-type = "text/markdown"}
|
16
|
+
|
17
|
+
dependencies = [
|
18
|
+
"boto3>=1.26.0,<2.0.0",
|
19
|
+
"cryptography>=44.0.2,<45.0.0",
|
20
|
+
"dependency-injector>=4.43.0,<5.0.0",
|
21
|
+
"google-cloud-storage>=3.1.0,<4.0.0",
|
22
|
+
"humanize>=4.12.1,<5.0.0",
|
23
|
+
"sqlalchemy>=2.0.38,<3.0.0",
|
24
|
+
"sqlalchemy-utils>=0.41.2,<1.0.0",
|
25
|
+
"textual[syntax]>=2.0.0,<4.0.0",
|
26
|
+
"pyOpenSSL>=22.1.0; sys_platform == 'linux'",
|
27
|
+
"azure-storage-blob>=12.25.1,<13.0.0",
|
28
|
+
"azure-identity>=1.22.0,<2.0.0",
|
29
|
+
"azure-mgmt-storage>=22.2.0,<23.0.0",
|
30
|
+
]
|
31
|
+
|
32
|
+
[project.scripts]
|
33
|
+
sourcerer = "sourcerer.presentation.app:main"
|
34
|
+
|
35
|
+
[build-system]
|
36
|
+
requires = ["setuptools >= 61.0", "setuptools-scm"]
|
37
|
+
build-backend = "setuptools.build_meta"
|
38
|
+
|
39
|
+
[dependency-groups]
|
40
|
+
dev = [
|
41
|
+
"bandit>=1.8.3",
|
42
|
+
"black>=25.1.0",
|
43
|
+
"coverage>=7.8.0",
|
44
|
+
"mkdocs-material>=9.6.12",
|
45
|
+
"pre-commit>=4.2.0",
|
46
|
+
"pylint>=3.3.6",
|
47
|
+
"pyright>=1.1.400",
|
48
|
+
"ruff>=0.11.7",
|
49
|
+
"textual-dev>=1.7.0",
|
50
|
+
]
|
51
|
+
|
52
|
+
[project.optional-dependencies]
|
53
|
+
dev = [
|
54
|
+
"bandit>=1.8.3",
|
55
|
+
"black>=25.1.0",
|
56
|
+
"coverage>=7.8.0",
|
57
|
+
"mkdocs-material>=9.6.12",
|
58
|
+
"pre-commit>=4.2.0",
|
59
|
+
"pylint>=3.3.6",
|
60
|
+
"pyright>=1.1.400",
|
61
|
+
"ruff>=0.11.7",
|
62
|
+
"textual-dev>=1.7.0",
|
63
|
+
]
|
64
|
+
|
65
|
+
[tool.coverage.run]
|
66
|
+
branch = true
|
67
|
+
source = [
|
68
|
+
"src/sourcerer/infrastructure",
|
69
|
+
]
|
70
|
+
|
71
|
+
[tool.coverage.report]
|
72
|
+
fail_under = 75
|
73
|
+
|
74
|
+
[tool.ruff]
|
75
|
+
line-length = 120
|
76
|
+
target-version = "py312"
|
77
|
+
|
78
|
+
# Enable these rules
|
79
|
+
select = [
|
80
|
+
"E", # pycodestyle
|
81
|
+
"F", # pyflakes
|
82
|
+
"I", # isort
|
83
|
+
"N", # pep8-naming
|
84
|
+
"UP", # pyupgrade
|
85
|
+
"C90", # mccabe (complexity)
|
86
|
+
"B", # flake8-bugbear
|
87
|
+
"SIM", # flake8-simplify
|
88
|
+
]
|
89
|
+
|
90
|
+
# Allow autofix for these rule sets
|
91
|
+
fixable = ["ALL"]
|
92
|
+
|
93
|
+
# Disallow autofix for these
|
94
|
+
unfixable = ["F401"] # unused imports - maybe you want to catch it manually
|
95
|
+
|
96
|
+
|
97
|
+
[tool.ruff.mccabe]
|
98
|
+
max-complexity = 10
|
@@ -1,11 +1,11 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: data-sourcerer
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
4
4
|
Summary: Sourcerer is a terminal cloud storage navigator.
|
5
5
|
Author-email: Bohdana Kuzmenko <bohdana.kuzmenko.dev@gmail.com>
|
6
6
|
License: MIT
|
7
|
-
Keywords: cloud,s3,gcp,cli,
|
8
|
-
Requires-Python: >=3.
|
7
|
+
Keywords: cloud,s3,gcp,cli,terminal,storage,textual,ui
|
8
|
+
Requires-Python: >=3.9
|
9
9
|
Description-Content-Type: text/markdown
|
10
10
|
License-File: LICENSE
|
11
11
|
Requires-Dist: boto3<2.0.0,>=1.26.0
|
@@ -16,6 +16,20 @@ Requires-Dist: humanize<5.0.0,>=4.12.1
|
|
16
16
|
Requires-Dist: sqlalchemy<3.0.0,>=2.0.38
|
17
17
|
Requires-Dist: sqlalchemy-utils<1.0.0,>=0.41.2
|
18
18
|
Requires-Dist: textual[syntax]<4.0.0,>=2.0.0
|
19
|
+
Requires-Dist: pyOpenSSL>=22.1.0; sys_platform == "linux"
|
20
|
+
Requires-Dist: azure-storage-blob<13.0.0,>=12.25.1
|
21
|
+
Requires-Dist: azure-identity<2.0.0,>=1.22.0
|
22
|
+
Requires-Dist: azure-mgmt-storage<23.0.0,>=22.2.0
|
23
|
+
Provides-Extra: dev
|
24
|
+
Requires-Dist: bandit>=1.8.3; extra == "dev"
|
25
|
+
Requires-Dist: black>=25.1.0; extra == "dev"
|
26
|
+
Requires-Dist: coverage>=7.8.0; extra == "dev"
|
27
|
+
Requires-Dist: mkdocs-material>=9.6.12; extra == "dev"
|
28
|
+
Requires-Dist: pre-commit>=4.2.0; extra == "dev"
|
29
|
+
Requires-Dist: pylint>=3.3.6; extra == "dev"
|
30
|
+
Requires-Dist: pyright>=1.1.400; extra == "dev"
|
31
|
+
Requires-Dist: ruff>=0.11.7; extra == "dev"
|
32
|
+
Requires-Dist: textual-dev>=1.7.0; extra == "dev"
|
19
33
|
Dynamic: license-file
|
20
34
|
|
21
35
|
# 🧙♂️ Sourcerer
|
@@ -41,7 +55,14 @@ engineers to view and manage files across multiple cloud providers like
|
|
41
55
|
## 🪄 Installation
|
42
56
|
|
43
57
|
```bash
|
44
|
-
pip install sourcerer
|
58
|
+
pip install data-sourcerer
|
59
|
+
```
|
60
|
+
--
|
61
|
+
|
62
|
+
## 🪄 Run
|
63
|
+
|
64
|
+
```bash
|
65
|
+
sourcerer
|
45
66
|
```
|
46
67
|
|
47
68
|
|
@@ -1,4 +1,6 @@
|
|
1
|
+
.coderabbit.yaml
|
1
2
|
.gitignore
|
3
|
+
.pre-commit-config.yaml
|
2
4
|
.pylintrc
|
3
5
|
LICENSE
|
4
6
|
README.md
|
@@ -6,9 +8,11 @@ mkdocs.yml
|
|
6
8
|
pyproject.toml
|
7
9
|
uv.lock
|
8
10
|
.github/workflows/bandit.yml
|
11
|
+
.github/workflows/deploy_docs.yml
|
9
12
|
.github/workflows/pylint.yml
|
10
13
|
.github/workflows/pyright.yml
|
11
14
|
.github/workflows/ruff.yml
|
15
|
+
.github/workflows/run_tests.yml
|
12
16
|
docs/index.md
|
13
17
|
docs/roadmap.md
|
14
18
|
docs/assets/billie-holiday.png
|
@@ -66,7 +70,10 @@ src/sourcerer/infrastructure/file_system/services.py
|
|
66
70
|
src/sourcerer/infrastructure/storage_provider/__init__.py
|
67
71
|
src/sourcerer/infrastructure/storage_provider/exceptions.py
|
68
72
|
src/sourcerer/infrastructure/storage_provider/registry.py
|
69
|
-
src/sourcerer/infrastructure/storage_provider/services.py
|
73
|
+
src/sourcerer/infrastructure/storage_provider/services/__init__.py
|
74
|
+
src/sourcerer/infrastructure/storage_provider/services/azure.py
|
75
|
+
src/sourcerer/infrastructure/storage_provider/services/gcp.py
|
76
|
+
src/sourcerer/infrastructure/storage_provider/services/s3.py
|
70
77
|
src/sourcerer/presentation/__init__.py
|
71
78
|
src/sourcerer/presentation/app.py
|
72
79
|
src/sourcerer/presentation/di_container.py
|
@@ -126,6 +133,7 @@ tests/sourcerer/__init__.py
|
|
126
133
|
tests/sourcerer/access_credentials/__init__.py
|
127
134
|
tests/sourcerer/access_credentials/test_registry.py
|
128
135
|
tests/sourcerer/access_credentials/test_repositories.py
|
136
|
+
tests/sourcerer/access_credentials/test_services.py
|
129
137
|
tests/sourcerer/db/__init__.py
|
130
138
|
tests/sourcerer/db/test_models.py
|
131
139
|
tests/sourcerer/file_system/__init__.py
|
@@ -0,0 +1,25 @@
|
|
1
|
+
boto3<2.0.0,>=1.26.0
|
2
|
+
cryptography<45.0.0,>=44.0.2
|
3
|
+
dependency-injector<5.0.0,>=4.43.0
|
4
|
+
google-cloud-storage<4.0.0,>=3.1.0
|
5
|
+
humanize<5.0.0,>=4.12.1
|
6
|
+
sqlalchemy<3.0.0,>=2.0.38
|
7
|
+
sqlalchemy-utils<1.0.0,>=0.41.2
|
8
|
+
textual[syntax]<4.0.0,>=2.0.0
|
9
|
+
azure-storage-blob<13.0.0,>=12.25.1
|
10
|
+
azure-identity<2.0.0,>=1.22.0
|
11
|
+
azure-mgmt-storage<23.0.0,>=22.2.0
|
12
|
+
|
13
|
+
[:sys_platform == "linux"]
|
14
|
+
pyOpenSSL>=22.1.0
|
15
|
+
|
16
|
+
[dev]
|
17
|
+
bandit>=1.8.3
|
18
|
+
black>=25.1.0
|
19
|
+
coverage>=7.8.0
|
20
|
+
mkdocs-material>=9.6.12
|
21
|
+
pre-commit>=4.2.0
|
22
|
+
pylint>=3.3.6
|
23
|
+
pyright>=1.1.400
|
24
|
+
ruff>=0.11.7
|
25
|
+
textual-dev>=1.7.0
|
{data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/entities.py
RENAMED
@@ -9,6 +9,7 @@ from dataclasses import dataclass
|
|
9
9
|
from datetime import datetime
|
10
10
|
|
11
11
|
import boto3
|
12
|
+
from azure.identity import ClientSecretCredential
|
12
13
|
|
13
14
|
|
14
15
|
@dataclass
|
@@ -51,3 +52,19 @@ class Boto3Credentials:
|
|
51
52
|
session: boto3.Session
|
52
53
|
endpoint_url: str | None = None
|
53
54
|
signature_version: str | None = None
|
55
|
+
|
56
|
+
|
57
|
+
@dataclass
|
58
|
+
class AzureCredentials:
|
59
|
+
"""
|
60
|
+
Represents Azure credentials.
|
61
|
+
|
62
|
+
Attributes:
|
63
|
+
credentials (ClientSecretCredential): Azure identity credential object for authentication.
|
64
|
+
subscription_id (str): The Azure subscription ID.
|
65
|
+
cloud_suffix (str): The Azure cloud storage suffix (e.g., blob.core.windows.net).
|
66
|
+
"""
|
67
|
+
|
68
|
+
credentials: ClientSecretCredential
|
69
|
+
subscription_id: str
|
70
|
+
cloud_suffix: str
|
@@ -5,7 +5,7 @@ This module defines the abstract base class for credentials repositories,
|
|
5
5
|
providing a common interface for different storage implementations.
|
6
6
|
"""
|
7
7
|
|
8
|
-
from abc import
|
8
|
+
from abc import ABCMeta, abstractmethod
|
9
9
|
|
10
10
|
from sourcerer.domain.access_credentials.entities import Credentials
|
11
11
|
|
{data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/access_credentials/services.py
RENAMED
@@ -8,7 +8,6 @@ authentication methods.
|
|
8
8
|
|
9
9
|
from abc import abstractmethod
|
10
10
|
from dataclasses import dataclass
|
11
|
-
from typing import List
|
12
11
|
|
13
12
|
from sourcerer.domain.access_credentials.repositories import BaseCredentialsRepository
|
14
13
|
|
@@ -82,10 +81,23 @@ class BaseAccessCredentialsService:
|
|
82
81
|
|
83
82
|
@classmethod
|
84
83
|
@abstractmethod
|
85
|
-
def auth_fields(cls) ->
|
84
|
+
def auth_fields(cls) -> list[AuthField]:
|
86
85
|
"""
|
87
86
|
Get list of authentication fields.
|
88
87
|
|
89
88
|
Returns:
|
90
89
|
List[AuthField]: List of authentication field definitions
|
91
90
|
"""
|
91
|
+
|
92
|
+
@classmethod
|
93
|
+
def validate_auth_fields_values(cls, auth_fields: dict) -> None:
|
94
|
+
"""
|
95
|
+
Validate authentication fields.
|
96
|
+
|
97
|
+
Args:
|
98
|
+
auth_fields (dict): Dictionary containing authentication field,
|
99
|
+
where keys are field names and values are field values
|
100
|
+
|
101
|
+
Raises:
|
102
|
+
MissingAuthFieldsError: If any required authentication fields are missing
|
103
|
+
"""
|
@@ -37,7 +37,7 @@ class BaseFileSystemService(metaclass=abc.ABCMeta):
|
|
37
37
|
str: The processed data extracted from the file.
|
38
38
|
|
39
39
|
Raises:
|
40
|
-
|
40
|
+
ReadFileError: An error occurred during the file read operation.
|
41
41
|
"""
|
42
42
|
raise NotImplementedError
|
43
43
|
|
@@ -59,6 +59,6 @@ class BaseFileSystemService(metaclass=abc.ABCMeta):
|
|
59
59
|
- directories (list[Path]): Sorted list of directory paths
|
60
60
|
|
61
61
|
Raises:
|
62
|
-
|
62
|
+
ListDirError: If the path is invalid, directory doesn't exist, or path is not a directory.
|
63
63
|
"""
|
64
64
|
raise NotImplementedError
|
{data_sourcerer-0.1.0 → data_sourcerer-0.2.0}/src/sourcerer/domain/storage_provider/entities.py
RENAMED
@@ -7,7 +7,6 @@ such as storage containers, files, folders, and permissions.
|
|
7
7
|
|
8
8
|
from dataclasses import dataclass
|
9
9
|
from datetime import datetime
|
10
|
-
from typing import List
|
11
10
|
|
12
11
|
|
13
12
|
@dataclass
|
@@ -37,7 +36,7 @@ class StoragePermissions:
|
|
37
36
|
"""
|
38
37
|
|
39
38
|
user: str
|
40
|
-
permissions:
|
39
|
+
permissions: list[str]
|
41
40
|
|
42
41
|
|
43
42
|
@dataclass
|
@@ -82,5 +81,5 @@ class StorageContent:
|
|
82
81
|
folders (List[Folder]): List of folders in the location
|
83
82
|
"""
|
84
83
|
|
85
|
-
files:
|
86
|
-
folders:
|
84
|
+
files: list[File]
|
85
|
+
folders: list[Folder]
|