diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-10 06:53:05 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-10 06:53:05 +0000 |
| commit | 6ab0a0d1d0f24ee6045bf39f3c43d480c7cd2eeb (patch) | |
| tree | 41cc3e2e5d0f2da718bdc92e29f67e3e5f3b72e4 /python-smtpdfix.spec | |
| parent | 0ac917efe4a06f94843ac167befe17758d6f63e3 (diff) | |
automatic import of python-smtpdfix
Diffstat (limited to 'python-smtpdfix.spec')
| -rw-r--r-- | python-smtpdfix.spec | 288 |
1 files changed, 288 insertions, 0 deletions
diff --git a/python-smtpdfix.spec b/python-smtpdfix.spec new file mode 100644 index 0000000..da30a55 --- /dev/null +++ b/python-smtpdfix.spec @@ -0,0 +1,288 @@ +%global _empty_manifest_terminate_build 0 +Name: python-smtpdfix +Version: 0.5.0 +Release: 1 +Summary: A SMTP server for use as a pytest fixture that implements encryption and authentication for testing. +License: MIT +URL: https://github.com/bebleo/smtpdfix +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/5d/53/ae0e6f30af8d8d6beb196e6d5a2234eb48804be2b8afbc4c2670025fb6c4/smtpdfix-0.5.0.tar.gz +BuildArch: noarch + +Requires: python3-aiosmtpd +Requires: python3-portpicker +Requires: python3-pytest +Requires: python3-cryptography +Requires: python3-cryptography +Requires: python3-flake8 +Requires: python3-isort +Requires: python3-pytest-asyncio +Requires: python3-pytest-cov +Requires: python3-pytest-timeout +Requires: python3-tox +Requires: python3-mypy + +%description +`host` | `SMTPD_HOST` | `127.0.0.1` or `::1` | The hostname that the fixture will listen on. +`port` | `SMTPD_PORT` | `a random free port` | The port that the fixture will listen on. +`ready_timeout` | `SMTPD_READY_TIMEOUT` | `10.0` | The seconds the server will wait to start before raising a `TimeoutError`. +`login_username` | `SMTPD_LOGIN_NAME` | `user` | Username for default authentication. +`login_password` | `SMTPD_LOGIN_PASSWORD` | `password` | Password for default authentication. +`use_ssl` | `SMTPD_USE_SSL` | `False` | Whether the fixture should use fixed TLS/SSL for transactions. If using smtplib requires that `SMTP_SSL` be used instead of `SMTP`. +`use_starttls` | `SMTPD_USE_STARTTLS` | `False` | Whether the fixture should use StartTLS to encrypt the connections. If using `smtplib` requires that `SMTP.starttls()` is called before other commands are issued. Overrides `use_tls` as the preferred method for securing communications with the client. +`enforce_auth` | `SMTPD_ENFORCE_AUTH` | `False` | If set to true then the fixture refuses MAIL, RCPT, DATA commands until authentication is completed. +`ssl_cert_path` | `SMTPD_SSL_CERTS_PATH` | `./certs/` | The path to the key and certificate in PEM format for encryption with SSL/TLS or StartTLS. +`ssl_cert_files` | `SMTPD_SSL_CERT_FILE` and `SMTPD_SSL_KEY_FILE` | `("cert.pem", None)` | A tuple of the path for the certificate file and key file in PEM format. See [Resolving certificate and key paths](#resolving-certificate-and-key-paths) for more details. +### Resolving certificate and key paths +In order to resolve the certificate and key paths for the SSL/TLS context SMTPDFix does the following: +1. On initialization of a `smtpdfix.Config` the `ssl_cert_path` is set by the `SMTPD_SSL_CERTS_PATH` environment variable and the `ssl_cert_files` is set to a tuple of `(SMTPD_SSL_CERT_FILE and SMTPD_SSL_KEY_FILE)`. If the environment variables are not set the deafults are used. +2. If an SSL Context is needed, when the `smptdfix.AuthController` is initialized it will attempt to find the files in the following sequence for both the certificate file and the key file: + 1. If the value in `ssl_cert_files` is `None` then `None` is returned. Setting the key file to be none assumes that it has been included in the certificate file. + 2. If the value in `ssl_cert_files` is a valid path to a file then this is returned. + 3. `ssl_cert_path` and the value from `ssl_cert_files` are joined and returned if it a valid path to a file. + 4. A `FileNotFoundError` is raised. +An example, assuming that the certificate and key are written in a single PEM file located at `./certificates/localhost.cert.pem` would be: +```python +from smtplib import STMP_SSL +def test_custom_certificate(smtpd): + smtpd.config.ssl_cert_files = "./certificates/localhost.cert.pem" + smtpd.config.use_ssl = True + from_ = "from.addr@example.org" + to_ = "to.addr@example.org" + msg = (f"From: {from_}\r\n" + f"To: {to_}\r\n" + f"Subject: Foo\r\n\r\n" + f"Foo bar") + with SMTP_SSL(smtpd.hostname, smtpd.port) as client: + client.sendmail(from_addr, to_addrs, msg) + assert len(smtpd.messages) == 1 +``` +## Alternatives +Many libraries for sending email have built-in methods for testing and using these methods should generally be prefered over SMTPDFix. Some known solutions: ++ **fastapi-mail**: has a `record_messsages()` method to intercept the mail. Instructions on how to suppress the sending of mail and implement it can be seen at [https://sabuhish.github.io/fastapi-mail/example/#unittests-using-fastapimail](https://sabuhish.github.io/fastapi-mail/example/#unittests-using-fastapimail) ++ **flask-mail**: has a method to suppress sending and capture the email for testing purposes. [Instructions](https://pythonhosted.org/Flask-Mail/#unit-tests-and-suppressing-emails) +## Developing +To develop and test smtpdfix you will need to install [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to run asynchronous tests, [isort](https://pycqa.github.io/isort/) to sort imports and [flake8](https://flake8.pycqa.org/en/latest/) to lint. To install in a virtual environment for development: +```bash +$ python -m venv venv +$ ./venv/scripts/activate +$ pip install -e .[dev] +``` +Code is tested using tox: +```bash +$ tox +``` +Quick tests can be handled by running pytest directly: +```bash +$ pytest -p no:smtpd --cov +``` +Before submitting a pull request with your changes you should ensure that all imports are sorted and that the code passes linting with flake8. +```bash +$ isort . +$ flake8 . +``` +We include a [pre-commit](https://pre-commit.com/) configuration file to automate checks and clean up imports before pushing code. In order to install pre-commit git hooks: +```bash +$ pip install pre-commit +$ pre-commit install +``` +## Known Issues ++ Firewalls may interfere with the operation of the smtp server. ++ Authenticating with LOGIN and PLAIN mechanisms fails over TLS/SSL, but works with STARTTLS. [Issue #10](https://github.com/bebleo/smtpdfix/issues/10) ++ Currently no support for termination through signals. [Issue #4](https://github.com/bebleo/smtpdfix/issues/4) ++ If the fixture start exceeds the `ready_timeout` and aborts the host and port are not consistently released and subsequent uses may result in an error. [Issue #80](https://github.com/bebleo/smtpdfix/issues/80) +Written with ☕ and ❤ in Montreal, QC + +%package -n python3-smtpdfix +Summary: A SMTP server for use as a pytest fixture that implements encryption and authentication for testing. +Provides: python-smtpdfix +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-smtpdfix +`host` | `SMTPD_HOST` | `127.0.0.1` or `::1` | The hostname that the fixture will listen on. +`port` | `SMTPD_PORT` | `a random free port` | The port that the fixture will listen on. +`ready_timeout` | `SMTPD_READY_TIMEOUT` | `10.0` | The seconds the server will wait to start before raising a `TimeoutError`. +`login_username` | `SMTPD_LOGIN_NAME` | `user` | Username for default authentication. +`login_password` | `SMTPD_LOGIN_PASSWORD` | `password` | Password for default authentication. +`use_ssl` | `SMTPD_USE_SSL` | `False` | Whether the fixture should use fixed TLS/SSL for transactions. If using smtplib requires that `SMTP_SSL` be used instead of `SMTP`. +`use_starttls` | `SMTPD_USE_STARTTLS` | `False` | Whether the fixture should use StartTLS to encrypt the connections. If using `smtplib` requires that `SMTP.starttls()` is called before other commands are issued. Overrides `use_tls` as the preferred method for securing communications with the client. +`enforce_auth` | `SMTPD_ENFORCE_AUTH` | `False` | If set to true then the fixture refuses MAIL, RCPT, DATA commands until authentication is completed. +`ssl_cert_path` | `SMTPD_SSL_CERTS_PATH` | `./certs/` | The path to the key and certificate in PEM format for encryption with SSL/TLS or StartTLS. +`ssl_cert_files` | `SMTPD_SSL_CERT_FILE` and `SMTPD_SSL_KEY_FILE` | `("cert.pem", None)` | A tuple of the path for the certificate file and key file in PEM format. See [Resolving certificate and key paths](#resolving-certificate-and-key-paths) for more details. +### Resolving certificate and key paths +In order to resolve the certificate and key paths for the SSL/TLS context SMTPDFix does the following: +1. On initialization of a `smtpdfix.Config` the `ssl_cert_path` is set by the `SMTPD_SSL_CERTS_PATH` environment variable and the `ssl_cert_files` is set to a tuple of `(SMTPD_SSL_CERT_FILE and SMTPD_SSL_KEY_FILE)`. If the environment variables are not set the deafults are used. +2. If an SSL Context is needed, when the `smptdfix.AuthController` is initialized it will attempt to find the files in the following sequence for both the certificate file and the key file: + 1. If the value in `ssl_cert_files` is `None` then `None` is returned. Setting the key file to be none assumes that it has been included in the certificate file. + 2. If the value in `ssl_cert_files` is a valid path to a file then this is returned. + 3. `ssl_cert_path` and the value from `ssl_cert_files` are joined and returned if it a valid path to a file. + 4. A `FileNotFoundError` is raised. +An example, assuming that the certificate and key are written in a single PEM file located at `./certificates/localhost.cert.pem` would be: +```python +from smtplib import STMP_SSL +def test_custom_certificate(smtpd): + smtpd.config.ssl_cert_files = "./certificates/localhost.cert.pem" + smtpd.config.use_ssl = True + from_ = "from.addr@example.org" + to_ = "to.addr@example.org" + msg = (f"From: {from_}\r\n" + f"To: {to_}\r\n" + f"Subject: Foo\r\n\r\n" + f"Foo bar") + with SMTP_SSL(smtpd.hostname, smtpd.port) as client: + client.sendmail(from_addr, to_addrs, msg) + assert len(smtpd.messages) == 1 +``` +## Alternatives +Many libraries for sending email have built-in methods for testing and using these methods should generally be prefered over SMTPDFix. Some known solutions: ++ **fastapi-mail**: has a `record_messsages()` method to intercept the mail. Instructions on how to suppress the sending of mail and implement it can be seen at [https://sabuhish.github.io/fastapi-mail/example/#unittests-using-fastapimail](https://sabuhish.github.io/fastapi-mail/example/#unittests-using-fastapimail) ++ **flask-mail**: has a method to suppress sending and capture the email for testing purposes. [Instructions](https://pythonhosted.org/Flask-Mail/#unit-tests-and-suppressing-emails) +## Developing +To develop and test smtpdfix you will need to install [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to run asynchronous tests, [isort](https://pycqa.github.io/isort/) to sort imports and [flake8](https://flake8.pycqa.org/en/latest/) to lint. To install in a virtual environment for development: +```bash +$ python -m venv venv +$ ./venv/scripts/activate +$ pip install -e .[dev] +``` +Code is tested using tox: +```bash +$ tox +``` +Quick tests can be handled by running pytest directly: +```bash +$ pytest -p no:smtpd --cov +``` +Before submitting a pull request with your changes you should ensure that all imports are sorted and that the code passes linting with flake8. +```bash +$ isort . +$ flake8 . +``` +We include a [pre-commit](https://pre-commit.com/) configuration file to automate checks and clean up imports before pushing code. In order to install pre-commit git hooks: +```bash +$ pip install pre-commit +$ pre-commit install +``` +## Known Issues ++ Firewalls may interfere with the operation of the smtp server. ++ Authenticating with LOGIN and PLAIN mechanisms fails over TLS/SSL, but works with STARTTLS. [Issue #10](https://github.com/bebleo/smtpdfix/issues/10) ++ Currently no support for termination through signals. [Issue #4](https://github.com/bebleo/smtpdfix/issues/4) ++ If the fixture start exceeds the `ready_timeout` and aborts the host and port are not consistently released and subsequent uses may result in an error. [Issue #80](https://github.com/bebleo/smtpdfix/issues/80) +Written with ☕ and ❤ in Montreal, QC + +%package help +Summary: Development documents and examples for smtpdfix +Provides: python3-smtpdfix-doc +%description help +`host` | `SMTPD_HOST` | `127.0.0.1` or `::1` | The hostname that the fixture will listen on. +`port` | `SMTPD_PORT` | `a random free port` | The port that the fixture will listen on. +`ready_timeout` | `SMTPD_READY_TIMEOUT` | `10.0` | The seconds the server will wait to start before raising a `TimeoutError`. +`login_username` | `SMTPD_LOGIN_NAME` | `user` | Username for default authentication. +`login_password` | `SMTPD_LOGIN_PASSWORD` | `password` | Password for default authentication. +`use_ssl` | `SMTPD_USE_SSL` | `False` | Whether the fixture should use fixed TLS/SSL for transactions. If using smtplib requires that `SMTP_SSL` be used instead of `SMTP`. +`use_starttls` | `SMTPD_USE_STARTTLS` | `False` | Whether the fixture should use StartTLS to encrypt the connections. If using `smtplib` requires that `SMTP.starttls()` is called before other commands are issued. Overrides `use_tls` as the preferred method for securing communications with the client. +`enforce_auth` | `SMTPD_ENFORCE_AUTH` | `False` | If set to true then the fixture refuses MAIL, RCPT, DATA commands until authentication is completed. +`ssl_cert_path` | `SMTPD_SSL_CERTS_PATH` | `./certs/` | The path to the key and certificate in PEM format for encryption with SSL/TLS or StartTLS. +`ssl_cert_files` | `SMTPD_SSL_CERT_FILE` and `SMTPD_SSL_KEY_FILE` | `("cert.pem", None)` | A tuple of the path for the certificate file and key file in PEM format. See [Resolving certificate and key paths](#resolving-certificate-and-key-paths) for more details. +### Resolving certificate and key paths +In order to resolve the certificate and key paths for the SSL/TLS context SMTPDFix does the following: +1. On initialization of a `smtpdfix.Config` the `ssl_cert_path` is set by the `SMTPD_SSL_CERTS_PATH` environment variable and the `ssl_cert_files` is set to a tuple of `(SMTPD_SSL_CERT_FILE and SMTPD_SSL_KEY_FILE)`. If the environment variables are not set the deafults are used. +2. If an SSL Context is needed, when the `smptdfix.AuthController` is initialized it will attempt to find the files in the following sequence for both the certificate file and the key file: + 1. If the value in `ssl_cert_files` is `None` then `None` is returned. Setting the key file to be none assumes that it has been included in the certificate file. + 2. If the value in `ssl_cert_files` is a valid path to a file then this is returned. + 3. `ssl_cert_path` and the value from `ssl_cert_files` are joined and returned if it a valid path to a file. + 4. A `FileNotFoundError` is raised. +An example, assuming that the certificate and key are written in a single PEM file located at `./certificates/localhost.cert.pem` would be: +```python +from smtplib import STMP_SSL +def test_custom_certificate(smtpd): + smtpd.config.ssl_cert_files = "./certificates/localhost.cert.pem" + smtpd.config.use_ssl = True + from_ = "from.addr@example.org" + to_ = "to.addr@example.org" + msg = (f"From: {from_}\r\n" + f"To: {to_}\r\n" + f"Subject: Foo\r\n\r\n" + f"Foo bar") + with SMTP_SSL(smtpd.hostname, smtpd.port) as client: + client.sendmail(from_addr, to_addrs, msg) + assert len(smtpd.messages) == 1 +``` +## Alternatives +Many libraries for sending email have built-in methods for testing and using these methods should generally be prefered over SMTPDFix. Some known solutions: ++ **fastapi-mail**: has a `record_messsages()` method to intercept the mail. Instructions on how to suppress the sending of mail and implement it can be seen at [https://sabuhish.github.io/fastapi-mail/example/#unittests-using-fastapimail](https://sabuhish.github.io/fastapi-mail/example/#unittests-using-fastapimail) ++ **flask-mail**: has a method to suppress sending and capture the email for testing purposes. [Instructions](https://pythonhosted.org/Flask-Mail/#unit-tests-and-suppressing-emails) +## Developing +To develop and test smtpdfix you will need to install [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to run asynchronous tests, [isort](https://pycqa.github.io/isort/) to sort imports and [flake8](https://flake8.pycqa.org/en/latest/) to lint. To install in a virtual environment for development: +```bash +$ python -m venv venv +$ ./venv/scripts/activate +$ pip install -e .[dev] +``` +Code is tested using tox: +```bash +$ tox +``` +Quick tests can be handled by running pytest directly: +```bash +$ pytest -p no:smtpd --cov +``` +Before submitting a pull request with your changes you should ensure that all imports are sorted and that the code passes linting with flake8. +```bash +$ isort . +$ flake8 . +``` +We include a [pre-commit](https://pre-commit.com/) configuration file to automate checks and clean up imports before pushing code. In order to install pre-commit git hooks: +```bash +$ pip install pre-commit +$ pre-commit install +``` +## Known Issues ++ Firewalls may interfere with the operation of the smtp server. ++ Authenticating with LOGIN and PLAIN mechanisms fails over TLS/SSL, but works with STARTTLS. [Issue #10](https://github.com/bebleo/smtpdfix/issues/10) ++ Currently no support for termination through signals. [Issue #4](https://github.com/bebleo/smtpdfix/issues/4) ++ If the fixture start exceeds the `ready_timeout` and aborts the host and port are not consistently released and subsequent uses may result in an error. [Issue #80](https://github.com/bebleo/smtpdfix/issues/80) +Written with ☕ and ❤ in Montreal, QC + +%prep +%autosetup -n smtpdfix-0.5.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-smtpdfix -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.5.0-1 +- Package Spec generated |
