protonfs 0.1.dev43__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 (61) hide show
  1. protonfs-0.1.dev43/.github/workflows/ci.yml +31 -0
  2. protonfs-0.1.dev43/.github/workflows/docs.yml +67 -0
  3. protonfs-0.1.dev43/.github/workflows/release.yml +66 -0
  4. protonfs-0.1.dev43/.gitignore +15 -0
  5. protonfs-0.1.dev43/LICENSE +133 -0
  6. protonfs-0.1.dev43/PKG-INFO +198 -0
  7. protonfs-0.1.dev43/README.md +37 -0
  8. protonfs-0.1.dev43/docs/api/index.rst +7 -0
  9. protonfs-0.1.dev43/docs/api/protonfs/modules.rst +7 -0
  10. protonfs-0.1.dev43/docs/api/protonfs/protonfs.cli.rst +7 -0
  11. protonfs-0.1.dev43/docs/api/protonfs/protonfs.rst +15 -0
  12. protonfs-0.1.dev43/docs/conf.py +38 -0
  13. protonfs-0.1.dev43/docs/getting-started/index.rst +21 -0
  14. protonfs-0.1.dev43/docs/index.rst +11 -0
  15. protonfs-0.1.dev43/pyproject.toml +61 -0
  16. protonfs-0.1.dev43/src/protonfs/__init__.py +6 -0
  17. protonfs-0.1.dev43/src/protonfs/batching.py +17 -0
  18. protonfs-0.1.dev43/src/protonfs/cli.py +226 -0
  19. protonfs-0.1.dev43/src/protonfs/commands/__init__.py +0 -0
  20. protonfs-0.1.dev43/src/protonfs/commands/auth.py +36 -0
  21. protonfs-0.1.dev43/src/protonfs/commands/ls.py +61 -0
  22. protonfs-0.1.dev43/src/protonfs/commands/pull.py +85 -0
  23. protonfs-0.1.dev43/src/protonfs/commands/push.py +94 -0
  24. protonfs-0.1.dev43/src/protonfs/commands/refresh.py +86 -0
  25. protonfs-0.1.dev43/src/protonfs/commands/restore.py +9 -0
  26. protonfs-0.1.dev43/src/protonfs/commands/rm.py +52 -0
  27. protonfs-0.1.dev43/src/protonfs/commands/setup.py +179 -0
  28. protonfs-0.1.dev43/src/protonfs/commands/status.py +17 -0
  29. protonfs-0.1.dev43/src/protonfs/config.py +67 -0
  30. protonfs-0.1.dev43/src/protonfs/context.py +28 -0
  31. protonfs-0.1.dev43/src/protonfs/diff.py +83 -0
  32. protonfs-0.1.dev43/src/protonfs/drive.py +221 -0
  33. protonfs-0.1.dev43/src/protonfs/ignore.py +43 -0
  34. protonfs-0.1.dev43/src/protonfs/index.py +55 -0
  35. protonfs-0.1.dev43/src/protonfs/install.py +288 -0
  36. protonfs-0.1.dev43/src/protonfs/lfs.py +37 -0
  37. protonfs-0.1.dev43/src/protonfs/localscan.py +54 -0
  38. protonfs-0.1.dev43/tests/commands/__init__.py +0 -0
  39. protonfs-0.1.dev43/tests/commands/test_auth.py +118 -0
  40. protonfs-0.1.dev43/tests/commands/test_cli_errors.py +60 -0
  41. protonfs-0.1.dev43/tests/commands/test_ls.py +124 -0
  42. protonfs-0.1.dev43/tests/commands/test_pull.py +194 -0
  43. protonfs-0.1.dev43/tests/commands/test_push.py +193 -0
  44. protonfs-0.1.dev43/tests/commands/test_refresh.py +143 -0
  45. protonfs-0.1.dev43/tests/commands/test_restore.py +44 -0
  46. protonfs-0.1.dev43/tests/commands/test_rm.py +232 -0
  47. protonfs-0.1.dev43/tests/commands/test_setup.py +258 -0
  48. protonfs-0.1.dev43/tests/commands/test_status.py +19 -0
  49. protonfs-0.1.dev43/tests/conftest.py +108 -0
  50. protonfs-0.1.dev43/tests/test_batching.py +30 -0
  51. protonfs-0.1.dev43/tests/test_cli.py +15 -0
  52. protonfs-0.1.dev43/tests/test_config.py +38 -0
  53. protonfs-0.1.dev43/tests/test_context.py +23 -0
  54. protonfs-0.1.dev43/tests/test_diff.py +106 -0
  55. protonfs-0.1.dev43/tests/test_drive.py +182 -0
  56. protonfs-0.1.dev43/tests/test_ignore.py +32 -0
  57. protonfs-0.1.dev43/tests/test_index.py +59 -0
  58. protonfs-0.1.dev43/tests/test_install.py +209 -0
  59. protonfs-0.1.dev43/tests/test_lfs.py +45 -0
  60. protonfs-0.1.dev43/tests/test_live_integration.py +77 -0
  61. protonfs-0.1.dev43/tests/test_localscan.py +89 -0
