pathapi-uri 0.1.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.
Files changed (48) hide show
  1. pathapi_uri-0.1.0.dist-info/METADATA +259 -0
  2. pathapi_uri-0.1.0.dist-info/RECORD +48 -0
  3. pathapi_uri-0.1.0.dist-info/WHEEL +4 -0
  4. pathapi_uri-0.1.0.dist-info/entry_points.txt +17 -0
  5. pathapi_uri-0.1.0.dist-info/licenses/LICENSE +21 -0
  6. uripath/AGENTS.md +1094 -0
  7. uripath/README.md +213 -0
  8. uripath/__init__.py +27 -0
  9. uripath/__main__.py +7 -0
  10. uripath/_pathtext.py +32 -0
  11. uripath/_rfc3986.py +67 -0
  12. uripath/_transfer.py +108 -0
  13. uripath/_uri.py +1007 -0
  14. uripath/_version.py +11 -0
  15. uripath/cli/__init__.py +54 -0
  16. uripath/cli/_common.py +48 -0
  17. uripath/cli/_root.py +70 -0
  18. uripath/cli/cp.py +61 -0
  19. uripath/cli/read.py +22 -0
  20. uripath/cli/rm.py +38 -0
  21. uripath/cli/sync.py +78 -0
  22. uripath/cli/write.py +49 -0
  23. uripath/exceptions.py +38 -0
  24. uripath/py.typed +1 -0
  25. uripath/query.py +240 -0
  26. uripath/schemes/__init__.py +120 -0
  27. uripath/schemes/_archive.py +338 -0
  28. uripath/schemes/_data.py +99 -0
  29. uripath/schemes/_dav.py +459 -0
  30. uripath/schemes/_delegate.py +127 -0
  31. uripath/schemes/_elsewhere.py +102 -0
  32. uripath/schemes/_file.py +186 -0
  33. uripath/schemes/_ftp.py +200 -0
  34. uripath/schemes/_http/__init__.py +4 -0
  35. uripath/schemes/_http/_backend.py +132 -0
  36. uripath/schemes/_http/_headers.py +8 -0
  37. uripath/schemes/_http/_listing.py +403 -0
  38. uripath/schemes/_http/_path.py +371 -0
  39. uripath/schemes/_http/_settings.py +6 -0
  40. uripath/schemes/_http/_streams.py +230 -0
  41. uripath/schemes/_httpdate.py +48 -0
  42. uripath/schemes/_path.py +629 -0
  43. uripath/schemes/_registry.py +134 -0
  44. uripath/source/__init__.py +20 -0
  45. uripath/source/_compose.py +212 -0
  46. uripath/source/_locality.py +44 -0
  47. uripath/source/_parse.py +183 -0
  48. uripath/source/_source.py +239 -0
