zipline-cli 0.2.0__tar.gz → 0.2.2__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.
@@ -1,22 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zipline-cli
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Python 3 CLI File Uploader for Diced/Zipline v3/v4 Upload Server and Django Files.
5
5
  Author: Shane
6
6
  License: MIT License
7
- Project-URL: Homepage, https://cssnr.com/
8
- Project-URL: Documentation, https://zipline-cli.cssnr.com/
9
- Project-URL: Source, https://github.com/cssnr/zipline-cli
7
+ Project-URL: GitHub, https://github.com/cssnr/zipline-cli
10
8
  Project-URL: Issues, https://github.com/cssnr/zipline-cli/issues
9
+ Project-URL: Changelog, https://github.com/cssnr/zipline-cli/releases
10
+ Project-URL: Documentation, https://zipline-cli.cssnr.com/
11
+ Project-URL: Homepage, https://cssnr.com/
11
12
  Project-URL: Funding, https://ko-fi.com/cssnr
12
- Classifier: License :: OSI Approved :: MIT License
13
- Classifier: Operating System :: OS Independent
14
- Classifier: Natural Language :: English
13
+ Project-URL: Discord, https://discord.gg/wXy6m2X8wY
15
14
  Classifier: Programming Language :: Python
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Intended Audience :: Developers
19
- Classifier: Intended Audience :: System Administrators
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Natural Language :: English
20
+ Classifier: Typing :: Typed
21
+ Classifier: Topic :: Communications :: File Sharing
22
+ Classifier: Topic :: Terminals
20
23
  Requires-Python: >=3.9
21
24
  Description-Content-Type: text/markdown
22
25
  License-File: LICENSE