@@ -0,0 +1,31 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+
24
+ - name: Install package with dev dependencies
25
+ run: pip install -e .[dev]
26
+
27
+ - name: Lint
28
+ run: ruff check src tests
29
+
30
+ - name: Test
31
+ run: pytest
@@ -0,0 +1,67 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'docs/**'
8
+ - 'src/**'
9
+ - '.github/workflows/docs.yml'
10
+ workflow_dispatch:
11
+ workflow_call:
12
+
13
+ permissions:
14
+ contents: read
15
+ pages: write
16
+ id-token: write
17
+
18
+ concurrency:
19
+ group: pages
20
+ cancel-in-progress: false
21
+
22
+ jobs:
23
+ build:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ with:
28
+ fetch-depth: 0
29
+
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: '3.12'
33
+
34
+ - name: Install dependencies
35
+ run: pip install -e ".[docs]"
36
+
37
+ - name: Regenerate API stubs
38
+ run: sphinx-apidoc -f -o docs/api/protonfs/ src/protonfs/ --separate --module-first -q
39
+
40
+ - name: Build docs
41
+ run: sphinx-build --keep-going -b html docs/ docs/_build/html
42
+
43
+ - name: Upload built docs
44
+ if: github.ref == 'refs/heads/main'
45
+ uses: actions/upload-artifact@v4
46
+ with:
47
+ name: docs-html
48
+ path: docs/_build/html/
49
+ retention-days: 30
50
+
51
+ - name: Upload Pages artifact
52
+ if: github.ref == 'refs/heads/main'
53
+ uses: actions/upload-pages-artifact@v3
54
+ with:
55
+ path: docs/_build/html/
56
+
57
+ deploy:
58
+ if: github.ref == 'refs/heads/main'
59
+ needs: build
60
+ runs-on: ubuntu-latest
61
+ environment:
62
+ name: github-pages
63
+ url: ${{ steps.deployment.outputs.page_url }}
64
+ steps:
65
+ - name: Deploy to GitHub Pages
66
+ id: deployment
67
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,66 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ workflow_dispatch:
8
+
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ with:
16
+ fetch-depth: 0
17
+
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.12"
21
+
22
+ - name: Install build backend
23
+ run: pip install build
24
+
25
+ - name: Build sdist and wheel
26
+ run: python -m build
27
+
28
+ - uses: actions/upload-artifact@v4
29
+ with:
30
+ name: dist
31
+ path: dist/
32
+
33
+ publish-pypi:
34
+ needs: build
35
+ runs-on: ubuntu-latest
36
+ environment: pypi
37
+ permissions:
38
+ id-token: write
39
+ steps:
40
+ - uses: actions/checkout@v4 # ← Add this
41
+
42
+ - uses: actions/download-artifact@v4
43
+ with:
44
+ name: dist
45
+ path: dist/
46
+
47
+ - name: Publish to PyPI
48
+ uses: pypa/gh-action-pypi-publish@release/v1
49
+
50
+ github-release:
51
+ needs: build
52
+ runs-on: ubuntu-latest
53
+ permissions:
54
+ contents: write
55
+ steps:
56
+ - uses: actions/checkout@v4 # ← Add this
57
+
58
+ - uses: actions/download-artifact@v4
59
+ with:
60
+ name: dist
61
+ path: dist/
62
+
63
+ - name: Create GitHub release
64
+ env:
65
+ GH_TOKEN: ${{ github.token }}
66
+ run: gh release create "${{ github.ref_name }}" dist/* --generate-notes
@@ -0,0 +1,15 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .eggs/
5
+ build/
6
+ dist/
7
+ .venv/
8
+ venv/
9
+ .pytest_cache/
10
+ .ruff_cache/
11
+ .coverage
12
+ htmlcov/
13
+ .mypy_cache/
14
+ docs/_build/
15
+ .worktrees/
@@ -0,0 +1,133 @@
1
+ PolyForm Noncommercial License 1.0.0
2
+
3
+ <https://polyformproject.org/licenses/noncommercial/1.0.0>
4
+
5
+ Required Notice: Copyright Will Roscoe (https://github.com/will-roscoe)
6
+
7
+ ## Acceptance
8
+
9
+ In order to get any license under these terms, you must agree
10
+ to them as both strict obligations and conditions to all
11
+ your licenses.
12
+
13
+ ## Copyright License
14
+
15
+ The licensor grants you a copyright license for the
16
+ software to do everything you might do with the software
17
+ that would otherwise infringe the licensor's copyright
18
+ in it for any permitted purpose. However, you may
19
+ only distribute the software according to Distribution
20
+ License and make changes or new works
21
+ based on the software according to Changes and New Works
22
+ License.
23
+
24
+ ## Distribution License
25
+
26
+ The licensor grants you an additional copyright license
27
+ to distribute copies of the software. Your license
28
+ to distribute covers distributing the software with
29
+ changes and new works permitted by Changes and New Works
30
+ License.
31
+
32
+ ## Notices
33
+
34
+ You must ensure that anyone who gets a copy of any part of
35
+ the software from you also gets a copy of these terms or the
36
+ URL for them above, as well as copies of any plain-text lines
37
+ beginning with "Required Notice:" that the licensor provided
38
+ with the software. For example:
39
+
40
+ Required Notice: Copyright Will Roscoe (https://github.com/will-roscoe)
41
+
42
+ ## Changes and New Works License
43
+
44
+ The licensor grants you an additional copyright license to
45
+ make changes and new works based on the software for any
46
+ permitted purpose.
47
+
48
+ ## Patent License
49
+
50
+ The licensor grants you a patent license for the software that
51
+ covers patent claims the licensor can license, or becomes able
52
+ to license, that you would infringe by using the software.
53
+
54
+ ## Noncommercial Purposes
55
+
56
+ Any noncommercial purpose is a permitted purpose.
57
+
58
+ ## Personal Uses
59
+
60
+ Personal use for research, experiment, and testing for
61
+ the benefit of public knowledge, personal study, private
62
+ entertainment, hobby projects, amateur pursuits, or religious
63
+ observance, without any anticipated commercial application,
64
+ is use for a permitted purpose.
65
+
66
+ ## Noncommercial Organizations
67
+
68
+ Use by any charitable organization, educational institution,
69
+ public research organization, public safety or health
70
+ organization, environmental protection organization,
71
+ or government institution is use for a permitted purpose
72
+ regardless of the source of funding or obligations resulting
73
+ from the funding.
74
+
75
+ ## Fair Use
76
+
77
+ You may have "fair use" rights for the software under the
78
+ law. These terms do not limit them.
79
+
80
+ ## No Other Rights
81
+
82
+ These terms do not allow you to sublicense or transfer any of
83
+ your licenses to anyone else, or prevent the licensor from
84
+ granting licenses to anyone else. These terms do not imply
85
+ any other licenses.
86
+
87
+ ## Patent Defense
88
+
89
+ If you make any written claim that the software infringes or
90
+ contributes to infringement of any patent, your patent license
91
+ for the software granted under these terms ends immediately. If
92
+ your company makes such a claim, your patent license ends
93
+ immediately for work on behalf of your company.
94
+
95
+ ## Violations
96
+
97
+ The first time you are notified in writing that you have
98
+ violated any of these terms, or done anything with the software
99
+ not covered by your licenses, your licenses can nonetheless
100
+ continue if you come into full compliance with these terms,
101
+ and take practical steps to correct past violations, within
102
+ 32 days of receiving notice. Otherwise, all your licenses
103
+ end immediately.
104
+
105
+ ## No Liability
106
+
107
+ As far as the law allows, the software comes as is, without
108
+ any warranty or condition, and the licensor will not be liable
109
+ to you for any damages arising out of these terms or the use
110
+ or nature of the software, under any kind of legal claim.
111
+
112
+ ## Definitions
113
+
114
+ The licensor is the individual or entity offering these
115
+ terms, and the software is the software the licensor makes
116
+ available under these terms.
117
+
118
+ You refers to the individual or entity agreeing to these
119
+ terms.
120
+
121
+ Your company is any legal entity, sole proprietorship,
122
+ or other kind of organization that you work for, plus all
123
+ organizations that have control over, are under the control of,
124
+ or are under common control with that organization. Control
125
+ means ownership of substantially all the assets of an entity,
126
+ or the power to direct its management and policies by vote,
127
+ contract, or otherwise. Control can be direct or indirect.
128
+
129
+ Your licenses are all the licenses granted to you for the
130
+ software under these terms.
131
+
132
+ Use means anything you do with the software requiring one
133
+ of your licenses.
@@ -0,0 +1,198 @@
1
+ Metadata-Version: 2.4
2
+ Name: protonfs
3
+ Version: 0.1.dev43
4
+ Summary: Sync a local directory tree with Proton Drive via the official Proton Drive CLI, with conflict-aware push/pull and a local sync manifest.
5
+ Project-URL: Homepage, https://github.com/will-roscoe/protonfs
6
+ Project-URL: Issues, https://github.com/will-roscoe/protonfs/issues
7
+ Author: Will Roscoe
8
+ License: PolyForm Noncommercial License 1.0.0
9
+
10
+ <https://polyformproject.org/licenses/noncommercial/1.0.0>
11
+
12
+ Required Notice: Copyright Will Roscoe (https://github.com/will-roscoe)
13
+
14
+ ## Acceptance
15
+
16
+ In order to get any license under these terms, you must agree
17
+ to them as both strict obligations and conditions to all
18
+ your licenses.
19
+
20
+ ## Copyright License
21
+
22
+ The licensor grants you a copyright license for the
23
+ software to do everything you might do with the software
24
+ that would otherwise infringe the licensor's copyright
25
+ in it for any permitted purpose. However, you may
26
+ only distribute the software according to Distribution
27
+ License and make changes or new works
28
+ based on the software according to Changes and New Works
29
+ License.
30
+
31
+ ## Distribution License
32
+
33
+ The licensor grants you an additional copyright license
34
+ to distribute copies of the software. Your license
35
+ to distribute covers distributing the software with
36
+ changes and new works permitted by Changes and New Works
37
+ License.
38
+
39
+ ## Notices
40
+
41
+ You must ensure that anyone who gets a copy of any part of
42
+ the software from you also gets a copy of these terms or the
43
+ URL for them above, as well as copies of any plain-text lines
44
+ beginning with "Required Notice:" that the licensor provided
45
+ with the software. For example:
46
+
47
+ Required Notice: Copyright Will Roscoe (https://github.com/will-roscoe)
48
+
49
+ ## Changes and New Works License
50
+
51
+ The licensor grants you an additional copyright license to
52
+ make changes and new works based on the software for any
53
+ permitted purpose.
54
+
55
+ ## Patent License
56
+
57
+ The licensor grants you a patent license for the software that
58
+ covers patent claims the licensor can license, or becomes able
59
+ to license, that you would infringe by using the software.
60
+
61
+ ## Noncommercial Purposes
62
+
63
+ Any noncommercial purpose is a permitted purpose.
64
+
65
+ ## Personal Uses
66
+
67
+ Personal use for research, experiment, and testing for
68
+ the benefit of public knowledge, personal study, private
69
+ entertainment, hobby projects, amateur pursuits, or religious
70
+ observance, without any anticipated commercial application,
71
+ is use for a permitted purpose.
72
+
73
+ ## Noncommercial Organizations
74
+
75
+ Use by any charitable organization, educational institution,
76
+ public research organization, public safety or health
77
+ organization, environmental protection organization,
78
+ or government institution is use for a permitted purpose
79
+ regardless of the source of funding or obligations resulting
80
+ from the funding.
81
+
82
+ ## Fair Use
83
+
84
+ You may have "fair use" rights for the software under the
85
+ law. These terms do not limit them.
86
+
87
+ ## No Other Rights
88
+
89
+ These terms do not allow you to sublicense or transfer any of
90
+ your licenses to anyone else, or prevent the licensor from
91
+ granting licenses to anyone else. These terms do not imply
92
+ any other licenses.
93
+
94
+ ## Patent Defense
95
+
96
+ If you make any written claim that the software infringes or
97
+ contributes to infringement of any patent, your patent license
98
+ for the software granted under these terms ends immediately. If
99
+ your company makes such a claim, your patent license ends
100
+ immediately for work on behalf of your company.
101
+
102
+ ## Violations
103
+
104
+ The first time you are notified in writing that you have
105
+ violated any of these terms, or done anything with the software
106
+ not covered by your licenses, your licenses can nonetheless
107
+ continue if you come into full compliance with these terms,
108
+ and take practical steps to correct past violations, within
109
+ 32 days of receiving notice. Otherwise, all your licenses
110
+ end immediately.
111
+
112
+ ## No Liability
113
+
114
+ As far as the law allows, the software comes as is, without
115
+ any warranty or condition, and the licensor will not be liable
116
+ to you for any damages arising out of these terms or the use
117
+ or nature of the software, under any kind of legal claim.
118
+
119
+ ## Definitions
120
+
121
+ The licensor is the individual or entity offering these
122
+ terms, and the software is the software the licensor makes
123
+ available under these terms.
124
+
125
+ You refers to the individual or entity agreeing to these
126
+ terms.
127
+
128
+ Your company is any legal entity, sole proprietorship,
129
+ or other kind of organization that you work for, plus all
130
+ organizations that have control over, are under the control of,
131
+ or are under common control with that organization. Control
132
+ means ownership of substantially all the assets of an entity,
133
+ or the power to direct its management and policies by vote,
134
+ contract, or otherwise. Control can be direct or indirect.
135
+
136
+ Your licenses are all the licenses granted to you for the
137
+ software under these terms.
138
+
139
+ Use means anything you do with the software requiring one
140
+ of your licenses.
141
+ License-File: LICENSE
142
+ Classifier: Environment :: Console
143
+ Classifier: License :: Other/Proprietary License
144
+ Classifier: Operating System :: MacOS
145
+ Classifier: Operating System :: POSIX :: Linux
146
+ Classifier: Programming Language :: Python :: 3
147
+ Requires-Python: >=3.9
148
+ Requires-Dist: click>=8.1
149
+ Requires-Dist: pathspec>=0.12
150
+ Requires-Dist: rich>=13.0
151
+ Provides-Extra: dev
152
+ Requires-Dist: pytest>=8.0; extra == 'dev'
153
+ Requires-Dist: ruff>=0.6; extra == 'dev'
154
+ Provides-Extra: docs
155
+ Requires-Dist: furo; extra == 'docs'
156
+ Requires-Dist: sphinx; extra == 'docs'
157
+ Requires-Dist: sphinx-autobuild; extra == 'docs'
158
+ Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
159
+ Requires-Dist: sphinx-copybutton; extra == 'docs'
160
+ Description-Content-Type: text/markdown
161
+
162
+ # protonfs
163
+
164
+ Sync a local directory tree with [Proton Drive](https://proton.me/drive), via
165
+ the official [Proton Drive CLI](https://github.com/ProtonDriveApps/sdk/tree/main/cli),
166
+ with conflict-aware push/pull and a local sync manifest.
167
+
168
+ Originally built to replace git-lfs as the storage layer for large,
169
+ write-once simulation output — data that doesn't need version history, just
170
+ somewhere durable to live and a way to fetch it back on demand.
171
+
172
+ The command surface (`setup`, `status`, `ls`, `push`, `pull`, `rm`, `restore`,
173
+ `refresh`, `install-drive`, `auth`) is implemented — see `src/protonfs/cli.py`.
174
+
175
+ ## Requirements
176
+
177
+ - Python >= 3.9
178
+ - The [`proton-drive`](https://proton.me/download/drive/cli/index.html) CLI
179
+ binary — install it with `protonfs install-drive` (below), or supply your own
180
+ on `PATH` / via `PROTONFS_DRIVE_BIN`.
181
+
182
+ ## Install
183
+
184
+ ```bash
185
+ pip install protonfs
186
+ protonfs install-drive # downloads + SHA-512-verifies the official proton-drive binary
187
+ protonfs auth login # opens a URL to authenticate (passthrough to proton-drive)
188
+ ```
189
+
190
+ `install-drive` detects your platform, requires AVX2 for the linux-x64 prebuilt
191
+ (with an instructive fallback otherwise), and never installs a binary whose
192
+ SHA-512 does not match the pinned checksum. Override the version with
193
+ `PROTONFS_DRIVE_VERSION` and the expected checksum with `PROTONFS_DRIVE_SHA512`.
194
+
195
+ ## License
196
+
197
+ [PolyForm Noncommercial 1.0.0](LICENSE) — free for noncommercial use with
198
+ attribution; contact the author for commercial use.
@@ -0,0 +1,37 @@
1
+ # protonfs
2
+
3
+ Sync a local directory tree with [Proton Drive](https://proton.me/drive), via
4
+ the official [Proton Drive CLI](https://github.com/ProtonDriveApps/sdk/tree/main/cli),
5
+ with conflict-aware push/pull and a local sync manifest.
6
+
7
+ Originally built to replace git-lfs as the storage layer for large,
8
+ write-once simulation output — data that doesn't need version history, just
9
+ somewhere durable to live and a way to fetch it back on demand.
10
+
11
+ The command surface (`setup`, `status`, `ls`, `push`, `pull`, `rm`, `restore`,
12
+ `refresh`, `install-drive`, `auth`) is implemented — see `src/protonfs/cli.py`.
13
+
14
+ ## Requirements
15
+
16
+ - Python >= 3.9
17
+ - The [`proton-drive`](https://proton.me/download/drive/cli/index.html) CLI
18
+ binary — install it with `protonfs install-drive` (below), or supply your own
19
+ on `PATH` / via `PROTONFS_DRIVE_BIN`.
20
+
21
+ ## Install
22
+
23
+ ```bash
24
+ pip install protonfs
25
+ protonfs install-drive # downloads + SHA-512-verifies the official proton-drive binary
26
+ protonfs auth login # opens a URL to authenticate (passthrough to proton-drive)
27
+ ```
28
+
29
+ `install-drive` detects your platform, requires AVX2 for the linux-x64 prebuilt
30
+ (with an instructive fallback otherwise), and never installs a binary whose
31
+ SHA-512 does not match the pinned checksum. Override the version with
32
+ `PROTONFS_DRIVE_VERSION` and the expected checksum with `PROTONFS_DRIVE_SHA512`.
33
+
34
+ ## License
35
+
36
+ [PolyForm Noncommercial 1.0.0](LICENSE) — free for noncommercial use with
37
+ attribution; contact the author for commercial use.
@@ -0,0 +1,7 @@
1
+ API Reference
2
+ =============
3
+
4
+ .. toctree::
5
+ :maxdepth: 2
6
+
7
+ protonfs/modules
@@ -0,0 +1,7 @@
1
+ protonfs
2
+ ========
3
+
4
+ .. toctree::
5
+ :maxdepth: 4
6
+
7
+ protonfs
@@ -0,0 +1,7 @@
1
+ protonfs.cli module
2
+ ===================
3
+
4
+ .. automodule:: protonfs.cli
5
+ :members:
6
+ :show-inheritance:
7
+ :undoc-members:
@@ -0,0 +1,15 @@
1
+ protonfs package
2
+ ================
3
+
4
+ .. automodule:: protonfs
5
+ :members:
6
+ :show-inheritance:
7
+ :undoc-members:
8
+
9
+ Submodules
10
+ ----------
11
+
12
+ .. toctree::
13
+ :maxdepth: 4
14
+
15
+ protonfs.cli
@@ -0,0 +1,38 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+ import os
3
+ import sys
4
+
5
+ # -- Path setup ---------------------------------------------------------------
6
+ sys.path.insert(0, os.path.abspath("../src"))
7
+
8
+ # -- Project information ------------------------------------------------------
9
+ project = "protonfs"
10
+ author = "Will Roscoe"
11
+ copyright = "2026, Will Roscoe"
12
+ release = ""
13
+
14
+ # -- General configuration ----------------------------------------------------
15
+ extensions = [
16
+ # Core
17
+ "sphinx.ext.intersphinx",
18
+ "sphinx.ext.viewcode",
19
+ "sphinx.ext.napoleon", # NumPy/Google docstring styles
20
+ # Python
21
+ "sphinx.ext.autodoc",
22
+ "sphinx_autodoc_typehints",
23
+ "sphinx_copybutton",
24
+ ]
25
+
26
+ templates_path = ["_templates"]
27
+ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
28
+ source_suffix = ".rst"
29
+ master_doc = "index"
30
+
31
+ # -- Options for HTML output --------------------------------------------------
32
+ html_theme = "furo"
33
+ html_static_path = ["_static"]
34
+
35
+ # -- Intersphinx --------------------------------------------------------------
36
+ intersphinx_mapping = {
37
+ "python": ("https://docs.python.org/3", None),
38
+ }
@@ -0,0 +1,21 @@
1
+ Getting Started
2
+ ===============
3
+
4
+ .. contents:: Contents
5
+ :local:
6
+ :depth: 1
7
+
8
+ Installation
9
+ ------------
10
+
11
+ .. code-block:: bash
12
+
13
+ pip install protonfs
14
+
15
+ Also requires the `proton-drive <https://proton.me/download/drive/cli/index.html>`_
16
+ CLI on ``PATH``, authenticated via ``proton-drive auth login``.
17
+
18
+ Quick Start
19
+ -----------
20
+
21
+ *Add a minimal usage example here once the command surface is implemented.*
@@ -0,0 +1,11 @@
1
+ protonfs
2
+ ========
3
+
4
+ Sync a local directory tree with Proton Drive, with conflict-aware push/pull
5
+ and a local sync manifest.
6
+
7
+ .. toctree::
8
+ :maxdepth: 1
9
+
10
+ getting-started/index
11
+ api/index