diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-fpx.spec | 638 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 640 insertions, 0 deletions
@@ -0,0 +1 @@ +/fpx-0.4.8.tar.gz diff --git a/python-fpx.spec b/python-fpx.spec new file mode 100644 index 0000000..922d497 --- /dev/null +++ b/python-fpx.spec @@ -0,0 +1,638 @@ +%global _empty_manifest_terminate_build 0 +Name: python-fpx +Version: 0.4.8 +Release: 1 +Summary: Stream archiver/proxy +License: AGPL +URL: https://github.com/DataShades/fpx +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/00/ca/0330b5f99906cfcf934edbeef7210c9af3615407ca33bdc256bc280a896b/fpx-0.4.8.tar.gz +BuildArch: noarch + +Requires: python3-typing-extensions +Requires: python3-sanic[ext] +Requires: python3-asyncblink +Requires: python3-sqlalchemy +Requires: python3-alembic +Requires: python3-aiohttp[speedups] +Requires: python3-click +Requires: python3-webargs-sanic +Requires: python3-pyjwt +Requires: python3-websockets +Requires: python3-psycopg2 +Requires: python3-sanic-testing +Requires: python3-pytest +Requires: python3-pytest-asyncio +Requires: python3-factory-boy +Requires: python3-pytest-factoryboy +Requires: python3-aioresponses + +%description +# FPX + +Standalone service for collecting content from multiple source into single +file. Typical usecase is downloading multiple files as archive using single +link. Internally FPX fetches content from the specified set of URLs and streams +zip-compressed stream to the end users. + + +# Requirements + +* Python v3.8 or newer +* DB driver. If you are using SQLite, no extra modules required. For other + providers, install corresponding SQLAlchemy adapter. For example, if you are + using PostgreSQL, install `psycopg2`: + ```sh + pip install psycopg2 + ``` + + FPX has a set of predefined lists of dependencies for providers that were + tested on development stage. You can just install all the required + dependencies using package extra, when installing FPX itself: + ```sh + pip install 'fpx[postgresql]' + ``` + + Supported options are: + + * `postgresql` + + +# Installation + +1. Install `fpx` package. + ```sh + pip install fpx + ``` + +# Usage + + +# Complete Installation Guide (AmazonLinux) + +1. Install Python 3.8 or newer using `pyenv`: + ```sh + # install build dependencies + sudo yum install -y openssl-devel readline-devel zlib-devel bzip2-devel libffi-devel + + # install `pyenv` + git clone https://github.com/pyenv/pyenv.git ~/.pyenv + # this require `chmod +x $HOME` if you are going to use different user for running services with installed python executable + echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile + echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile + echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile + + # install python + pyenv install 3.8.2 + ``` + +1. Create virtual environment for FPX and install it: + ```sh + pyenv shell 3.8.2 + cd ~/.virtualenvs + python -m venv fpx + cd fpx + source bin/activate + pip install 'fpx~=0.4.0' + ``` + +1. Create config file. It can be created anywhere, as long as it accessible by FPX service: + ```sh + echo ' + PORT = 12321 + # DB is not used much, so SQLite can be used as long as you are going to use single instance of FPX service. If you planning to use multiple instances + load balancer, consider using PostgreSQL + DB_URL = "sqlite:////home/user/.virtualenvs/fpx/fpx.db" + # Any other options passed directly to the SQLAlchemy engine constructor(https://docs.sqlalchemy.org/en/13/core/engines.html#sqlalchemy.create_engine) + DB_EXTRAS = { + # "pool_size": 10, + # "max_overflow": 20, + } + ' > /etc/fpx/fpx.py + ``` + +1. Initialize database and create access token for client: + ```sh + export FPX_CONFIG=/etc/fpx/fpx.py + fpx db up + fpx client add my-first-fpx-client # use any name, that match `[\w_-]` + ``` + + Make sure, db is accessible and writable by FPX service. This + manual suggests using `apache` user when configuring supervisor's + process, so following command required: + ```sh + chown apache:apache /home/user/.virtualenvs/fpx/fpx.db + ``` + +1. Test service: + ```sh + FPX_CONFIG=/etc/fpx/fpx.py fpx server run + # or, if you want to explicitely use python interpreter + FPX_CONFIG=/etc/fpx/fpx.py python -m fpx + ``` + +1. Configure system.d/supervisor/etc. unit for fpx. Make sure, that + `fpx server run` command, that spins up the service is executed using + python>=3.6 (`pyenv shell 3.8.2`). And, if SQLite is used, fpx + process has write access to db file: + ```ini + [program:fpx-worker] + + ; Use the full paths to the virtualenv and your configuration file here. + command=/home/user/.virtualenv/fpx/bin/python -m fpx + + environment=FPX_CONFIG=/etc/fpx/fpx.py + + ; User the worker runs as. + user=apache + + ; Start just a single worker. Increase this number if you have many or + ; particularly long running background jobs. + numprocs=1 + process_name=%(program_name)s-%(process_num)02d + + ; Log files. + stdout_logfile=/var/log/fpx-worker.log + stderr_logfile=/var/log/fpx-worker.log + + ; Make sure that the worker is started on system start and automatically + ; restarted if it crashes unexpectedly. + autostart=true + autorestart=true + + ; Number of seconds the process has to run before it is considered to have + ; started successfully. + startsecs=10 + + ; Need to wait for currently executing tasks to finish at shutdown. + ; Increase this if you have very long running tasks. + stopwaitsecs = 600 + ``` + +1. FPX service must be available via public url. As written in + [documentation](https://sanic.readthedocs.io/en/latest/sanic/deploying.html#deploying), + no additional layers required. But if you decide to use it with Nginx, the + [following + link](https://sanic.readthedocs.io/en/latest/sanic/nginx.html#nginx-configuration) + may be useful. Note, if `FPX_NO_QUEUE` set to `False`, FPX is using + websockets (if it can somehow affect configuration). + + Example of Nginx section for FPX: + ```conf + location /fpx/ { + proxy_pass http://127.0.0.1:12321/; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_request_buffering off; + proxy_buffering off; + + # When FPX_NO_QUEUE option set to `False` + proxy_set_header connection "upgrade"; + proxy_set_header upgrade $http_upgrade; + + # In emergency comment out line to force caching + # proxy_ignore_headers X-Accel-Expires Expires Cache-Control; + } + ``` + + Example of apache configuration: + ```cond + # mod_proxy + # mod_proxy_http + ProxyPass /fpx/ http://0.0.0.0:8000/ + ProxyPassReverse /fpx/ http://0.0.0.0:8000/ + + # When FPX_NO_QUEUE option set to `False` + # mod_proxy_wstunnel + # mod_rewrite + RewriteEngine on + RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] + RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] + RewriteRule /fpx/(.*) ws://0.0.0.0:8000/$1 [P] + ``` + + +%package -n python3-fpx +Summary: Stream archiver/proxy +Provides: python-fpx +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-fpx +# FPX + +Standalone service for collecting content from multiple source into single +file. Typical usecase is downloading multiple files as archive using single +link. Internally FPX fetches content from the specified set of URLs and streams +zip-compressed stream to the end users. + + +# Requirements + +* Python v3.8 or newer +* DB driver. If you are using SQLite, no extra modules required. For other + providers, install corresponding SQLAlchemy adapter. For example, if you are + using PostgreSQL, install `psycopg2`: + ```sh + pip install psycopg2 + ``` + + FPX has a set of predefined lists of dependencies for providers that were + tested on development stage. You can just install all the required + dependencies using package extra, when installing FPX itself: + ```sh + pip install 'fpx[postgresql]' + ``` + + Supported options are: + + * `postgresql` + + +# Installation + +1. Install `fpx` package. + ```sh + pip install fpx + ``` + +# Usage + + +# Complete Installation Guide (AmazonLinux) + +1. Install Python 3.8 or newer using `pyenv`: + ```sh + # install build dependencies + sudo yum install -y openssl-devel readline-devel zlib-devel bzip2-devel libffi-devel + + # install `pyenv` + git clone https://github.com/pyenv/pyenv.git ~/.pyenv + # this require `chmod +x $HOME` if you are going to use different user for running services with installed python executable + echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile + echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile + echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile + + # install python + pyenv install 3.8.2 + ``` + +1. Create virtual environment for FPX and install it: + ```sh + pyenv shell 3.8.2 + cd ~/.virtualenvs + python -m venv fpx + cd fpx + source bin/activate + pip install 'fpx~=0.4.0' + ``` + +1. Create config file. It can be created anywhere, as long as it accessible by FPX service: + ```sh + echo ' + PORT = 12321 + # DB is not used much, so SQLite can be used as long as you are going to use single instance of FPX service. If you planning to use multiple instances + load balancer, consider using PostgreSQL + DB_URL = "sqlite:////home/user/.virtualenvs/fpx/fpx.db" + # Any other options passed directly to the SQLAlchemy engine constructor(https://docs.sqlalchemy.org/en/13/core/engines.html#sqlalchemy.create_engine) + DB_EXTRAS = { + # "pool_size": 10, + # "max_overflow": 20, + } + ' > /etc/fpx/fpx.py + ``` + +1. Initialize database and create access token for client: + ```sh + export FPX_CONFIG=/etc/fpx/fpx.py + fpx db up + fpx client add my-first-fpx-client # use any name, that match `[\w_-]` + ``` + + Make sure, db is accessible and writable by FPX service. This + manual suggests using `apache` user when configuring supervisor's + process, so following command required: + ```sh + chown apache:apache /home/user/.virtualenvs/fpx/fpx.db + ``` + +1. Test service: + ```sh + FPX_CONFIG=/etc/fpx/fpx.py fpx server run + # or, if you want to explicitely use python interpreter + FPX_CONFIG=/etc/fpx/fpx.py python -m fpx + ``` + +1. Configure system.d/supervisor/etc. unit for fpx. Make sure, that + `fpx server run` command, that spins up the service is executed using + python>=3.6 (`pyenv shell 3.8.2`). And, if SQLite is used, fpx + process has write access to db file: + ```ini + [program:fpx-worker] + + ; Use the full paths to the virtualenv and your configuration file here. + command=/home/user/.virtualenv/fpx/bin/python -m fpx + + environment=FPX_CONFIG=/etc/fpx/fpx.py + + ; User the worker runs as. + user=apache + + ; Start just a single worker. Increase this number if you have many or + ; particularly long running background jobs. + numprocs=1 + process_name=%(program_name)s-%(process_num)02d + + ; Log files. + stdout_logfile=/var/log/fpx-worker.log + stderr_logfile=/var/log/fpx-worker.log + + ; Make sure that the worker is started on system start and automatically + ; restarted if it crashes unexpectedly. + autostart=true + autorestart=true + + ; Number of seconds the process has to run before it is considered to have + ; started successfully. + startsecs=10 + + ; Need to wait for currently executing tasks to finish at shutdown. + ; Increase this if you have very long running tasks. + stopwaitsecs = 600 + ``` + +1. FPX service must be available via public url. As written in + [documentation](https://sanic.readthedocs.io/en/latest/sanic/deploying.html#deploying), + no additional layers required. But if you decide to use it with Nginx, the + [following + link](https://sanic.readthedocs.io/en/latest/sanic/nginx.html#nginx-configuration) + may be useful. Note, if `FPX_NO_QUEUE` set to `False`, FPX is using + websockets (if it can somehow affect configuration). + + Example of Nginx section for FPX: + ```conf + location /fpx/ { + proxy_pass http://127.0.0.1:12321/; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_request_buffering off; + proxy_buffering off; + + # When FPX_NO_QUEUE option set to `False` + proxy_set_header connection "upgrade"; + proxy_set_header upgrade $http_upgrade; + + # In emergency comment out line to force caching + # proxy_ignore_headers X-Accel-Expires Expires Cache-Control; + } + ``` + + Example of apache configuration: + ```cond + # mod_proxy + # mod_proxy_http + ProxyPass /fpx/ http://0.0.0.0:8000/ + ProxyPassReverse /fpx/ http://0.0.0.0:8000/ + + # When FPX_NO_QUEUE option set to `False` + # mod_proxy_wstunnel + # mod_rewrite + RewriteEngine on + RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] + RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] + RewriteRule /fpx/(.*) ws://0.0.0.0:8000/$1 [P] + ``` + + +%package help +Summary: Development documents and examples for fpx +Provides: python3-fpx-doc +%description help +# FPX + +Standalone service for collecting content from multiple source into single +file. Typical usecase is downloading multiple files as archive using single +link. Internally FPX fetches content from the specified set of URLs and streams +zip-compressed stream to the end users. + + +# Requirements + +* Python v3.8 or newer +* DB driver. If you are using SQLite, no extra modules required. For other + providers, install corresponding SQLAlchemy adapter. For example, if you are + using PostgreSQL, install `psycopg2`: + ```sh + pip install psycopg2 + ``` + + FPX has a set of predefined lists of dependencies for providers that were + tested on development stage. You can just install all the required + dependencies using package extra, when installing FPX itself: + ```sh + pip install 'fpx[postgresql]' + ``` + + Supported options are: + + * `postgresql` + + +# Installation + +1. Install `fpx` package. + ```sh + pip install fpx + ``` + +# Usage + + +# Complete Installation Guide (AmazonLinux) + +1. Install Python 3.8 or newer using `pyenv`: + ```sh + # install build dependencies + sudo yum install -y openssl-devel readline-devel zlib-devel bzip2-devel libffi-devel + + # install `pyenv` + git clone https://github.com/pyenv/pyenv.git ~/.pyenv + # this require `chmod +x $HOME` if you are going to use different user for running services with installed python executable + echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile + echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile + echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile + + # install python + pyenv install 3.8.2 + ``` + +1. Create virtual environment for FPX and install it: + ```sh + pyenv shell 3.8.2 + cd ~/.virtualenvs + python -m venv fpx + cd fpx + source bin/activate + pip install 'fpx~=0.4.0' + ``` + +1. Create config file. It can be created anywhere, as long as it accessible by FPX service: + ```sh + echo ' + PORT = 12321 + # DB is not used much, so SQLite can be used as long as you are going to use single instance of FPX service. If you planning to use multiple instances + load balancer, consider using PostgreSQL + DB_URL = "sqlite:////home/user/.virtualenvs/fpx/fpx.db" + # Any other options passed directly to the SQLAlchemy engine constructor(https://docs.sqlalchemy.org/en/13/core/engines.html#sqlalchemy.create_engine) + DB_EXTRAS = { + # "pool_size": 10, + # "max_overflow": 20, + } + ' > /etc/fpx/fpx.py + ``` + +1. Initialize database and create access token for client: + ```sh + export FPX_CONFIG=/etc/fpx/fpx.py + fpx db up + fpx client add my-first-fpx-client # use any name, that match `[\w_-]` + ``` + + Make sure, db is accessible and writable by FPX service. This + manual suggests using `apache` user when configuring supervisor's + process, so following command required: + ```sh + chown apache:apache /home/user/.virtualenvs/fpx/fpx.db + ``` + +1. Test service: + ```sh + FPX_CONFIG=/etc/fpx/fpx.py fpx server run + # or, if you want to explicitely use python interpreter + FPX_CONFIG=/etc/fpx/fpx.py python -m fpx + ``` + +1. Configure system.d/supervisor/etc. unit for fpx. Make sure, that + `fpx server run` command, that spins up the service is executed using + python>=3.6 (`pyenv shell 3.8.2`). And, if SQLite is used, fpx + process has write access to db file: + ```ini + [program:fpx-worker] + + ; Use the full paths to the virtualenv and your configuration file here. + command=/home/user/.virtualenv/fpx/bin/python -m fpx + + environment=FPX_CONFIG=/etc/fpx/fpx.py + + ; User the worker runs as. + user=apache + + ; Start just a single worker. Increase this number if you have many or + ; particularly long running background jobs. + numprocs=1 + process_name=%(program_name)s-%(process_num)02d + + ; Log files. + stdout_logfile=/var/log/fpx-worker.log + stderr_logfile=/var/log/fpx-worker.log + + ; Make sure that the worker is started on system start and automatically + ; restarted if it crashes unexpectedly. + autostart=true + autorestart=true + + ; Number of seconds the process has to run before it is considered to have + ; started successfully. + startsecs=10 + + ; Need to wait for currently executing tasks to finish at shutdown. + ; Increase this if you have very long running tasks. + stopwaitsecs = 600 + ``` + +1. FPX service must be available via public url. As written in + [documentation](https://sanic.readthedocs.io/en/latest/sanic/deploying.html#deploying), + no additional layers required. But if you decide to use it with Nginx, the + [following + link](https://sanic.readthedocs.io/en/latest/sanic/nginx.html#nginx-configuration) + may be useful. Note, if `FPX_NO_QUEUE` set to `False`, FPX is using + websockets (if it can somehow affect configuration). + + Example of Nginx section for FPX: + ```conf + location /fpx/ { + proxy_pass http://127.0.0.1:12321/; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_request_buffering off; + proxy_buffering off; + + # When FPX_NO_QUEUE option set to `False` + proxy_set_header connection "upgrade"; + proxy_set_header upgrade $http_upgrade; + + # In emergency comment out line to force caching + # proxy_ignore_headers X-Accel-Expires Expires Cache-Control; + } + ``` + + Example of apache configuration: + ```cond + # mod_proxy + # mod_proxy_http + ProxyPass /fpx/ http://0.0.0.0:8000/ + ProxyPassReverse /fpx/ http://0.0.0.0:8000/ + + # When FPX_NO_QUEUE option set to `False` + # mod_proxy_wstunnel + # mod_rewrite + RewriteEngine on + RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] + RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] + RewriteRule /fpx/(.*) ws://0.0.0.0:8000/$1 [P] + ``` + + +%prep +%autosetup -n fpx-0.4.8 + +%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-fpx -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 0.4.8-1 +- Package Spec generated @@ -0,0 +1 @@ +b4e87c7ced98f8c0ea1f3893c3df45e6 fpx-0.4.8.tar.gz |
