pullunder 0.0.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.
@@ -0,0 +1,44 @@
1
+ name: Build and Deploy Docs
2
+
3
+ on:
4
+ workflow_call:
5
+ workflow_dispatch:
6
+
7
+ permissions:
8
+ contents: read
9
+ pages: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ build:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v6
17
+ with:
18
+ fetch-depth: 0
19
+ fetch-tags: true
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v7
23
+
24
+ - name: Install dev dependencies
25
+ run: uv sync --dev
26
+
27
+ - name: Build docs
28
+ run: uv run --frozen --no-sync sphinx-build -b html doc doc/_build/html
29
+
30
+ - name: Upload artifact
31
+ uses: actions/upload-pages-artifact@v4
32
+ with:
33
+ path: doc/_build/html
34
+
35
+ deploy:
36
+ environment:
37
+ name: github-pages
38
+ url: ${{ steps.deployment.outputs.page_url }}
39
+ runs-on: ubuntu-latest
40
+ needs: build
41
+ steps:
42
+ - name: Deploy to GitHub Pages
43
+ id: deployment
44
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,30 @@
1
+ name: PyPI release
2
+ on:
3
+ release:
4
+ types: [published]
5
+ jobs:
6
+ test:
7
+ uses: ./.github/workflows/test.yml
8
+ deploy-pypi:
9
+ needs: test
10
+ runs-on: ubuntu-latest
11
+ environment:
12
+ name: pypi
13
+ url: https://pypi.org/p/pullunder
14
+ permissions:
15
+ id-token: write
16
+ contents: read
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v6
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v7
22
+ - name: Install Python
23
+ run: uv python install
24
+ - name: Build
25
+ run: uv build
26
+ - name: Publish
27
+ run: uv publish
28
+ deploy-docs:
29
+ needs: deploy-pypi
30
+ uses: ./.github/workflows/deploy-docs.yml
@@ -0,0 +1,28 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ "master" ]
6
+ pull_request:
7
+ branches: [ "master" ]
8
+ workflow_call:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ test:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+ name: Check out repository code
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v7
21
+ with:
22
+ enable-cache: true
23
+ - name: Install Python
24
+ run: uv python install
25
+ - name: Install dependencies
26
+ run: uv sync --dev --locked
27
+ - name: Test with pytest
28
+ run: uv run pytest
@@ -0,0 +1,299 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ _build
6
+ dist/
7
+ wheels/
8
+ *.egg-info
9
+
10
+ # Virtual environments
11
+ .venv
12
+
13
+
14
+ # Created by https://www.toptal.com/developers/gitignore/api/pycharm+all,vim,python
15
+ # Edit at https://www.toptal.com/developers/gitignore?templates=pycharm+all,vim,python
16
+
17
+ ### PyCharm+all ###
18
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
19
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
20
+
21
+ # User-specific stuff
22
+ .idea/**/workspace.xml
23
+ .idea/**/tasks.xml
24
+ .idea/**/usage.statistics.xml
25
+ .idea/**/dictionaries
26
+ .idea/**/shelf
27
+
28
+ # AWS User-specific
29
+ .idea/**/aws.xml
30
+
31
+ # Generated files
32
+ .idea/**/contentModel.xml
33
+
34
+ # Sensitive or high-churn files
35
+ .idea/**/dataSources/
36
+ .idea/**/dataSources.ids
37
+ .idea/**/dataSources.local.xml
38
+ .idea/**/sqlDataSources.xml
39
+ .idea/**/dynamic.xml
40
+ .idea/**/uiDesigner.xml
41
+ .idea/**/dbnavigator.xml
42
+
43
+ # Gradle
44
+ .idea/**/gradle.xml
45
+ .idea/**/libraries
46
+
47
+ # Gradle and Maven with auto-import
48
+ # When using Gradle or Maven with auto-import, you should exclude module files,
49
+ # since they will be recreated, and may cause churn. Uncomment if using
50
+ # auto-import.
51
+ # .idea/artifacts
52
+ # .idea/compiler.xml
53
+ # .idea/jarRepositories.xml
54
+ # .idea/modules.xml
55
+ # .idea/*.iml
56
+ # .idea/modules
57
+ # *.iml
58
+ # *.ipr
59
+
60
+ # CMake
61
+ cmake-build-*/
62
+
63
+ # Mongo Explorer plugin
64
+ .idea/**/mongoSettings.xml
65
+
66
+ # File-based project format
67
+ *.iws
68
+
69
+ # IntelliJ
70
+ out/
71
+
72
+ # mpeltonen/sbt-idea plugin
73
+ .idea_modules/
74
+
75
+ # JIRA plugin
76
+ atlassian-ide-plugin.xml
77
+
78
+ # Cursive Clojure plugin
79
+ .idea/replstate.xml
80
+
81
+ # SonarLint plugin
82
+ .idea/sonarlint/
83
+
84
+ # Crashlytics plugin (for Android Studio and IntelliJ)
85
+ com_crashlytics_export_strings.xml
86
+ crashlytics.properties
87
+ crashlytics-build.properties
88
+ fabric.properties
89
+
90
+ # Editor-based Rest Client
91
+ .idea/httpRequests
92
+
93
+ # Android studio 3.1+ serialized cache file
94
+ .idea/caches/build_file_checksums.ser
95
+
96
+ ### PyCharm+all Patch ###
97
+ # Ignore everything but code style settings and run configurations
98
+ # that are supposed to be shared within teams.
99
+
100
+ .idea/*
101
+
102
+ !.idea/codeStyles
103
+ !.idea/runConfigurations
104
+
105
+ ### Python ###
106
+ # Byte-compiled / optimized / DLL files
107
+ __pycache__/
108
+ *.py[cod]
109
+ *$py.class
110
+
111
+ # C extensions
112
+ *.so
113
+
114
+ # Distribution / packaging
115
+ .Python
116
+ build/
117
+ develop-eggs/
118
+ dist/
119
+ downloads/
120
+ eggs/
121
+ .eggs/
122
+ lib/
123
+ lib64/
124
+ parts/
125
+ sdist/
126
+ var/
127
+ wheels/
128
+ share/python-wheels/
129
+ *.egg-info/
130
+ .installed.cfg
131
+ *.egg
132
+ MANIFEST
133
+
134
+ # PyInstaller
135
+ # Usually these files are written by a python script from a template
136
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
137
+ *.manifest
138
+ *.spec
139
+
140
+ # Installer logs
141
+ pip-log.txt
142
+ pip-delete-this-directory.txt
143
+
144
+ # Unit test / coverage reports
145
+ htmlcov/
146
+ .tox/
147
+ .nox/
148
+ .coverage
149
+ .coverage.*
150
+ .cache
151
+ nosetests.xml
152
+ coverage.xml
153
+ *.cover
154
+ *.py,cover
155
+ .hypothesis/
156
+ .pytest_cache/
157
+ cover/
158
+
159
+ # Translations
160
+ *.mo
161
+ *.pot
162
+
163
+ # Django stuff:
164
+ *.log
165
+ local_settings.py
166
+ db.sqlite3
167
+ db.sqlite3-journal
168
+
169
+ # Flask stuff:
170
+ instance/
171
+ .webassets-cache
172
+
173
+ # Scrapy stuff:
174
+ .scrapy
175
+
176
+ # Sphinx documentation
177
+ docs/_build/
178
+
179
+ # PyBuilder
180
+ .pybuilder/
181
+ target/
182
+
183
+ # Jupyter Notebook
184
+ .ipynb_checkpoints
185
+
186
+ # IPython
187
+ profile_default/
188
+ ipython_config.py
189
+
190
+ # pyenv
191
+ # For a library or package, you might want to ignore these files since the code is
192
+ # intended to run in multiple environments; otherwise, check them in:
193
+ # .python-version
194
+
195
+ # pipenv
196
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
197
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
198
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
199
+ # install all needed dependencies.
200
+ #Pipfile.lock
201
+
202
+ # poetry
203
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
204
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
205
+ # commonly ignored for libraries.
206
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
207
+ #poetry.lock
208
+
209
+ # pdm
210
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
211
+ #pdm.lock
212
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
213
+ # in version control.
214
+ # https://pdm.fming.dev/#use-with-ide
215
+ .pdm.toml
216
+
217
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
218
+ __pypackages__/
219
+
220
+ # Celery stuff
221
+ celerybeat-schedule
222
+ celerybeat.pid
223
+
224
+ # SageMath parsed files
225
+ *.sage.py
226
+
227
+ # Environments
228
+ .env
229
+ .venv
230
+ env/
231
+ venv/
232
+ ENV/
233
+ env.bak/
234
+ venv.bak/
235
+
236
+ # Spyder project settings
237
+ .spyderproject
238
+ .spyproject
239
+
240
+ # Rope project settings
241
+ .ropeproject
242
+
243
+ # mkdocs documentation
244
+ /site
245
+
246
+ # mypy
247
+ .mypy_cache/
248
+ .dmypy.json
249
+ dmypy.json
250
+
251
+ # Pyre type checker
252
+ .pyre/
253
+
254
+ # pytype static type analyzer
255
+ .pytype/
256
+
257
+ # Cython debug symbols
258
+ cython_debug/
259
+
260
+ # PyCharm
261
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
262
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
263
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
264
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
265
+ #.idea/
266
+
267
+ ### Python Patch ###
268
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
269
+ poetry.toml
270
+
271
+ # ruff
272
+ .ruff_cache/
273
+
274
+ # LSP config files
275
+ pyrightconfig.json
276
+
277
+ ### Vim ###
278
+ # Swap
279
+ [._]*.s[a-v][a-z]
280
+ !*.svg # comment out if you don't need vector files
281
+ [._]*.sw[a-p]
282
+ [._]s[a-rt-v][a-z]
283
+ [._]ss[a-gi-z]
284
+ [._]sw[a-p]
285
+
286
+ # Session
287
+ Session.vim
288
+ Sessionx.vim
289
+
290
+ # Temporary
291
+ .netrwhist
292
+ *~
293
+ # Auto-generated tag files
294
+ tags
295
+ # Persistent undo
296
+ [._]*.un~
297
+
298
+ # End of https://www.toptal.com/developers/gitignore/api/pycharm+all,vim,python
299
+
@@ -0,0 +1,12 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ # Ruff version.
4
+ rev: v0.15.1
5
+ hooks:
6
+ # Run the linter.
7
+ - id: ruff-check
8
+ types_or: [ python, pyi ]
9
+ args: [ --fix ]
10
+ # Run the formatter.
11
+ - id: ruff-format
12
+ types_or: [ python, pyi ]
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: pullunder
3
+ Version: 0.0.2
4
+ Summary: Yet another Python Pushover client
5
+ Author-email: Felix Jung <jung@posteo.de>
6
+ License-Expression: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: requests>=2.32.5
10
+ Requires-Dist: typer>=0.23.0
11
+
12
+ # Pullunder
13
+
14
+ Yet another a Python [Pushover](https://pushover.net/) client.
15
+
@@ -0,0 +1,4 @@
1
+ # Pullunder
2
+
3
+ Yet another a Python [Pushover](https://pushover.net/) client.
4
+
@@ -0,0 +1,20 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD ?= sphinx-build
8
+ SOURCEDIR = source
9
+ BUILDDIR = build
10
+
11
+ # Put it first so that "make" without argument is like "make help".
12
+ help:
13
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
+
15
+ .PHONY: help Makefile
16
+
17
+ # Catch-all target: route all unknown targets to Sphinx using the new
18
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
+ %: Makefile
20
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@@ -0,0 +1,42 @@
1
+ import os
2
+ import sys
3
+ from setuptools_scm import get_version
4
+
5
+ sys.path.insert(0, os.path.abspath(".."))
6
+
7
+ # Configuration file for the Sphinx documentation builder.
8
+ #
9
+ # For the full list of built-in configuration values, see the documentation:
10
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html
11
+
12
+ # -- Project information -----------------------------------------------------
13
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
14
+
15
+ project = "pullunder"
16
+ copyright = "2026, Felix Jung"
17
+ author = "Felix Jung"
18
+ release = version = get_version(root="..", relative_to=__file__)
19
+
20
+ # -- General configuration ---------------------------------------------------
21
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
22
+
23
+ extensions = [
24
+ "sphinx.ext.autodoc",
25
+ "sphinx.ext.napoleon",
26
+ "sphinx_autodoc_typehints",
27
+ ]
28
+
29
+ templates_path = ["_templates"]
30
+ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
31
+
32
+
33
+ # -- Options for HTML output -------------------------------------------------
34
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
35
+
36
+ html_theme = "furo"
37
+ html_static_path = ["_static"]
38
+
39
+ autodoc_typehints = "description"
40
+ autodoc_member_order = "bysource"
41
+ napoleon_google_docstring = False
42
+ napoleon_numpy_docstring = True
@@ -0,0 +1,12 @@
1
+ Welcome to the pullunder documentation!
2
+ =====================================
3
+
4
+ .. toctree::
5
+ :maxdepth: 2
6
+ :caption: Contents:
7
+
8
+ .. automodule:: pullunder
9
+ :members:
10
+ :undoc-members:
11
+ :show-inheritance:
12
+
@@ -0,0 +1,35 @@
1
+ @ECHO OFF
2
+
3
+ pushd %~dp0
4
+
5
+ REM Command file for Sphinx documentation
6
+
7
+ if "%SPHINXBUILD%" == "" (
8
+ set SPHINXBUILD=sphinx-build
9
+ )
10
+ set SOURCEDIR=source
11
+ set BUILDDIR=build
12
+
13
+ %SPHINXBUILD% >NUL 2>NUL
14
+ if errorlevel 9009 (
15
+ echo.
16
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17
+ echo.installed, then set the SPHINXBUILD environment variable to point
18
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
19
+ echo.may add the Sphinx directory to PATH.
20
+ echo.
21
+ echo.If you don't have Sphinx installed, grab it from
22
+ echo.https://www.sphinx-doc.org/
23
+ exit /b 1
24
+ )
25
+
26
+ if "%1" == "" goto help
27
+
28
+ %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
+ goto end
30
+
31
+ :help
32
+ %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
+
34
+ :end
35
+ popd
@@ -0,0 +1,45 @@
1
+ [project]
2
+ name = "pullunder"
3
+ dynamic = ["version"]
4
+ license = "MIT"
5
+ description = "Yet another Python Pushover client"
6
+ readme = "README.md"
7
+ authors = [
8
+ { name = "Felix Jung", email = "jung@posteo.de" }
9
+ ]
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "requests>=2.32.5",
13
+ "typer>=0.23.0",
14
+ ]
15
+
16
+ [project.scripts]
17
+ pullunder = "pullunder.cli:app"
18
+
19
+ [build-system]
20
+ requires = ["setuptools>=64", "setuptools-scm>=8"]
21
+ build-backend = "setuptools.build_meta"
22
+
23
+ [tool.setuptools]
24
+ #zip-safe = false
25
+ include-package-data = false
26
+ py-modules = []
27
+
28
+ [tool.setuptools.packages.find]
29
+ where = ["src"]
30
+
31
+ [tool.setuptools_scm]
32
+ tag_regex = "^v(?P<version>.*)$"
33
+ version_scheme = "guess-next-dev"
34
+ local_scheme = "node-and-date" # or "dirty-tag" for local dev
35
+
36
+ [dependency-groups]
37
+ dev = [
38
+ "furo>=2025.12.19",
39
+ "pytest>=9.0.2",
40
+ "setuptools-scm>=9.2.2",
41
+ "sphinx>=8.1.3",
42
+ "sphinx-autodoc-typehints>=3.0.1",
43
+ "sphinx-copybutton>=0.5.2",
44
+ "sphinx-design>=0.6.1",
45
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
File without changes