summaryrefslogtreecommitdiff
path: root/python-pystalk.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-pystalk.spec')
-rw-r--r--python-pystalk.spec504
1 files changed, 504 insertions, 0 deletions
diff --git a/python-pystalk.spec b/python-pystalk.spec
new file mode 100644
index 0000000..012cc8c
--- /dev/null
+++ b/python-pystalk.spec
@@ -0,0 +1,504 @@
+%global _empty_manifest_terminate_build 0
+Name: python-pystalk
+Version: 0.7.0
+Release: 1
+Summary: Very simple beanstalkd client
+License: ISC
+URL: https://github.com/easypost/pystalk
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/e1/3e/1fd6f5522e1614b562979414e475e63602ad210bb2a708d95301cf9fe530/pystalk-0.7.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-PyYAML
+Requires: python3-attrs
+Requires: python3-six
+
+%description
+**`pystalk`** is an extremely simple Python client for [beanstalkd](http://kr.github.io/beanstalkd/).
+
+This project was initially created for [beancmd](https://github.com/EasyPost/beancmd). You may also be interested in that tool!
+
+[![CI](https://github.com/EasyPost/pystalk/workflows/CI/badge.svg)](https://github.com/EasyPost/pystalk/actions?query=workflow%3ACI)
+[![ReadTheDocs](https://readthedocs.org/projects/pip/badge/?version=latest)](http://pystalk.readthedocs.io/en/latest/)
+
+Note that _none_ of the objects in this package are inherently synchronized (thread-safe), and if you are going to use
+them from multiple threads, you should always protect them with a mutex. Clients are also not fork-safe, and should be
+initialized after any forking.
+
+## Requirements / Installing
+
+This software works with Python 3.6+. It should work PyPy3 but has not been tested extensively.
+
+It does not support any asynchronous event loops and has not been tested with gevent. It's designed for simple,
+synchronous use.
+
+You should be able to install it from [PyPI](https://pypi.python.org) with `pip install pystalk`.
+
+## Example Usage
+
+### Creating Jobs
+
+```python
+#!/usr/bin/python
+
+import json
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+client.put_job(json.dumps({"foo": "bar"}), delay=30)
+```
+
+This will create a job with a 30-second delay on it. Note that the data for a job must be UTF-8 encodable.
+
+#### Creating Jobs in Specific Tubes
+
+Beanstalk has a notion of `tube`s (which is to say, named queues). There are several ways to put a
+job into a specific tube using pystalk:
+
+```python
+#!/usr/bin/python
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+
+# method 1, matches the upstream protocol
+client.use("some_tube")
+client.put_job("some message")
+
+# method 2, using an external guard object like you would in C++ or Rust
+with client.using("some_tube") as inserter:
+ inserter.put_job("some message")
+
+
+# method 3
+client.put_job_into("some_tube", "some message")
+```
+
+### Consuming All Available Jobs
+
+The following script will walk through all currently-READY jobs and then exit:
+
+```python
+#!/usr/bin/python
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+for job in client.reserve_iter():
+ try:
+ execute_job(job)
+ except Exception:
+ client.release_job(job.job_id)
+ raise
+ client.delete_job(job.job_id)
+```
+
+Note that, even though we require that job data be UTF-8 encodeable in the `put_job` method, we do not decode for you -- the job data that comes out is a byte-string in Python 3.5. You should call `.decode("utf-8")` on it if you want to get the input data back out. If you would like that behavior, pass `auto_decode=True` to the `BeanstalkClient` constructor; note that this might make it difficult for you to consume data injected by other systems which don't assume UTF-8.
+
+### Producing into Multiple Job Servers
+
+This library includes the `ProductionPool` class, which will insert jobs into beanstalk servers, rotating between them
+when an error occurs. Example usage:
+
+```python
+from pystalk import BeanstalkClient, ProductionPool
+
+pool = ProductionPool.from_uris(
+ ['beanstalkd://10.0.0.1:10300', 'beanstalkd://10.0.0.2:10300'],
+ socket_timeout=10
+)
+pool.put_job_into('some tube', 'some job')
+```
+
+The Pool **only** supports the `put_job` and `put_job_into` methods and makes no fairness guarantees; you should not use
+it for consumption.
+
+### Consuming From Multiple Job Servers
+
+The following will reserve jobs from a group of Beanstalk servers, fairly rotating between them.
+
+```python
+#!/usr/bin/python
+
+from myapp import execute_job
+from pystalk import BeanstalkClient, BeanstalkTimedOutError
+
+hosts = ('10.0.0.1', '10.0.0.2')
+clients = dict((h, BeanstalkClient(h, 11300)) for h in hosts)
+
+i = 0
+while True:
+ i += 1
+ client = clients[hosts[i % len(hosts)]]
+ try:
+ job = client.reserve_job(1)
+ except BeanstalkError as e:
+ if e.message == 'TIMED_OUT':
+ continue
+ else:
+ raise
+ execute_job(job)
+ client.delete_job(job.job_id)
+```
+
+## Development
+
+Pretty straightforward. Develop in branches, send PRs, land on master. All tests must pass before landing.
+
+### Releasing a new version
+
+ 1. Land all requisite changes
+ 1. Bump the version in `setup.py` and `pystalk/__init__.py` to the stable version (e.g., `0.2`)
+ 1. Update [`CHANGES.rst`](docs/source/CHANGES.rst) with the changes and the new version number
+ 1. Update [`conf.py`](docs/source/conf.py) with the new version number
+ 1. Commit
+ 1. Tag the version (e.g., `git tag -s pystalk-0.2`)
+ 1. Push up to Github
+ 1. Upload to PyPI with `python setup.py sdist upload`
+
+
+%package -n python3-pystalk
+Summary: Very simple beanstalkd client
+Provides: python-pystalk
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-pystalk
+**`pystalk`** is an extremely simple Python client for [beanstalkd](http://kr.github.io/beanstalkd/).
+
+This project was initially created for [beancmd](https://github.com/EasyPost/beancmd). You may also be interested in that tool!
+
+[![CI](https://github.com/EasyPost/pystalk/workflows/CI/badge.svg)](https://github.com/EasyPost/pystalk/actions?query=workflow%3ACI)
+[![ReadTheDocs](https://readthedocs.org/projects/pip/badge/?version=latest)](http://pystalk.readthedocs.io/en/latest/)
+
+Note that _none_ of the objects in this package are inherently synchronized (thread-safe), and if you are going to use
+them from multiple threads, you should always protect them with a mutex. Clients are also not fork-safe, and should be
+initialized after any forking.
+
+## Requirements / Installing
+
+This software works with Python 3.6+. It should work PyPy3 but has not been tested extensively.
+
+It does not support any asynchronous event loops and has not been tested with gevent. It's designed for simple,
+synchronous use.
+
+You should be able to install it from [PyPI](https://pypi.python.org) with `pip install pystalk`.
+
+## Example Usage
+
+### Creating Jobs
+
+```python
+#!/usr/bin/python
+
+import json
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+client.put_job(json.dumps({"foo": "bar"}), delay=30)
+```
+
+This will create a job with a 30-second delay on it. Note that the data for a job must be UTF-8 encodable.
+
+#### Creating Jobs in Specific Tubes
+
+Beanstalk has a notion of `tube`s (which is to say, named queues). There are several ways to put a
+job into a specific tube using pystalk:
+
+```python
+#!/usr/bin/python
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+
+# method 1, matches the upstream protocol
+client.use("some_tube")
+client.put_job("some message")
+
+# method 2, using an external guard object like you would in C++ or Rust
+with client.using("some_tube") as inserter:
+ inserter.put_job("some message")
+
+
+# method 3
+client.put_job_into("some_tube", "some message")
+```
+
+### Consuming All Available Jobs
+
+The following script will walk through all currently-READY jobs and then exit:
+
+```python
+#!/usr/bin/python
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+for job in client.reserve_iter():
+ try:
+ execute_job(job)
+ except Exception:
+ client.release_job(job.job_id)
+ raise
+ client.delete_job(job.job_id)
+```
+
+Note that, even though we require that job data be UTF-8 encodeable in the `put_job` method, we do not decode for you -- the job data that comes out is a byte-string in Python 3.5. You should call `.decode("utf-8")` on it if you want to get the input data back out. If you would like that behavior, pass `auto_decode=True` to the `BeanstalkClient` constructor; note that this might make it difficult for you to consume data injected by other systems which don't assume UTF-8.
+
+### Producing into Multiple Job Servers
+
+This library includes the `ProductionPool` class, which will insert jobs into beanstalk servers, rotating between them
+when an error occurs. Example usage:
+
+```python
+from pystalk import BeanstalkClient, ProductionPool
+
+pool = ProductionPool.from_uris(
+ ['beanstalkd://10.0.0.1:10300', 'beanstalkd://10.0.0.2:10300'],
+ socket_timeout=10
+)
+pool.put_job_into('some tube', 'some job')
+```
+
+The Pool **only** supports the `put_job` and `put_job_into` methods and makes no fairness guarantees; you should not use
+it for consumption.
+
+### Consuming From Multiple Job Servers
+
+The following will reserve jobs from a group of Beanstalk servers, fairly rotating between them.
+
+```python
+#!/usr/bin/python
+
+from myapp import execute_job
+from pystalk import BeanstalkClient, BeanstalkTimedOutError
+
+hosts = ('10.0.0.1', '10.0.0.2')
+clients = dict((h, BeanstalkClient(h, 11300)) for h in hosts)
+
+i = 0
+while True:
+ i += 1
+ client = clients[hosts[i % len(hosts)]]
+ try:
+ job = client.reserve_job(1)
+ except BeanstalkError as e:
+ if e.message == 'TIMED_OUT':
+ continue
+ else:
+ raise
+ execute_job(job)
+ client.delete_job(job.job_id)
+```
+
+## Development
+
+Pretty straightforward. Develop in branches, send PRs, land on master. All tests must pass before landing.
+
+### Releasing a new version
+
+ 1. Land all requisite changes
+ 1. Bump the version in `setup.py` and `pystalk/__init__.py` to the stable version (e.g., `0.2`)
+ 1. Update [`CHANGES.rst`](docs/source/CHANGES.rst) with the changes and the new version number
+ 1. Update [`conf.py`](docs/source/conf.py) with the new version number
+ 1. Commit
+ 1. Tag the version (e.g., `git tag -s pystalk-0.2`)
+ 1. Push up to Github
+ 1. Upload to PyPI with `python setup.py sdist upload`
+
+
+%package help
+Summary: Development documents and examples for pystalk
+Provides: python3-pystalk-doc
+%description help
+**`pystalk`** is an extremely simple Python client for [beanstalkd](http://kr.github.io/beanstalkd/).
+
+This project was initially created for [beancmd](https://github.com/EasyPost/beancmd). You may also be interested in that tool!
+
+[![CI](https://github.com/EasyPost/pystalk/workflows/CI/badge.svg)](https://github.com/EasyPost/pystalk/actions?query=workflow%3ACI)
+[![ReadTheDocs](https://readthedocs.org/projects/pip/badge/?version=latest)](http://pystalk.readthedocs.io/en/latest/)
+
+Note that _none_ of the objects in this package are inherently synchronized (thread-safe), and if you are going to use
+them from multiple threads, you should always protect them with a mutex. Clients are also not fork-safe, and should be
+initialized after any forking.
+
+## Requirements / Installing
+
+This software works with Python 3.6+. It should work PyPy3 but has not been tested extensively.
+
+It does not support any asynchronous event loops and has not been tested with gevent. It's designed for simple,
+synchronous use.
+
+You should be able to install it from [PyPI](https://pypi.python.org) with `pip install pystalk`.
+
+## Example Usage
+
+### Creating Jobs
+
+```python
+#!/usr/bin/python
+
+import json
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+client.put_job(json.dumps({"foo": "bar"}), delay=30)
+```
+
+This will create a job with a 30-second delay on it. Note that the data for a job must be UTF-8 encodable.
+
+#### Creating Jobs in Specific Tubes
+
+Beanstalk has a notion of `tube`s (which is to say, named queues). There are several ways to put a
+job into a specific tube using pystalk:
+
+```python
+#!/usr/bin/python
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+
+# method 1, matches the upstream protocol
+client.use("some_tube")
+client.put_job("some message")
+
+# method 2, using an external guard object like you would in C++ or Rust
+with client.using("some_tube") as inserter:
+ inserter.put_job("some message")
+
+
+# method 3
+client.put_job_into("some_tube", "some message")
+```
+
+### Consuming All Available Jobs
+
+The following script will walk through all currently-READY jobs and then exit:
+
+```python
+#!/usr/bin/python
+
+from pystalk import BeanstalkClient
+
+client = BeanstalkClient('10.0.0.1', 11300)
+for job in client.reserve_iter():
+ try:
+ execute_job(job)
+ except Exception:
+ client.release_job(job.job_id)
+ raise
+ client.delete_job(job.job_id)
+```
+
+Note that, even though we require that job data be UTF-8 encodeable in the `put_job` method, we do not decode for you -- the job data that comes out is a byte-string in Python 3.5. You should call `.decode("utf-8")` on it if you want to get the input data back out. If you would like that behavior, pass `auto_decode=True` to the `BeanstalkClient` constructor; note that this might make it difficult for you to consume data injected by other systems which don't assume UTF-8.
+
+### Producing into Multiple Job Servers
+
+This library includes the `ProductionPool` class, which will insert jobs into beanstalk servers, rotating between them
+when an error occurs. Example usage:
+
+```python
+from pystalk import BeanstalkClient, ProductionPool
+
+pool = ProductionPool.from_uris(
+ ['beanstalkd://10.0.0.1:10300', 'beanstalkd://10.0.0.2:10300'],
+ socket_timeout=10
+)
+pool.put_job_into('some tube', 'some job')
+```
+
+The Pool **only** supports the `put_job` and `put_job_into` methods and makes no fairness guarantees; you should not use
+it for consumption.
+
+### Consuming From Multiple Job Servers
+
+The following will reserve jobs from a group of Beanstalk servers, fairly rotating between them.
+
+```python
+#!/usr/bin/python
+
+from myapp import execute_job
+from pystalk import BeanstalkClient, BeanstalkTimedOutError
+
+hosts = ('10.0.0.1', '10.0.0.2')
+clients = dict((h, BeanstalkClient(h, 11300)) for h in hosts)
+
+i = 0
+while True:
+ i += 1
+ client = clients[hosts[i % len(hosts)]]
+ try:
+ job = client.reserve_job(1)
+ except BeanstalkError as e:
+ if e.message == 'TIMED_OUT':
+ continue
+ else:
+ raise
+ execute_job(job)
+ client.delete_job(job.job_id)
+```
+
+## Development
+
+Pretty straightforward. Develop in branches, send PRs, land on master. All tests must pass before landing.
+
+### Releasing a new version
+
+ 1. Land all requisite changes
+ 1. Bump the version in `setup.py` and `pystalk/__init__.py` to the stable version (e.g., `0.2`)
+ 1. Update [`CHANGES.rst`](docs/source/CHANGES.rst) with the changes and the new version number
+ 1. Update [`conf.py`](docs/source/conf.py) with the new version number
+ 1. Commit
+ 1. Tag the version (e.g., `git tag -s pystalk-0.2`)
+ 1. Push up to Github
+ 1. Upload to PyPI with `python setup.py sdist upload`
+
+
+%prep
+%autosetup -n pystalk-0.7.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-pystalk -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu Mar 09 2023 Python_Bot <Python_Bot@openeuler.org> - 0.7.0-1
+- Package Spec generated