@@ -0,0 +1,259 @@
1
+ Metadata-Version: 2.5
2
+ Name: pathapi-uri
3
+ Version: 0.1.0
4
+ Summary: pathlib-style paths for URIs: file:, data:, ftp:, zip:, tar:, http:, dav:
5
+ Project-URL: Homepage, https://github.com/jose-pr/uripath/
6
+ Project-URL: Documentation, https://jose-pr.github.io/uripath/
7
+ Project-URL: Issues, https://github.com/jose-pr/uripath/issues
8
+ Author: Jose A
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Typing :: Typed
21
+ Requires-Python: >=3.9
22
+ Requires-Dist: netimps<0.5,>=0.4.0
23
+ Requires-Dist: pathapi<0.2,>=0.1.0
24
+ Provides-Extra: cli
25
+ Requires-Dist: duho<0.8,>=0.7.3; extra == 'cli'
26
+ Provides-Extra: dev
27
+ Requires-Dist: black; extra == 'dev'
28
+ Requires-Dist: build; extra == 'dev'
29
+ Requires-Dist: cheroot; extra == 'dev'
30
+ Requires-Dist: cryptography; extra == 'dev'
31
+ Requires-Dist: duho<0.8,>=0.7.3; extra == 'dev'
32
+ Requires-Dist: hatchling; extra == 'dev'
33
+ Requires-Dist: hypothesis; extra == 'dev'
34
+ Requires-Dist: pyftpdlib; extra == 'dev'
35
+ Requires-Dist: pytest; extra == 'dev'
36
+ Requires-Dist: pytest-cov; extra == 'dev'
37
+ Requires-Dist: requests; extra == 'dev'
38
+ Requires-Dist: twine; extra == 'dev'
39
+ Requires-Dist: uritools<7,>=5.0; extra == 'dev'
40
+ Requires-Dist: wsgidav; extra == 'dev'
41
+ Provides-Extra: docs
42
+ Requires-Dist: mkdocs; extra == 'docs'
43
+ Requires-Dist: mkdocs-material; extra == 'docs'
44
+ Requires-Dist: mkdocstrings[python]; extra == 'docs'
45
+ Description-Content-Type: text/markdown
46
+
47
+ # uripath
48
+
49
+ [![Version](https://img.shields.io/pypi/v/pathapi-uri.svg)](https://pypi.org/project/pathapi-uri/)
50
+ [![Python versions](https://img.shields.io/pypi/pyversions/pathapi-uri.svg)](https://pypi.org/project/pathapi-uri/)
51
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/jose-pr/uripath/blob/main/LICENSE)
52
+ [![Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://jose-pr.github.io/uripath/)
53
+ [![CI](https://img.shields.io/github/actions/workflow/status/jose-pr/uripath/test.yml)](https://github.com/jose-pr/uripath/actions/workflows/test.yml)
54
+
55
+ Installed as `pathapi-uri` from PyPI; imported, and run as a command, as `uripath`.
56
+
57
+ **One `pathlib`-style API for URIs.** `URIPath("https://...")`, `URIPath("zip:...")`
58
+ and `URIPath("ftp://...")` return the class registered for the scheme, and each
59
+ has the method names, signatures and exception types of `pathlib.Path`: write
60
+ code once and run it against a local file, an archive member, an FTP or WebDAV
61
+ server, a web directory or, through the `repopath` distribution, a GitHub or GitLab
62
+ repository. It builds on
63
+ [`pathapi`](https://github.com/jose-pr/pathapi) and is documented at
64
+ <https://jose-pr.github.io/uripath/>.
65
+
66
+ ## Features
67
+
68
+ | Scheme (class) | Needs | Read | Write | List | Stat | mkdir | Delete | rename |
69
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- |
70
+ | `file:` (`FileURIPath`) | nothing | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
71
+ | `data:` (`DataURIPath`, RFC 2397) | nothing | Yes | No | No | Yes | No | No | No |
72
+ | `zip:` (`ZipURIPath`) | nothing | Yes | Local `file:` archive only | Yes | Yes | Local archive only | Local archive only | Local archive only |
73
+ | `tar:` (`TarURIPath`, incl. gz/bz2/xz) | nothing | Yes | No | Yes | Yes | No | No | No |
74
+ | `archive:`, `archive+zip:`, `archive+tar:` | nothing | As `zip:`/`tar:` for the detected or pinned format | | | | | | |
75
+ | `ftp:` / `ftps:` (`FTPURIPath`) | nothing | Yes | Yes | Yes (MLSD, NLST fallback) | Yes | Yes | Yes | Yes |
76
+ | `http:` / `https:` (`HTTPURIPath`) | nothing | Yes | Yes (PUT, configurable) | Yes (HTML index) | Yes | No | Yes (DELETE) | No |
77
+ | `dav:` / `davs:` (`DAVURIPath`, WebDAV) | nothing | Yes | Yes (no append) | Yes (PROPFIND) | Yes | Yes | Yes | Yes |
78
+ | `sftp:` | `sftppath[paramiko]` or `[asyncssh]` | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
79
+ | `s3:` | `objpath[s3]` | Yes | Yes (no append) | Yes (prefixes) | Yes | Yes (marker object) | Yes | Yes (same bucket) |
80
+ | `gs:` | `objpath[gs]` | Yes | Yes (no append) | Yes (prefixes) | Yes | Yes (marker object) | Yes | Yes (same bucket) |
81
+ | `az:` | `objpath[az]` | Yes | Yes (no append) | Yes (prefixes) | Yes | Yes (marker blob) | Yes | Yes (same container) |
82
+ | `repo:` | `repopath` | Yes | No | Yes | Yes | No | No | No |
83
+ | `github:` | `repopath` | Yes | No | Yes | Yes | No | No | No |
84
+ | `gitlab:` | `repopath` | Yes | No | Yes | Yes | No | No | No |
85
+
86
+ The last seven rows are other distributions: a path of one of those schemes
87
+ builds, joins and prints without it, and its first use of the server raises an
88
+ `ImportError` that names what to install. The `requests` HTTP transport
89
+ (`with_session()`, `~/.netrc`, SOCKS proxies) is the distribution
90
+ `pathapi-requests`: once it is installed, `with_session()` and
91
+ `PATHAPI_HTTP_TRANSPORT=requests` use it, with nothing to configure.
92
+
93
+ Every scheme gets `glob()`, `walk()`, `copy()`/`move()`, `rm()` and `PathSyncer`
94
+ from the `pathapi` base classes. The per-scheme notes (timeouts,
95
+ certificate verification, authentication, limits) are in
96
+ [Schemes](https://jose-pr.github.io/uripath/guides/schemes/).
97
+
98
+ - **Pure URI algebra**: `URI` parses, joins and compares URIs with no I/O and
99
+ no scheme class needed; `Source` and `Query` are its authority and query.
100
+ - **HTTP on the standard library**: `http:` and `dav:` send through a
101
+ replaceable transport built on `http.client`.
102
+ - **Extensible**: subclass `URIPath` and declare `__SCHEMES` for a new scheme,
103
+ or register it through a `uripath.schemes` entry point.
104
+ - **`uripath` command**: `read`, `write`, `cp`, `rm` and `sync` across local
105
+ paths and URIs, with `-` for stdin/stdout (`pip install "pathapi-uri[cli]"`).
106
+
107
+ ## Installation
108
+
109
+ ```bash
110
+ pip install pathapi-uri
111
+ ```
112
+
113
+ Requires `pathapi` and `netimps`, which pip installs with it.
114
+
115
+ | Install | Adds |
116
+ | --- | --- |
117
+ | `pip install pathapi-uri` | every scheme whose Needs is nothing in the table above |
118
+ | `pip install "pathapi-uri[cli]"` | the `uripath` command (its only extra) |
119
+ | `pip install "sftppath[paramiko]"` or `[asyncssh]` | `sftp:` |
120
+ | `pip install "objpath[s3]"`, `[gs]` or `[az]` | `s3:`, `gs:`, `az:` |
121
+ | `pip install pathapi-requests` | the `requests` HTTP transport |
122
+
123
+ ## Quick start
124
+
125
+ **Any URI**: `URIPath` returns the class registered for the scheme:
126
+
127
+ ```python
128
+ from uripath import URIPath
129
+
130
+ report = URIPath("file:data/report.txt") # FileURIPath
131
+ report.parent.mkdir(parents=True, exist_ok=True)
132
+ report.write_text("hello")
133
+ print(report.read_text())
134
+ print(URIPath("data:text/plain;base64,aGVsbG8=").read_text()) # DataURIPath
135
+ ```
136
+
137
+ **Archive members**: `<scheme>:<archive-uri>!/<member>`, where the archive
138
+ itself is any URI (`file:`, `http:`, `ftp:`, ...):
139
+
140
+ ```python
141
+ import zipfile
142
+ from uripath import URIPath
143
+
144
+ with zipfile.ZipFile("backup.zip", "w") as archive:
145
+ archive.writestr("etc/config.ini", "[main]\n")
146
+
147
+ member = URIPath("zip:file:backup.zip!/etc/config.ini")
148
+ print(member.read_text())
149
+ print([child.name for child in member.parent.iterdir()])
150
+ ```
151
+
152
+ **Remote paths** use the same API:
153
+
154
+ <!-- example: skip: reads from remote hosts -->
155
+ ```python
156
+ from uripath import URIPath
157
+
158
+ for child in URIPath("https://example.com/data/").iterdir():
159
+ print(child.name, child.stat().st_size)
160
+
161
+ print(URIPath("ftp://user@host/pub/README").read_text())
162
+ ```
163
+
164
+ **Copy and sync across schemes**, with the `pathapi` syncer:
165
+
166
+ ```python
167
+ from pathapi.sync import PathSyncer
168
+ from uripath import URIPath
169
+
170
+ source = URIPath("file:site")
171
+ (source / "css").mkdir(parents=True)
172
+ (source / "index.html").write_text("<h1>hi</h1>")
173
+
174
+ PathSyncer(remove_missing=True).sync(source, URIPath("file:site-copy"))
175
+ print(sorted(p.name for p in URIPath("file:site-copy").iterdir()))
176
+ ```
177
+
178
+ ## Command line
179
+
180
+ `uripath` reads, writes, copies, removes and syncs local paths and URIs, with
181
+ `-` for stdin or stdout. It is built on `duho` and needs the `cli` extra,
182
+ `pip install "pathapi-uri[cli]"`; without it the command says so and exits with
183
+ status 1. These commands run as written in an empty directory:
184
+
185
+ ```bash
186
+ mkdir site
187
+ uripath write site/index.html "<h1>hi</h1>"
188
+ uripath read site/index.html
189
+ uripath cp site/index.html site/copy.html
190
+ uripath sync --dry-run --remove-missing site site-copy
191
+ uripath sync site site-copy
192
+ uripath rm --recursive site-copy
193
+ ```
194
+
195
+ Either side can be a URI instead:
196
+
197
+ <!-- example: skip: needs an FTP host and a web server -->
198
+ ```bash
199
+ uripath cp report.txt ftp://host/tmp/report.txt
200
+ uripath sync --dry-run --remove-missing site/ ftp://host/site/
201
+ ```
202
+
203
+ The exit status is 0 on success, 1 when the operation failed, 2 for a wrong
204
+ invocation, 130 on Ctrl-C and 141 when the reader of stdout went away. Every
205
+ flag is described in the
206
+ [CLI guide](https://jose-pr.github.io/uripath/guides/cli/), and `uripath` can
207
+ be served to an agent as a set of tools.
208
+
209
+ ## API overview
210
+
211
+ | Module | Purpose |
212
+ | --- | --- |
213
+ | `uripath` | `URI`, `URIPath`, `URILike`, `Source`, `Query`, `QueryLike`, the functions `as_path` and `copy_stream`, the errors `URIPathError`, `URISyntaxError` and `UnsupportedSchemeError`, and `__version__` |
214
+ | `uripath.source` | `Source` (scheme, userinfo, host, port), `same_authority` and the helpers that read and compose a URI's text |
215
+ | `uripath.query` | `Query`, an immutable query value, and `QueryLike` |
216
+ | `uripath.exceptions` | The errors above |
217
+ | `uripath.schemes` | The contract and registry of schemes, `DerivedBackend`, `DelegatingURIPath`, and every built-in scheme's classes: `FileURIPath`, `DataURIPath`, `ZipURIPath`, `TarURIPath`, `ArchiveURIPath`, `FTPURIPath`, `HTTPURIPath`, `DAVURIPath` and their backends |
218
+
219
+ The full reference is on the [documentation site](https://jose-pr.github.io/uripath/);
220
+ an agent-oriented API summary ships inside the package as `uripath/AGENTS.md`.
221
+
222
+ ## Extending
223
+
224
+ Subclass `URIPath` and declare `__SCHEMES` for a new URI scheme; it is
225
+ dispatched as soon as its module is imported, or through a `uripath.schemes`
226
+ entry point. A scheme name belongs to one class: a second claim raises unless
227
+ the class statement says `replace=True`, and `URIPath.schemes()` /
228
+ `URIPath.scheme_class(name)` read the registry. Worked examples:
229
+ [Extending](https://jose-pr.github.io/uripath/guides/extending/). The pytest
230
+ contracts that verify a scheme are in `pathapi.testing`.
231
+
232
+ ## Development
233
+
234
+ ```bash
235
+ pip install -e ".[dev]"
236
+ python -m pytest -q -rs
237
+ ```
238
+
239
+ Tests for a server that is not installed are skipped, so check the skip list
240
+ (`-rs`). Contributor notes (virtual environments, formatting, CI, releases) are
241
+ in the repository's
242
+ [`AGENTS.md`](https://github.com/jose-pr/uripath/blob/main/AGENTS.md). To
243
+ preview the documentation: `pip install -e ".[docs]"` then `mkdocs serve`.
244
+
245
+ Changes are recorded in the
246
+ [changelog](https://github.com/jose-pr/uripath/blob/main/CHANGELOG.md).
247
+
248
+ ### Releasing
249
+
250
+ This project follows [Semantic Versioning](https://semver.org/) and keeps a
251
+ [`CHANGELOG.md`](https://github.com/jose-pr/uripath/blob/main/CHANGELOG.md). Pushing a tag matching `v*` triggers the release
252
+ workflow: test gate → build (checking the tag names the version built) → a strict
253
+ docs build as a gate → GitHub release → publish. The release workflow never deploys
254
+ the docs site itself: for a final release its last job dispatches the docs workflow
255
+ at the tag, which owns every Pages deploy.
256
+
257
+ ## License
258
+
259
+ MIT — see [LICENSE](https://github.com/jose-pr/uripath/blob/main/LICENSE).
@@ -0,0 +1,48 @@
1
+ uripath/AGENTS.md,sha256=Siu2tupwH9zjC786iGrNqd7Ua_3CCWQV7ewarWpWgXw,60774
2
+ uripath/__init__.py,sha256=MyRZR1EkKrzeIIFrog6kWdygGwz60b9td7FRdgjOJKQ,598
3
+ uripath/__main__.py,sha256=WlXs7327vTmE4SW9MiExqWfdbyBrqgK3hG8w0yDsrRw,162
4
+ uripath/_pathtext.py,sha256=mEauPI4JikCIeA7LnriYv-t5k737T79msPhGaiYSvx8,1150
5
+ uripath/_rfc3986.py,sha256=r7pEImk9mk58K-8j0IXbmZ4iGBn0C5_tFaXtDbw5vnw,2445
6
+ uripath/_transfer.py,sha256=6bZtY7Mkn3G4eWPVInmg9J_5TBhIWXb8r3toba2Sl9Y,3347
7
+ uripath/_uri.py,sha256=tIRSnWzq0rY3U0S4rWWaZBrOLuiRkJgOcOj9InKajvk,42454
8
+ uripath/_version.py,sha256=jOvOnkZ6UGEKfqW8caogg-zZOdIoCWwrsp1-jjctUQI,311
9
+ uripath/exceptions.py,sha256=A0g181e49M-GiuxmibBKPVRiFcVs9wWebb-pttNxHIQ,1223
10
+ uripath/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
11
+ uripath/query.py,sha256=wCXcSKs7MEMF5pQxE6toUPM0nYL1HSVnOh3NyHcKL5Q,8594
12
+ uripath/cli/__init__.py,sha256=xOoqJLXNHc8smiXkY4Czw8ySqSlzd6k6WN3tRZbjGvo,1716
13
+ uripath/cli/_common.py,sha256=_7vhMIUPDRMjMozcG8_1ifJs3dfTPyE7gdkKVIY05Ao,1514
14
+ uripath/cli/_root.py,sha256=_BdjkJ8hXK4dQbnCNYSao_ys4P_yajJ5LOskqr_sP-8,2283
15
+ uripath/cli/cp.py,sha256=1rvgaFgDvp1wLqoA_-Wbuc_ABDWGnudkXqh-pdd90-E,1906
16
+ uripath/cli/read.py,sha256=Ar74NiUhQ3AlnjgSl7AmUUq4-pjqA5GA3hVL2AbYN4k,512
17
+ uripath/cli/rm.py,sha256=l_TMgkD4czzLMke4abVcp99a-HcoM8DPrtoeDO9-L6Y,978
18
+ uripath/cli/sync.py,sha256=XbWWJ31UOEhaF2tdU6UTf9PD25HsBW6urgwpTis6kwA,2491
19
+ uripath/cli/write.py,sha256=FCTr5_A7eU2PfF5salIRgnXG4A28Pcn7zcTbj90QkDQ,1379
20
+ uripath/schemes/__init__.py,sha256=MnXUo9bxMbpM51tB3CGgAl-Sh9G3kiFt8W2Yk_YSaMk,3892
21
+ uripath/schemes/_archive.py,sha256=aY-FXbwIz2ZwxcxfJxy39hPlBG9KC75Z1PQ7kv-gm1M,15196
22
+ uripath/schemes/_data.py,sha256=Izob7ZXE9Tteb6uvwgpvkOnKTHdm_B2JNjoOnWsGL5c,3827
23
+ uripath/schemes/_dav.py,sha256=mPlUEZRALzDnCdEUTBM5bO5lmYt01YiOrHRfZpUpM6Q,18388
24
+ uripath/schemes/_delegate.py,sha256=Ajb-fOYYZHgU7LGPcqJnX2wLz1YKj6hITRS6DQKUHsU,4034
25
+ uripath/schemes/_elsewhere.py,sha256=SdSDelq1CQSg7GLAxlwZTs0Zeu6tWrilYTaSrlXRQTY,3098
26
+ uripath/schemes/_file.py,sha256=0R3BO0vJfuHqjO0mf5faoLVh_mJot2NksrxYvkq1MUA,7265
27
+ uripath/schemes/_ftp.py,sha256=7CFw4gY2E6hAqTp5sMLrENokFCiY3MWUUZHHveaIsnQ,7426
28
+ uripath/schemes/_httpdate.py,sha256=71fB8KWcj5VtnBHgps6hnAYG84vbqsh5AXd68cjOQVY,2063
29
+ uripath/schemes/_path.py,sha256=C-dI3-twVjizu1lC7rKfPf--RLLK-kxO9VCb1pITsq4,25876
30
+ uripath/schemes/_registry.py,sha256=mZkCwuzY4CTDKjLV2eSnBr_1RuYQmvxvSlUbnLS7UKg,5029
31
+ uripath/schemes/_http/__init__.py,sha256=ZrjSeXjblag0YAROTLfqo7yi_TFYw7ge8ZlAdaDAhYk,168
32
+ uripath/schemes/_http/_backend.py,sha256=l4BLGz4AB4wlsZGLHsRLGbZehvtFKA86eO_GGNC_0eo,4978
33
+ uripath/schemes/_http/_headers.py,sha256=pxyZUXH4uZWVBkL5Pwpwzm_IB7F3L_H7-Ej3rB8aDlM,358
34
+ uripath/schemes/_http/_listing.py,sha256=ZtClzN2VjcXf2EGl53OR12UHG4aqDvth3z8ewivPm-4,15133
35
+ uripath/schemes/_http/_path.py,sha256=oKgniub6kXplC9KxDHbVmma0mZ2zhIUwrEgUi8aCDUQ,15256
36
+ uripath/schemes/_http/_settings.py,sha256=1n25z94FdEeE2jZAzYdBwp9NECBLUOfEIaM2nRFek8Q,228
37
+ uripath/schemes/_http/_streams.py,sha256=de4Fl_wYQLhkFjc3Sa--pFt6QFkdcBFWbp0lT1AotFU,8083
38
+ uripath/source/__init__.py,sha256=UlQeQ5g2TEcdHCdnT69mcHQIuLAsW1rjU6lkDFZaAoc,497
39
+ uripath/source/_compose.py,sha256=PVe5OSzGY8GRXBW71QXyU7j7aNbJrdnDlxrARDppCAc,7955
40
+ uripath/source/_locality.py,sha256=rDHKH1-EtfMshVCpUed9NzZqtffNO-gsTUYbbailS9I,1548
41
+ uripath/source/_parse.py,sha256=lGi-LZhGZnIr79CEIU-Z6t-Uu375eXBioQ9PKXaUROc,7287
42
+ uripath/source/_source.py,sha256=mmVsH-edCrawTH8_20HI6e5tCg1tH8yFSbuqE5xoOEs,9914
43
+ uripath/README.md,sha256=C3klhOStQ3YOL5_s03jAVgegynFqFQtcUo5d8QZ9cH4,9848
44
+ pathapi_uri-0.1.0.dist-info/METADATA,sha256=EzetO7NjuCYhtvlJJtytHsFr9dpNV_ey-D29aMQ-LuI,11659
45
+ pathapi_uri-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
46
+ pathapi_uri-0.1.0.dist-info/entry_points.txt,sha256=xQUo69cFOuRvN13oVKcdfQ_SxDIkipjAZQ83g6ihG4o,542
47
+ pathapi_uri-0.1.0.dist-info/licenses/LICENSE,sha256=bBY0SeXglEP0yGEOZbyqRTbNfXD0DVpkr-3mBq7-BPQ,1063
48
+ pathapi_uri-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,17 @@
1
+ [console_scripts]
2
+ uripath = uripath.cli:main
3
+
4
+ [uripath.schemes]
5
+ archive = uripath.schemes:ArchiveURIPath
6
+ archive+tar = uripath.schemes:ArchiveTarURIPath
7
+ archive+zip = uripath.schemes:ArchiveZipURIPath
8
+ data = uripath.schemes:DataURIPath
9
+ dav = uripath.schemes:DAVURIPath
10
+ davs = uripath.schemes:DAVURIPath
11
+ file = uripath.schemes:FileURIPath
12
+ ftp = uripath.schemes:FTPURIPath
13
+ ftps = uripath.schemes:FTPURIPath
14
+ http = uripath.schemes:HTTPURIPath
15
+ https = uripath.schemes:HTTPURIPath
16
+ tar = uripath.schemes:TarURIPath
17
+ zip = uripath.schemes:ZipURIPath
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Jose A
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.