@@ -29,12 +32,14 @@ Dynamic: license-file
29
32
  [![GitHub Release Version](https://img.shields.io/github/v/release/cssnr/zipline-cli?logo=github)](https://github.com/cssnr/zipline-cli/releases)
30
33
  [![TOML Python Version](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcssnr%2Fzipline-cli%2Frefs%2Fheads%2Fmaster%2Fpyproject.toml&query=%24.project.requires-python&logo=python&logoColor=white&label=python)](https://github.com/cssnr/zipline-cli?tab=readme-ov-file#readme)
31
34
  [![PyPI Downloads](https://img.shields.io/pypi/dm/zipline-cli?logo=pypi&logoColor=white)](https://pypistats.org/packages/zipline-cli)
35
+ [![Pepy Total Downloads](https://img.shields.io/pepy/dt/zipline-cli?logo=pypi&logoColor=white&label=total)](https://clickpy.clickhouse.com/dashboard/zipline-cli)
36
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/1eee626c47fa4e6fb8b1ed3efdd3e518)](https://app.codacy.com/gh/cssnr/zipline-cli/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
32
37
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=cssnr_zipline-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=cssnr_zipline-cli)
33
38
  [![Workflow Test](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/test.yaml?logo=cachet&label=test)](https://github.com/cssnr/zipline-cli/actions/workflows/test.yaml)
34
39
  [![Workflow Lint](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/lint.yaml?logo=cachet&label=lint)](https://github.com/cssnr/zipline-cli/actions/workflows/lint.yaml)
35
40
  [![Workflow Release](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/release.yaml?logo=cachet&label=release)](https://github.com/cssnr/zipline-cli/actions/workflows/release.yaml)
36
- [![GitHub Deployments](https://img.shields.io/github/deployments/cssnr/zipline-cli/pypi?logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/zipline-cli/)
37
- [![GitHub Deployments](https://img.shields.io/github/deployments/cssnr/zipline-cli/docs?logo=materialformkdocs&logoColor=white&label=docs)](https://zipline-cli.cssnr.com/)
41
+ [![Deployment PyPi](https://img.shields.io/github/deployments/cssnr/zipline-cli/pypi?logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/zipline-cli/)
42
+ [![Deployment Docs](https://img.shields.io/github/deployments/cssnr/zipline-cli/docs?logo=materialformkdocs&logoColor=white&label=docs)](https://zipline-cli.cssnr.com/)
38
43
  [![GitHub Last Commit](https://img.shields.io/github/last-commit/cssnr/zipline-cli?logo=github&label=updated)](https://github.com/cssnr/zipline-cli/graphs/commit-activity)
39
44
  [![GitHub Repo Size](https://img.shields.io/github/repo-size/cssnr/zipline-cli?logo=bookstack&logoColor=white&label=repo%20size)](https://github.com/cssnr/zipline-cli)
40
45
  [![GitHub Top Language](https://img.shields.io/github/languages/top/cssnr/zipline-cli?logo=htmx&logoColor=white)](https://github.com/cssnr/zipline-cli?tab=readme-ov-file#readme)
@@ -49,17 +54,20 @@ Dynamic: license-file
49
54
 
50
55
  # Zipline CLI
51
56
 
52
- - [Quick Start](#Quick-Start)
53
- - [Install](#Install)
54
- - [Usage](#Usage)
55
- - [Environment Variables](#Environment-Variables)
56
- - [API Reference](#API-Reference)
57
- - [Support](#Support)
58
- - [Contributing](#Contributing)
57
+ <a title="Zipline CLI" href="https://zipline-cli.cssnr.com/" target="_blank">
58
+ <img alt="Zipline CLI" align="right" width="128" height="auto" src="https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/zipline/cli/logo128.png"></a>
59
+
60
+ - [Quick Start](#quick-start)
61
+ - [Install](#install)
62
+ - [Usage](#usage)
63
+ - [Environment Variables](#environment-variables)
64
+ - [API Reference](#api-reference)
65
+ - [Support](#support)
66
+ - [Contributing](#contributing)
59
67
 
60
68
  Python 3 CLI File Uploader for [Diced/Zipline](https://github.com/diced/zipline) v3/v4 Upload Server and [Django Files](https://github.com/django-files/django-files).
61
69
 
62
- - Zipline: [https://zipline.diced.tech/](https://zipline.diced.tech/)
70
+ - Zipline: [https://zipline.diced.sh/](https://zipline.diced.sh/)
63
71
  - Django Files: [https://django-files.github.io/](https://django-files.github.io/)
64
72
 
65
73
  > [!TIP]
@@ -67,43 +75,43 @@ Python 3 CLI File Uploader for [Diced/Zipline](https://github.com/diced/zipline)
67
75
  > You can also [request new features](https://github.com/cssnr/zipline-cli/discussions/new?category=feature-requests)
68
76
  > or report any [issues](https://github.com/cssnr/zipline-cli/issues/new).
69
77
 
70
- ## Quick Start
78
+ ## Quick Start<a id="quick-start"></a>
71
79
 
72
80
  ```shell
73
- python3 -m pip install zipline-cli
81
+ python -m pip install zipline-cli
74
82
  zipline --setup
75
83
  ```
76
84
 
77
- Documentation: https://zipline-cli.cssnr.com/
85
+ [![View Documentation](https://img.shields.io/badge/view_documentation-blue?style=for-the-badge&logo=googledocs&logoColor=white)](https://zipline-cli.cssnr.com/)
78
86
 
79
- ## Install
87
+ ## Install<a id="install"></a>
80
88
 
81
89
  From PyPI: https://pypi.org/p/zipline-cli
82
90
 
83
91
  ```shell
84
- python3 -m pip install zipline-cli
92
+ python -m pip install zipline-cli
85
93
  ```
86
94
 
87
95
  From GitHub using pip.
88
96
 
89
97
  ```shell
90
- python3 -m pip install git+https://github.com/cssnr/zipline-cli.git
98
+ python -m pip install git+https://github.com/cssnr/zipline-cli.git
91
99
  ```
92
100
 
93
101
  From Source using pip.
94
102
 
95
103
  ```shell
96
104
  git clone https://github.com/cssnr/zipline-cli.git
97
- python3 -m pip install zipline-cli
105
+ python -m pip install zipline-cli
98
106
  ```
99
107
 
100
108
  Uninstall.
101
109
 
102
110
  ```shell
103
- python3 -m pip uninstall zipline-cli
111
+ python -m pip uninstall zipline-cli
104
112
  ```
105
113
 
106
- ## Usage
114
+ ## Usage<a id="usage"></a>
107
115
 
108
116
  > [!TIP]
109
117
  > View the [Getting Started](https://zipline-cli.cssnr.com/) guide online.
@@ -139,19 +147,19 @@ zipline
139
147
  # Paste or Type contents, followed by a newline, then Ctrl+D (Ctrl+Z on Windows)
140
148
  ```
141
149
 
142
- ## Environment Variables
150
+ ## Environment Variables<a id="environment-variables"></a>
143
151
 
144
152
  Environment Variables are stored in the `.zipline` file in your home directory.
145
153
 
146
154
  - Location: `~/.zipline` or `$HOME/.zipline`
147
155
 
148
- | Variable | Description |
149
- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
150
- | `ZIPLINE_URL` | URL to your Zipline Instance |
151
- | `ZIPLINE_TOKEN` | Authorization Token from Zipline |
152
- | `ZIPLINE_EMBED` | Set this enable Embed on your uploads |
153
- | `ZIPLINE_FORMAT` | Output Format. Variables: `{filename}`, `{url}` and `{raw_url}` |
154
- | `ZIPLINE_EXPIRE` | Reference: [Zipline](https://zipline.diced.tech/docs/guides/upload-options#image-expiration) / [Django Files](https://github.com/onegreyonewhite/pytimeparse2#pytimeparse2-time-expression-parser) |
156
+ | Variable | Description |
157
+ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
158
+ | `ZIPLINE_URL` | URL to your Zipline Instance |
159
+ | `ZIPLINE_TOKEN` | Authorization Token from Zipline |
160
+ | `ZIPLINE_EMBED` | Set this enable Embed on your uploads |
161
+ | `ZIPLINE_FORMAT` | Output Format. Variables: `{filename}`, `{url}` and `{raw_url}` |
162
+ | `ZIPLINE_EXPIRE` | Reference: [Zipline](https://zipline.diced.sh/docs/guides/upload-options#image-expiration) / [Django Files](https://github.com/onegreyonewhite/pytimeparse2#pytimeparse2-time-expression-parser) |
155
163
 
156
164
  See [.zipline.example](.zipline.example) for an example `.zipline` file.
157
165
 
@@ -162,7 +170,7 @@ or using the corresponding command line arguments.
162
170
  zipline -h
163
171
  ```
164
172
 
165
- ## API Reference
173
+ ## API Reference<a id="api-reference"></a>
166
174
 
167
175
  Initialize the class with your Zipline URL.
168
176
  Everything else is a header passed as a kwarg.
@@ -185,7 +193,7 @@ with open('text.txt') as f:
185
193
  print(url)
186
194
  ```
187
195
 
188
- # Support
196
+ # Support<a id="support"></a>
189
197
 
190
198
  For general help or to request a feature, see:
191
199
 
@@ -199,7 +207,7 @@ If you are experiencing an issue/bug or getting unexpected results, you can:
199
207
  - Provide General Feedback: [https://cssnr.github.io/feedback/](https://cssnr.github.io/feedback/?app=zipline-cli)
200
208
  - Chat with us on Discord: https://discord.gg/wXy6m2X8wY
201
209
 
202
- # Contributing
210
+ # Contributing<a id="contributing"></a>
203
211
 
204
212
  All contributions are welcome including [bug reports](https://github.com/cssnr/zipline-cli/issues),
205
213
  [feature requests](https://github.com/cssnr/zipline-cli/discussions/categories/feature-requests),
@@ -2,12 +2,14 @@
2
2
  [![GitHub Release Version](https://img.shields.io/github/v/release/cssnr/zipline-cli?logo=github)](https://github.com/cssnr/zipline-cli/releases)
3
3
  [![TOML Python Version](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcssnr%2Fzipline-cli%2Frefs%2Fheads%2Fmaster%2Fpyproject.toml&query=%24.project.requires-python&logo=python&logoColor=white&label=python)](https://github.com/cssnr/zipline-cli?tab=readme-ov-file#readme)
4
4
  [![PyPI Downloads](https://img.shields.io/pypi/dm/zipline-cli?logo=pypi&logoColor=white)](https://pypistats.org/packages/zipline-cli)
5
+ [![Pepy Total Downloads](https://img.shields.io/pepy/dt/zipline-cli?logo=pypi&logoColor=white&label=total)](https://clickpy.clickhouse.com/dashboard/zipline-cli)
6
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/1eee626c47fa4e6fb8b1ed3efdd3e518)](https://app.codacy.com/gh/cssnr/zipline-cli/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
5
7
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=cssnr_zipline-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=cssnr_zipline-cli)
6
8
  [![Workflow Test](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/test.yaml?logo=cachet&label=test)](https://github.com/cssnr/zipline-cli/actions/workflows/test.yaml)
7
9
  [![Workflow Lint](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/lint.yaml?logo=cachet&label=lint)](https://github.com/cssnr/zipline-cli/actions/workflows/lint.yaml)
8
10
  [![Workflow Release](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/release.yaml?logo=cachet&label=release)](https://github.com/cssnr/zipline-cli/actions/workflows/release.yaml)
9
- [![GitHub Deployments](https://img.shields.io/github/deployments/cssnr/zipline-cli/pypi?logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/zipline-cli/)
10
- [![GitHub Deployments](https://img.shields.io/github/deployments/cssnr/zipline-cli/docs?logo=materialformkdocs&logoColor=white&label=docs)](https://zipline-cli.cssnr.com/)
11
+ [![Deployment PyPi](https://img.shields.io/github/deployments/cssnr/zipline-cli/pypi?logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/zipline-cli/)
12
+ [![Deployment Docs](https://img.shields.io/github/deployments/cssnr/zipline-cli/docs?logo=materialformkdocs&logoColor=white&label=docs)](https://zipline-cli.cssnr.com/)
11
13
  [![GitHub Last Commit](https://img.shields.io/github/last-commit/cssnr/zipline-cli?logo=github&label=updated)](https://github.com/cssnr/zipline-cli/graphs/commit-activity)
12
14
  [![GitHub Repo Size](https://img.shields.io/github/repo-size/cssnr/zipline-cli?logo=bookstack&logoColor=white&label=repo%20size)](https://github.com/cssnr/zipline-cli)
13
15
  [![GitHub Top Language](https://img.shields.io/github/languages/top/cssnr/zipline-cli?logo=htmx&logoColor=white)](https://github.com/cssnr/zipline-cli?tab=readme-ov-file#readme)
@@ -22,17 +24,20 @@
22
24
 
23
25
  # Zipline CLI
24
26
 
25
- - [Quick Start](#Quick-Start)
26
- - [Install](#Install)
27
- - [Usage](#Usage)
28
- - [Environment Variables](#Environment-Variables)
29
- - [API Reference](#API-Reference)
30
- - [Support](#Support)
31
- - [Contributing](#Contributing)
27
+ <a title="Zipline CLI" href="https://zipline-cli.cssnr.com/" target="_blank">
28
+ <img alt="Zipline CLI" align="right" width="128" height="auto" src="https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/zipline/cli/logo128.png"></a>
29
+
30
+ - [Quick Start](#quick-start)
31
+ - [Install](#install)
32
+ - [Usage](#usage)
33
+ - [Environment Variables](#environment-variables)
34
+ - [API Reference](#api-reference)
35
+ - [Support](#support)
36
+ - [Contributing](#contributing)
32
37
 
33
38
  Python 3 CLI File Uploader for [Diced/Zipline](https://github.com/diced/zipline) v3/v4 Upload Server and [Django Files](https://github.com/django-files/django-files).
34
39
 
35
- - Zipline: [https://zipline.diced.tech/](https://zipline.diced.tech/)
40
+ - Zipline: [https://zipline.diced.sh/](https://zipline.diced.sh/)
36
41
  - Django Files: [https://django-files.github.io/](https://django-files.github.io/)
37
42
 
38
43
  > [!TIP]
@@ -40,43 +45,43 @@ Python 3 CLI File Uploader for [Diced/Zipline](https://github.com/diced/zipline)
40
45
  > You can also [request new features](https://github.com/cssnr/zipline-cli/discussions/new?category=feature-requests)
41
46
  > or report any [issues](https://github.com/cssnr/zipline-cli/issues/new).
42
47
 
43
- ## Quick Start
48
+ ## Quick Start<a id="quick-start"></a>
44
49
 
45
50
  ```shell
46
- python3 -m pip install zipline-cli
51
+ python -m pip install zipline-cli
47
52
  zipline --setup
48
53
  ```
49
54
 
50
- Documentation: https://zipline-cli.cssnr.com/
55
+ [![View Documentation](https://img.shields.io/badge/view_documentation-blue?style=for-the-badge&logo=googledocs&logoColor=white)](https://zipline-cli.cssnr.com/)
51
56
 
52
- ## Install
57
+ ## Install<a id="install"></a>
53
58
 
54
59
  From PyPI: https://pypi.org/p/zipline-cli
55
60
 
56
61
  ```shell
57
- python3 -m pip install zipline-cli
62
+ python -m pip install zipline-cli
58
63
  ```
59
64
 
60
65
  From GitHub using pip.
61
66
 
62
67
  ```shell
63
- python3 -m pip install git+https://github.com/cssnr/zipline-cli.git
68
+ python -m pip install git+https://github.com/cssnr/zipline-cli.git
64
69
  ```
65
70
 
66
71
  From Source using pip.
67
72
 
68
73
  ```shell
69
74
  git clone https://github.com/cssnr/zipline-cli.git
70
- python3 -m pip install zipline-cli
75
+ python -m pip install zipline-cli
71
76
  ```
72
77
 
73
78
  Uninstall.
74
79
 
75
80
  ```shell
76
- python3 -m pip uninstall zipline-cli
81
+ python -m pip uninstall zipline-cli
77
82
  ```
78
83
 
79
- ## Usage
84
+ ## Usage<a id="usage"></a>
80
85
 
81
86
  > [!TIP]
82
87
  > View the [Getting Started](https://zipline-cli.cssnr.com/) guide online.
@@ -112,19 +117,19 @@ zipline
112
117
  # Paste or Type contents, followed by a newline, then Ctrl+D (Ctrl+Z on Windows)
113
118
  ```
114
119
 
115
- ## Environment Variables
120
+ ## Environment Variables<a id="environment-variables"></a>
116
121
 
117
122
  Environment Variables are stored in the `.zipline` file in your home directory.
118
123
 
119
124
  - Location: `~/.zipline` or `$HOME/.zipline`
120
125
 
121
- | Variable | Description |
122
- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
123
- | `ZIPLINE_URL` | URL to your Zipline Instance |
124
- | `ZIPLINE_TOKEN` | Authorization Token from Zipline |
125
- | `ZIPLINE_EMBED` | Set this enable Embed on your uploads |
126
- | `ZIPLINE_FORMAT` | Output Format. Variables: `{filename}`, `{url}` and `{raw_url}` |
127
- | `ZIPLINE_EXPIRE` | Reference: [Zipline](https://zipline.diced.tech/docs/guides/upload-options#image-expiration) / [Django Files](https://github.com/onegreyonewhite/pytimeparse2#pytimeparse2-time-expression-parser) |
126
+ | Variable | Description |
127
+ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
128
+ | `ZIPLINE_URL` | URL to your Zipline Instance |
129
+ | `ZIPLINE_TOKEN` | Authorization Token from Zipline |
130
+ | `ZIPLINE_EMBED` | Set this enable Embed on your uploads |
131
+ | `ZIPLINE_FORMAT` | Output Format. Variables: `{filename}`, `{url}` and `{raw_url}` |
132
+ | `ZIPLINE_EXPIRE` | Reference: [Zipline](https://zipline.diced.sh/docs/guides/upload-options#image-expiration) / [Django Files](https://github.com/onegreyonewhite/pytimeparse2#pytimeparse2-time-expression-parser) |
128
133
 
129
134
  See [.zipline.example](.zipline.example) for an example `.zipline` file.
130
135
 
@@ -135,7 +140,7 @@ or using the corresponding command line arguments.
135
140
  zipline -h
136
141
  ```
137
142
 
138
- ## API Reference
143
+ ## API Reference<a id="api-reference"></a>
139
144
 
140
145
  Initialize the class with your Zipline URL.
141
146
  Everything else is a header passed as a kwarg.
@@ -158,7 +163,7 @@ with open('text.txt') as f:
158
163
  print(url)
159
164
  ```
160
165
 
161
- # Support
166
+ # Support<a id="support"></a>
162
167
 
163
168
  For general help or to request a feature, see:
164
169
 
@@ -172,7 +177,7 @@ If you are experiencing an issue/bug or getting unexpected results, you can:
172
177
  - Provide General Feedback: [https://cssnr.github.io/feedback/](https://cssnr.github.io/feedback/?app=zipline-cli)
173
178
  - Chat with us on Discord: https://discord.gg/wXy6m2X8wY
174
179
 
175
- # Contributing
180
+ # Contributing<a id="contributing"></a>
176
181
 
177
182
  All contributions are welcome including [bug reports](https://github.com/cssnr/zipline-cli/issues),
178
183
  [feature requests](https://github.com/cssnr/zipline-cli/discussions/categories/feature-requests),
@@ -8,14 +8,15 @@ readme = "README.md"
8
8
  dynamic = ["version"]
9
9
  requires-python = ">=3.9"
10
10
  classifiers = [
11
- "License :: OSI Approved :: MIT License",
12
- "Operating System :: OS Independent",
13
- "Natural Language :: English",
14
11
  "Programming Language :: Python",
15
12
  "Programming Language :: Python :: 3",
16
13
  "Programming Language :: Python :: 3 :: Only",
17
- "Intended Audience :: Developers",
18
- "Intended Audience :: System Administrators",
14
+ "Operating System :: OS Independent",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Natural Language :: English",
17
+ "Typing :: Typed",
18
+ "Topic :: Communications :: File Sharing",
19
+ "Topic :: Terminals",
19
20
  ]
20
21
  license = { text = "MIT License" }
21
22
  #license = { file = "LICENSE" }
@@ -33,15 +34,14 @@ dev = [
33
34
  "build",
34
35
  "isort",
35
36
  "mypy",
36
- "python-dotenv",
37
37
  "python-decouple-typed",
38
38
  "psycopg2",
39
39
  "ruff",
40
40
  "setuptools",
41
- "twine",
42
41
  "ty",
43
42
  "types-psycopg2",
44
43
  "types-requests",
44
+ "validate-pyproject[all]",
45
45
  "wheel",
46
46
  ]
47
47
 
@@ -49,11 +49,14 @@ dev = [
49
49
  zipline = "zipline.zipline:main"
50
50
 
51
51
  [project.urls]
52
- Homepage = "https://cssnr.com/"
53
- Documentation = "https://zipline-cli.cssnr.com/"
54
- Source = "https://github.com/cssnr/zipline-cli"
52
+ GitHub = "https://github.com/cssnr/zipline-cli"
55
53
  Issues = "https://github.com/cssnr/zipline-cli/issues"
54
+ Changelog = "https://github.com/cssnr/zipline-cli/releases"
55
+ Documentation = "https://zipline-cli.cssnr.com/"
56
+
57
+ Homepage = "https://cssnr.com/"
56
58
  Funding = "https://ko-fi.com/cssnr"
59
+ Discord = "https://discord.gg/wXy6m2X8wY"
57
60
 
58
61
  # Setup Tools
59
62
  # https://setuptools.pypa.io/en/latest/
@@ -17,4 +17,4 @@ def get_version() -> str:
17
17
 
18
18
  __version__ = get_version()
19
19
 
20
- __all__ = ["Zipline", "__version__"]
20
+ __all__ = ["Zipline"]
File without changes
@@ -6,8 +6,9 @@ import re
6
6
  import secrets
7
7
  import string
8
8
  import sys
9
+ from importlib.metadata import version
9
10
  from pathlib import Path
10
- from typing import IO, Any, Dict, List, Literal, Optional, TextIO
11
+ from typing import IO, Any, Dict, List, Optional, TextIO
11
12
 
12
13
  import requests
13
14
  from decouple import config
@@ -16,9 +17,8 @@ from dotenv import find_dotenv, load_dotenv
16
17
 
17
18
  class ZipURL(object):
18
19
  """
19
- TODO: Need to use a variable route
20
20
  Zipline URL Object
21
- :param file_url: str: Zipline File Display URL
21
+ :param file_url: Zipline File Display URL
22
22
  """
23
23
 
24
24
  __slots__ = ["url", "raw"]
@@ -38,17 +38,18 @@ class ZipURL(object):
38
38
  try:
39
39
  s = url.split("/", 4)
40
40
  return f"{s[0]}//{s[2]}/r/{s[4]}"
41
- except Exception:
41
+ except Exception: # noqa
42
42
  return ""
43
43
 
44
44
 
45
45
  class Zipline(object):
46
46
  """
47
47
  Zipline Python API
48
- :param base_url: str: Zipline URL
48
+ :param base_url: Zipline URL
49
49
  :param kwargs: Zipline Headers
50
50
  """
51
51
 
52
+ # noinspection SpellCheckingInspection
52
53
  allowed_headers = [
53
54
  # zipline v3
54
55
  "format",
@@ -91,18 +92,21 @@ class Zipline(object):
91
92
 
92
93
  def send_file(self, file_name: str, file_object: IO, overrides: Optional[dict] = None) -> ZipURL:
93
94
  """
94
- Send File to Zipline
95
- TO-DO: Add timeout option to requests
96
- :param file_name: str: Name of File for files tuple
97
- :param file_object: TextIO: File to Upload
98
- :param overrides: dict: Header Overrides
99
- :return: str: File URL
95
+ Upload File to Zipline
96
+ :param file_name: Name of File for files tuple
97
+ :param file_object: File to Upload
98
+ :param overrides: Header Overrides
99
+ :return: File URL
100
100
  """
101
101
  url = self.base_url + "/api/upload"
102
- # Deprecated since version 3.13: Passing a file path instead of URL is soft deprecated. Use guess_file_type() for this.
103
- # https://docs.python.org/3/library/mimetypes.html#mimetypes.guess_type
104
- mime_type, _ = mimetypes.guess_type(file_name, strict=False)
105
- files = {"file": (file_name, file_object, mime_type or "application/octet-stream")}
102
+
103
+ path = Path(file_name)
104
+ if not path.is_file():
105
+ raise ValueError(f"Not a File: {path.resolve()}")
106
+
107
+ mime_type = get_type(path)
108
+ # print(f"mime_type: {mime_type}")
109
+ files = {"file": (file_name, file_object, mime_type)}
106
110
  headers = self._headers | overrides if overrides else self._headers
107
111
  r = requests.post(url, headers=headers, files=files) # nosec
108
112
  r.raise_for_status()
@@ -115,22 +119,61 @@ class Zipline(object):
115
119
  return ZipURL(data)
116
120
 
117
121
 
118
- def get_mode(file_path: str, blocksize: int = 512) -> Literal["r", "rb"]:
122
+ def get_type(file_path: Path) -> str:
123
+ # Deprecated since version 3.13: Passing a file path instead of URL is soft deprecated. Use guess_file_type() for this.
124
+ # https://docs.python.org/3/library/mimetypes.html#mimetypes.guess_type
125
+ mime_type, _ = mimetypes.guess_type(file_path, strict=False)
126
+ if mime_type:
127
+ return mime_type
128
+ return magic_type(file_path)
129
+
130
+
131
+ def magic_type(file_path: Path) -> str: # NOSONAR
119
132
  try:
120
133
  with open(file_path, "rb") as file:
121
- chunk = file.read(blocksize)
134
+ chunk = file.read(512)
135
+ # print(chunk)
136
+ if chunk[0:3] == b"\xff\xd8\xff" or chunk[6:10] in (b"JFIF", b"Exif"):
137
+ return "image/jpeg"
138
+ elif chunk.startswith(b"\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"):
139
+ return "image/png"
140
+ elif chunk.startswith(b"RIFF") and chunk[8:12] == b"WEBP":
141
+ return "image/webp"
142
+ elif chunk.startswith((b"\x47\x49\x46\x38\x37\x61", b"\x47\x49\x46\x38\x39\x61")):
143
+ return "image/gif"
144
+ elif chunk.startswith(b"\x66\x74\x79\x70\x68\x65\x69\x63\x66\x74\79\70\6d"):
145
+ return "image/heic"
146
+ elif chunk.startswith(b"\x00\x00\x01\x00"):
147
+ return "image/ico"
148
+
149
+ elif chunk[3:11] in (b"\x66\x74\x79\x70\x4d\x53\x4e\x56", b"\x66\x74\x79\x70\x69\x73\x6f\x6d"):
150
+ return "video/mp4"
151
+ elif chunk[4:12] == b"ftypisom" or chunk[4:12] == b"ftypMSNV" or chunk[4:12] == b"ftypmp42":
152
+ return "video/mp4"
153
+ elif chunk.startswith(b"\x1a\x45\xdf\xa3"):
154
+ return "video/x-matroska"
155
+ elif chunk.startswith(b"\x6d\x6f\x6f\x76"):
156
+ return "video/quicktime"
157
+
158
+ elif chunk.startswith((b"\xff\xfb", b"\xff\xfb", b"\xff\xfb", b"\x49\x44\x33")):
159
+ return "audio/mp3"
160
+ elif chunk.startswith(b"RIFF") and chunk[8:12] == b"WAVE":
161
+ return "audio/wav"
162
+ elif chunk.startswith(b"OggS"):
163
+ return "application/ogg"
164
+
122
165
  chunk.decode("utf-8")
166
+ return "text/plain"
123
167
  except UnicodeDecodeError:
124
- return "rb"
125
- return "r"
168
+ return "application/octet-stream"
126
169
 
127
170
 
128
171
  def format_output(filename: str, url: ZipURL) -> str:
129
172
  """
130
173
  Format URL Output
131
- :param filename: str: Original or File Name
132
- :param url: ZipURL: ZipURL to Format
133
- :return: str: Formatted Output
174
+ :param filename: Original or File Name
175
+ :param url: ZipURL to Format
176
+ :return: Formatted Output
134
177
  """
135
178
  zipline_format = config("ZIPLINE_FORMAT", "{filename}\n{url}\n{raw_url}")
136
179
  return zipline_format.format(filename=filename, url=url, raw_url=url.raw)
@@ -138,9 +181,9 @@ def format_output(filename: str, url: ZipURL) -> str:
138
181
 
139
182
  def gen_rand(length: int = 4) -> str:
140
183
  """
141
- Generate Random Streng at Given length
142
- :param length: int: Length of Random String
143
- :return: str: Random String
184
+ Generate Random Streng
185
+ :param length: Length of String
186
+ :return: Random String
144
187
  """
145
188
  r = "".join(secrets.choice(string.ascii_letters) for _ in range(length))
146
189
  return "".join(r)
@@ -155,12 +198,12 @@ def get_default(
155
198
  ) -> Optional[str]:
156
199
  """
157
200
  Get Default Environment Variable from List of values
158
- :param values: list: List of Values to Check
159
- :param default: any: Default Value if None
160
- :param cast: type: Type to Cast Value
161
- :param pre: str: Environment Variable Prefix
162
- :param suf: str: Environment Variable Suffix
163
- :return: str: Environment Variable or None
201
+ :param values: List of Values to Check
202
+ :param default: Default Value if None
203
+ :param cast: Type to Cast Value
204
+ :param pre: Environment Variable Prefix
205
+ :param suf: Environment Variable Suffix
206
+ :return: Environment Variable or None
164
207
  """
165
208
  for value in values:
166
209
  result = config(f"{pre}{value.upper()}{suf}", "", cast)
@@ -200,7 +243,10 @@ def run() -> None:
200
243
 
201
244
  parser = argparse.ArgumentParser(description="Zipline CLI.")
202
245
  parser.add_argument("files", metavar="Files", type=str, nargs="*", help="Files to Upload.")
203
- parser.add_argument("-u", "--url", type=str, default=get_default(["url"]), help="Zipline URL.")
246
+ parser.add_argument("-s", "--setup", action="store_true", default=False, help="run the interactive setup")
247
+ parser.add_argument("-i", "--info", action="store_true", help="show application information")
248
+ parser.add_argument("-V", "--version", action="store_true", help="show the installed version")
249
+ parser.add_argument("-u", "--url", type=str, default=get_default(["url"]), help="Zipline URL")
204
250
  parser.add_argument(
205
251
  "-a",
206
252
  "-t",
@@ -208,7 +254,7 @@ def run() -> None:
208
254
  "--token",
209
255
  type=str,
210
256
  default=get_default(["token", "authorization"]),
211
- help="Zipline Access Token for Authorization or ZIPLINE_TOKEN.",
257
+ help="Zipline Access Token for Authorization or ZIPLINE_TOKEN",
212
258
  )
213
259
  parser.add_argument(
214
260
  "-e",
@@ -217,16 +263,28 @@ def run() -> None:
217
263
  "--expire",
218
264
  type=str,
219
265
  default=get_default(["expire", "expire_at"]),
220
- help="Ex: 1d, 2w. See: https://zipline.diced.tech/docs/guides/upload-options#image-expiration",
266
+ help="Ex: 1d, 2w. See: https://zipline.diced.sh/docs/guides/upload-options#image-expiration",
221
267
  )
222
268
  parser.add_argument(
223
269
  "--embed", action="store_true", default=get_default(["embed"], False, bool), help="Enable Embeds on Uploads."
224
270
  )
225
- parser.add_argument(
226
- "-s", "--setup", action="store_true", default=False, help="Automatic Setup of Environment Variables."
227
- )
228
271
  args = parser.parse_args()
229
272
 
273
+ if args.version:
274
+ print(version("zipline-cli"))
275
+ return
276
+
277
+ if args.info:
278
+ print(f"Zipline Version: {version('zipline-cli')}")
279
+ print(f"Config File: {env_file.absolute()}")
280
+ print(f"Server URL: {config('ZIPLINE_URL', '')}")
281
+ print(f"Token (ends in): {config('ZIPLINE_TOKEN', '')[-10:]}")
282
+ print(f"Expire: {config('ZIPLINE_EXPIRE', '')}")
283
+ print(f"Embed: {config('ZIPLINE_EMBED', '')}")
284
+ zipline_format = config("ZIPLINE_FORMAT", "{url}\n{raw_url}")
285
+ print(f"URL Format::\n{zipline_format}")
286
+ return
287
+
230
288
  if args.setup:
231
289
  setup(env_file)
232
290
 
@@ -265,8 +323,8 @@ def run() -> None:
265
323
  if not os.path.isfile(name):
266
324
  print(f"Warning: File Not Found: {name}")
267
325
  continue
268
- mode: Literal["r", "rb"] = get_mode(name)
269
- with open(name, mode) as f:
326
+ # mode: Literal["r", "rb"] = get_mode(name)
327
+ with open(name, "rb") as f:
270
328
  # name, ext = os.path.splitext(os.path.basename(filename))
271
329
  # ext = f'.{ext}' if ext else ''
272
330
  # name = f'{name}-{gen_rand(8)}{ext}'
@@ -1,22 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zipline-cli
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Python 3 CLI File Uploader for Diced/Zipline v3/v4 Upload Server and Django Files.
5
5
  Author: Shane
6
6
  License: MIT License
7
- Project-URL: Homepage, https://cssnr.com/
8
- Project-URL: Documentation, https://zipline-cli.cssnr.com/
9
- Project-URL: Source, https://github.com/cssnr/zipline-cli
7
+ Project-URL: GitHub, https://github.com/cssnr/zipline-cli
10
8
  Project-URL: Issues, https://github.com/cssnr/zipline-cli/issues
9
+ Project-URL: Changelog, https://github.com/cssnr/zipline-cli/releases
10
+ Project-URL: Documentation, https://zipline-cli.cssnr.com/
11
+ Project-URL: Homepage, https://cssnr.com/
11
12
  Project-URL: Funding, https://ko-fi.com/cssnr
12
- Classifier: License :: OSI Approved :: MIT License
13
- Classifier: Operating System :: OS Independent
14
- Classifier: Natural Language :: English
13
+ Project-URL: Discord, https://discord.gg/wXy6m2X8wY
15
14
  Classifier: Programming Language :: Python
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Intended Audience :: Developers
19
- Classifier: Intended Audience :: System Administrators
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Natural Language :: English
20
+ Classifier: Typing :: Typed
21
+ Classifier: Topic :: Communications :: File Sharing
22
+ Classifier: Topic :: Terminals
20
23
  Requires-Python: >=3.9
21
24
  Description-Content-Type: text/markdown
22
25
  License-File: LICENSE
@@ -29,12 +32,14 @@ Dynamic: license-file
29
32
  [![GitHub Release Version](https://img.shields.io/github/v/release/cssnr/zipline-cli?logo=github)](https://github.com/cssnr/zipline-cli/releases)
30
33
  [![TOML Python Version](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcssnr%2Fzipline-cli%2Frefs%2Fheads%2Fmaster%2Fpyproject.toml&query=%24.project.requires-python&logo=python&logoColor=white&label=python)](https://github.com/cssnr/zipline-cli?tab=readme-ov-file#readme)
31
34
  [![PyPI Downloads](https://img.shields.io/pypi/dm/zipline-cli?logo=pypi&logoColor=white)](https://pypistats.org/packages/zipline-cli)
35
+ [![Pepy Total Downloads](https://img.shields.io/pepy/dt/zipline-cli?logo=pypi&logoColor=white&label=total)](https://clickpy.clickhouse.com/dashboard/zipline-cli)
36
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/1eee626c47fa4e6fb8b1ed3efdd3e518)](https://app.codacy.com/gh/cssnr/zipline-cli/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
32
37
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=cssnr_zipline-cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=cssnr_zipline-cli)
33
38
  [![Workflow Test](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/test.yaml?logo=cachet&label=test)](https://github.com/cssnr/zipline-cli/actions/workflows/test.yaml)
34
39
  [![Workflow Lint](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/lint.yaml?logo=cachet&label=lint)](https://github.com/cssnr/zipline-cli/actions/workflows/lint.yaml)
35
40
  [![Workflow Release](https://img.shields.io/github/actions/workflow/status/cssnr/zipline-cli/release.yaml?logo=cachet&label=release)](https://github.com/cssnr/zipline-cli/actions/workflows/release.yaml)
36
- [![GitHub Deployments](https://img.shields.io/github/deployments/cssnr/zipline-cli/pypi?logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/zipline-cli/)
37
- [![GitHub Deployments](https://img.shields.io/github/deployments/cssnr/zipline-cli/docs?logo=materialformkdocs&logoColor=white&label=docs)](https://zipline-cli.cssnr.com/)
41
+ [![Deployment PyPi](https://img.shields.io/github/deployments/cssnr/zipline-cli/pypi?logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/zipline-cli/)
42
+ [![Deployment Docs](https://img.shields.io/github/deployments/cssnr/zipline-cli/docs?logo=materialformkdocs&logoColor=white&label=docs)](https://zipline-cli.cssnr.com/)
38
43
  [![GitHub Last Commit](https://img.shields.io/github/last-commit/cssnr/zipline-cli?logo=github&label=updated)](https://github.com/cssnr/zipline-cli/graphs/commit-activity)
39
44
  [![GitHub Repo Size](https://img.shields.io/github/repo-size/cssnr/zipline-cli?logo=bookstack&logoColor=white&label=repo%20size)](https://github.com/cssnr/zipline-cli)
40
45
  [![GitHub Top Language](https://img.shields.io/github/languages/top/cssnr/zipline-cli?logo=htmx&logoColor=white)](https://github.com/cssnr/zipline-cli?tab=readme-ov-file#readme)
@@ -49,17 +54,20 @@ Dynamic: license-file
49
54
 
50
55
  # Zipline CLI
51
56
 
52
- - [Quick Start](#Quick-Start)
53
- - [Install](#Install)
54
- - [Usage](#Usage)
55
- - [Environment Variables](#Environment-Variables)
56
- - [API Reference](#API-Reference)
57
- - [Support](#Support)
58
- - [Contributing](#Contributing)
57
+ <a title="Zipline CLI" href="https://zipline-cli.cssnr.com/" target="_blank">
58
+ <img alt="Zipline CLI" align="right" width="128" height="auto" src="https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/zipline/cli/logo128.png"></a>
59
+
60
+ - [Quick Start](#quick-start)
61
+ - [Install](#install)
62
+ - [Usage](#usage)
63
+ - [Environment Variables](#environment-variables)
64
+ - [API Reference](#api-reference)
65
+ - [Support](#support)
66
+ - [Contributing](#contributing)
59
67
 
60
68
  Python 3 CLI File Uploader for [Diced/Zipline](https://github.com/diced/zipline) v3/v4 Upload Server and [Django Files](https://github.com/django-files/django-files).
61
69
 
62
- - Zipline: [https://zipline.diced.tech/](https://zipline.diced.tech/)
70
+ - Zipline: [https://zipline.diced.sh/](https://zipline.diced.sh/)
63
71
  - Django Files: [https://django-files.github.io/](https://django-files.github.io/)
64
72
 
65
73
  > [!TIP]
@@ -67,43 +75,43 @@ Python 3 CLI File Uploader for [Diced/Zipline](https://github.com/diced/zipline)
67
75
  > You can also [request new features](https://github.com/cssnr/zipline-cli/discussions/new?category=feature-requests)
68
76
  > or report any [issues](https://github.com/cssnr/zipline-cli/issues/new).
69
77
 
70
- ## Quick Start
78
+ ## Quick Start<a id="quick-start"></a>
71
79
 
72
80
  ```shell
73
- python3 -m pip install zipline-cli
81
+ python -m pip install zipline-cli
74
82
  zipline --setup
75
83
  ```
76
84
 
77
- Documentation: https://zipline-cli.cssnr.com/
85
+ [![View Documentation](https://img.shields.io/badge/view_documentation-blue?style=for-the-badge&logo=googledocs&logoColor=white)](https://zipline-cli.cssnr.com/)
78
86
 
79
- ## Install
87
+ ## Install<a id="install"></a>
80
88
 
81
89
  From PyPI: https://pypi.org/p/zipline-cli
82
90
 
83
91
  ```shell
84
- python3 -m pip install zipline-cli
92
+ python -m pip install zipline-cli
85
93
  ```
86
94
 
87
95
  From GitHub using pip.
88
96
 
89
97
  ```shell
90
- python3 -m pip install git+https://github.com/cssnr/zipline-cli.git
98
+ python -m pip install git+https://github.com/cssnr/zipline-cli.git
91
99
  ```
92
100
 
93
101
  From Source using pip.
94
102
 
95
103
  ```shell
96
104
  git clone https://github.com/cssnr/zipline-cli.git
97
- python3 -m pip install zipline-cli
105
+ python -m pip install zipline-cli
98
106
  ```
99
107
 
100
108
  Uninstall.
101
109
 
102
110
  ```shell
103
- python3 -m pip uninstall zipline-cli
111
+ python -m pip uninstall zipline-cli
104
112
  ```
105
113
 
106
- ## Usage
114
+ ## Usage<a id="usage"></a>
107
115
 
108
116
  > [!TIP]
109
117
  > View the [Getting Started](https://zipline-cli.cssnr.com/) guide online.
@@ -139,19 +147,19 @@ zipline
139
147
  # Paste or Type contents, followed by a newline, then Ctrl+D (Ctrl+Z on Windows)
140
148
  ```
141
149
 
142
- ## Environment Variables
150
+ ## Environment Variables<a id="environment-variables"></a>
143
151
 
144
152
  Environment Variables are stored in the `.zipline` file in your home directory.
145
153
 
146
154
  - Location: `~/.zipline` or `$HOME/.zipline`
147
155
 
148
- | Variable | Description |
149
- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
150
- | `ZIPLINE_URL` | URL to your Zipline Instance |
151
- | `ZIPLINE_TOKEN` | Authorization Token from Zipline |
152
- | `ZIPLINE_EMBED` | Set this enable Embed on your uploads |
153
- | `ZIPLINE_FORMAT` | Output Format. Variables: `{filename}`, `{url}` and `{raw_url}` |
154
- | `ZIPLINE_EXPIRE` | Reference: [Zipline](https://zipline.diced.tech/docs/guides/upload-options#image-expiration) / [Django Files](https://github.com/onegreyonewhite/pytimeparse2#pytimeparse2-time-expression-parser) |
156
+ | Variable | Description |
157
+ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
158
+ | `ZIPLINE_URL` | URL to your Zipline Instance |
159
+ | `ZIPLINE_TOKEN` | Authorization Token from Zipline |
160
+ | `ZIPLINE_EMBED` | Set this enable Embed on your uploads |
161
+ | `ZIPLINE_FORMAT` | Output Format. Variables: `{filename}`, `{url}` and `{raw_url}` |
162
+ | `ZIPLINE_EXPIRE` | Reference: [Zipline](https://zipline.diced.sh/docs/guides/upload-options#image-expiration) / [Django Files](https://github.com/onegreyonewhite/pytimeparse2#pytimeparse2-time-expression-parser) |
155
163
 
156
164
  See [.zipline.example](.zipline.example) for an example `.zipline` file.
157
165
 
@@ -162,7 +170,7 @@ or using the corresponding command line arguments.
162
170
  zipline -h
163
171
  ```
164
172
 
165
- ## API Reference
173
+ ## API Reference<a id="api-reference"></a>
166
174
 
167
175
  Initialize the class with your Zipline URL.
168
176
  Everything else is a header passed as a kwarg.
@@ -185,7 +193,7 @@ with open('text.txt') as f:
185
193
  print(url)
186
194
  ```
187
195
 
188
- # Support
196
+ # Support<a id="support"></a>
189
197
 
190
198
  For general help or to request a feature, see:
191
199
 
@@ -199,7 +207,7 @@ If you are experiencing an issue/bug or getting unexpected results, you can:
199
207
  - Provide General Feedback: [https://cssnr.github.io/feedback/](https://cssnr.github.io/feedback/?app=zipline-cli)
200
208
  - Chat with us on Discord: https://discord.gg/wXy6m2X8wY
201
209
 
202
- # Contributing
210
+ # Contributing<a id="contributing"></a>
203
211
 
204
212
  All contributions are welcome including [bug reports](https://github.com/cssnr/zipline-cli/issues),
205
213
  [feature requests](https://github.com/cssnr/zipline-cli/discussions/categories/feature-requests),
@@ -3,6 +3,7 @@ MANIFEST.in
3
3
  README.md
4
4
  pyproject.toml
5
5
  src/zipline/__init__.py
6
+ src/zipline/py.typed
6
7
  src/zipline/zipline.py
7
8
  src/zipline_cli.egg-info/PKG-INFO
8
9
  src/zipline_cli.egg-info/SOURCES.txt
File without changes
File without changes
File without changes