summaryrefslogtreecommitdiff
path: root/python-fpx.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-fpx.spec')
-rw-r--r--python-fpx.spec638
1 files changed, 638 insertions, 0 deletions
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