exmailer 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,102 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ tags:
8
+ - "v*.*.*" # Triggers only on version tags, e.g., v1.0.0
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ # ------------------------------------------------------------------
15
+ # JOB 1: QUALITY ASSURANCE
16
+ # strictly enforces that tests pass before any build occurs.
17
+ # ------------------------------------------------------------------
18
+ test:
19
+ name: Run Tests
20
+ runs-on: ubuntu-latest
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ python-version: ["3.11", "3.12", "3.13"]
25
+
26
+ steps:
27
+ - name: Checkout Code
28
+ uses: actions/checkout@v4
29
+
30
+ - name: Install uv
31
+ uses: astral-sh/setup-uv@v5
32
+ with:
33
+ version: "latest"
34
+
35
+ - name: Set up Python ${{ matrix.python-version }}
36
+ run: uv python install ${{ matrix.python-version }}
37
+
38
+ - name: Install Project & Dependencies
39
+ run: |
40
+ uv sync --all-extras --dev
41
+
42
+ - name: Run Pytest
43
+ # We use 'uv run' to execute within the isolated environment
44
+ run: uv run pytest
45
+
46
+ # ------------------------------------------------------------------
47
+ # JOB 2: BUILD ARTIFACTS
48
+ # Creates the .whl and .tar.gz files
49
+ # ------------------------------------------------------------------
50
+ build:
51
+ name: Build Distribution
52
+ needs: test
53
+ if: startsWith(github.ref, 'refs/tags/') # Only run on tags
54
+ runs-on: ubuntu-latest
55
+
56
+ steps:
57
+ - name: Checkout Code
58
+ uses: actions/checkout@v4
59
+
60
+ - name: Set up Python
61
+ uses: actions/setup-python@v5
62
+ with:
63
+ python-version: "3.12"
64
+
65
+ - name: Install Build Frontend
66
+ run: python -m pip install build
67
+
68
+ - name: Build Binary (Wheel) and Source (sDist)
69
+ run: python -m build
70
+
71
+ - name: Verify Artifacts
72
+ run: ls -l dist/
73
+
74
+ - name: Upload Artifacts
75
+ uses: actions/upload-artifact@v4
76
+ with:
77
+ name: python-package-distributions
78
+ path: dist/
79
+
80
+ # ------------------------------------------------------------------
81
+ # JOB 3: PUBLISH TO PYPI
82
+ # Uploads the built artifacts to the package registry
83
+ # ------------------------------------------------------------------
84
+ publish:
85
+ name: Upload to PyPI
86
+ needs: build
87
+ runs-on: ubuntu-latest
88
+ environment:
89
+ name: pypi
90
+ url: https://pypi.org/p/exmailer
91
+ permissions:
92
+ id-token: write # MANDATORY for Trusted Publishing
93
+
94
+ steps:
95
+ - name: Download Artifacts
96
+ uses: actions/download-artifact@v4
97
+ with:
98
+ name: python-package-distributions
99
+ path: dist/
100
+
101
+ - name: Publish to PyPI
102
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,212 @@
1
+ exmailer.json
2
+ exmailer.yaml
3
+ .env
4
+
5
+
6
+ # Byte-compiled / optimized / DLL files
7
+ __pycache__/
8
+ *.py[codz]
9
+ *$py.class
10
+
11
+ # C extensions
12
+ *.so
13
+
14
+ # Distribution / packaging
15
+ .Python
16
+ build/
17
+ develop-eggs/
18
+ dist/
19
+ downloads/
20
+ eggs/
21
+ .eggs/
22
+ lib/
23
+ lib64/
24
+ parts/
25
+ sdist/
26
+ var/
27
+ wheels/
28
+ share/python-wheels/
29
+ *.egg-info/
30
+ .installed.cfg
31
+ *.egg
32
+ MANIFEST
33
+
34
+ # PyInstaller
35
+ # Usually these files are written by a python script from a template
36
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
37
+ *.manifest
38
+ *.spec
39
+
40
+ # Installer logs
41
+ pip-log.txt
42
+ pip-delete-this-directory.txt
43
+
44
+ # Unit test / coverage reports
45
+ htmlcov/
46
+ .tox/
47
+ .nox/
48
+ .coverage
49
+ .coverage.*
50
+ .cache
51
+ nosetests.xml
52
+ coverage.xml
53
+ *.cover
54
+ *.py.cover
55
+ .hypothesis/
56
+ .pytest_cache/
57
+ cover/
58
+
59
+ # Translations
60
+ *.mo
61
+ *.pot
62
+
63
+ # Django stuff:
64
+ *.log
65
+ local_settings.py
66
+ db.sqlite3
67
+ db.sqlite3-journal
68
+
69
+ # Flask stuff:
70
+ instance/
71
+ .webassets-cache
72
+
73
+ # Scrapy stuff:
74
+ .scrapy
75
+
76
+ # Sphinx documentation
77
+ docs/_build/
78
+
79
+ # PyBuilder
80
+ .pybuilder/
81
+ target/
82
+
83
+ # Jupyter Notebook
84
+ .ipynb_checkpoints
85
+
86
+ # IPython
87
+ profile_default/
88
+ ipython_config.py
89
+
90
+ # pyenv
91
+ # For a library or package, you might want to ignore these files since the code is
92
+ # intended to run in multiple environments; otherwise, check them in:
93
+ # .python-version
94
+
95
+ # pipenv
96
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
97
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
98
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
99
+ # install all needed dependencies.
100
+ #Pipfile.lock
101
+
102
+ # UV
103
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
104
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
105
+ # commonly ignored for libraries.
106
+ #uv.lock
107
+
108
+ # poetry
109
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
110
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
111
+ # commonly ignored for libraries.
112
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
113
+ #poetry.lock
114
+ #poetry.toml
115
+
116
+ # pdm
117
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
118
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
119
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
120
+ #pdm.lock
121
+ #pdm.toml
122
+ .pdm-python
123
+ .pdm-build/
124
+
125
+ # pixi
126
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
127
+ #pixi.lock
128
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
129
+ # in the .venv directory. It is recommended not to include this directory in version control.
130
+ .pixi
131
+
132
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
133
+ __pypackages__/
134
+
135
+ # Celery stuff
136
+ celerybeat-schedule
137
+ celerybeat.pid
138
+
139
+ # SageMath parsed files
140
+ *.sage.py
141
+
142
+ # Environments
143
+ .env
144
+ .envrc
145
+ .venv
146
+ env/
147
+ venv/
148
+ ENV/
149
+ env.bak/
150
+ venv.bak/
151
+
152
+ # Spyder project settings
153
+ .spyderproject
154
+ .spyproject
155
+
156
+ # Rope project settings
157
+ .ropeproject
158
+
159
+ # mkdocs documentation
160
+ /site
161
+
162
+ # mypy
163
+ .mypy_cache/
164
+ .dmypy.json
165
+ dmypy.json
166
+
167
+ # Pyre type checker
168
+ .pyre/
169
+
170
+ # pytype static type analyzer
171
+ .pytype/
172
+
173
+ # Cython debug symbols
174
+ cython_debug/
175
+
176
+ # PyCharm
177
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
178
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
179
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
180
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
181
+ #.idea/
182
+
183
+ # Abstra
184
+ # Abstra is an AI-powered process automation framework.
185
+ # Ignore directories containing user credentials, local state, and settings.
186
+ # Learn more at https://abstra.io/docs
187
+ .abstra/
188
+
189
+ # Visual Studio Code
190
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
191
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
192
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
193
+ # you could uncomment the following to ignore the entire vscode folder
194
+ # .vscode/
195
+
196
+ # Ruff stuff:
197
+ .ruff_cache/
198
+
199
+ # PyPI configuration file
200
+ .pypirc
201
+
202
+ # Cursor
203
+ # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
204
+ # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
205
+ # refer to https://docs.cursor.com/context/ignore-files
206
+ .cursorignore
207
+ .cursorindexingignore
208
+
209
+ # Marimo
210
+ marimo/_static/
211
+ marimo/_lsp/
212
+ __marimo__/
@@ -0,0 +1,28 @@
1
+ # Use bash on Unix and PowerShell on Windows
2
+ set shell := ["bash", "-cu"]
3
+ set windows-shell := ["pwsh", "-NoLogo", "-Command"]
4
+
5
+ # Default recipe: show help
6
+ default:
7
+ just --list
8
+
9
+ # Install docs dependencies
10
+ docs-install:
11
+ pip install -r docs/requirements.txt
12
+
13
+ # Install package + docs deps (dev mode)
14
+ docs-dev:
15
+ pip install -e .
16
+ pip install -r docs/requirements.txt
17
+
18
+ # Serve docs
19
+ docs-serve:
20
+ mkdocs serve
21
+
22
+ # Build docs
23
+ docs-build:
24
+ mkdocs build
25
+
26
+ # Cross-platform clean (uses Python instead of rm)
27
+ docs-clean:
28
+ python -c "import shutil, pathlib; shutil.rmtree('site', ignore_errors=True)"
@@ -0,0 +1,25 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ version: 2
5
+
6
+ # Set the OS, Python version, and other tools you might need
7
+ build:
8
+ os: ubuntu-24.04
9
+ tools:
10
+ python: "3.13"
11
+ jobs:
12
+ post_install:
13
+ - pip install -e .
14
+
15
+ # Build documentation with MkDocs
16
+ mkdocs:
17
+ configuration: mkdocs.yml
18
+ fail_on_warning: false
19
+
20
+ # Python dependencies for building docs
21
+ python:
22
+ install:
23
+ - method: pip
24
+ path: .
25
+ - requirements: docs/requirements.txt