CKAN extensions - adding to your installation
Following the information on the CKAN site
Use the CKAN create command to create an empty extension:
Activate your CKAN virtual environment, for example:
. /usr/lib/ckan/default/bin/activate
Then check your location is
cd /usr/lib/ckan/default/src
So you can execute the create command
ckan -c /etc/ckan/default/ckan.ini create -t ckanext ckanext-example_theme
Error – dev-requirements.txt
However, when running this command the response was
INFO [ckan.cli] Using configuration file /etc/ckan/default/ckan.ini
INFO [ckan.config.environment] Loading static files from public
INFO [ckan.config.environment] Loading templates from /usr/lib/ckan/default/src/ckan/ckan/templates
INFO [ckan.config.environment] Loading templates from /usr/lib/ckan/default/src/ckan/ckan/templates
Usage: ckan [OPTIONS] COMMAND [ARGS]...
Error: No such command 'create'.
First check, did you install CKAN dev requirements? As above we have activated the virtual environment and our location is already at
cd /usr/lib/ckan/default/src
For more details about installing the requirements and dev-requirements txt files see the Appendix at the end of this article. Now install like
pip install -r dev-requirements.txt
Response
Traceback (most recent call last):
File "/usr/lib/ckan/default/bin/pip", line 5, in <module>
from pip._internal.cli.main import main
File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/main.py", line 10, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
from pip._internal.cli import cmdoptions
File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py", line 25, in <module>
from pip._internal.locations import USER_CACHE_DIR, get_src_prefix
File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/locations.py", line 19, in <module>
from pip._internal.utils import appdirs
File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/utils/appdirs.py", line 13, in <module>
from pip._vendor import appdirs as _appdirs
ImportError: cannot import name 'appdirs' from 'pip._vendor' (/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_vendor/__init__.py)
Error - is pip installed
Is pip installed. Check by executing
pip -V
If your response is errors, then pip needs to be installed.
sudo apt install python3-pip
Post running the install command, when I run the version check for pip (pip -V) the response is now
pip 20.0.2 from /usr/lib/ckan/default/lib/python3.8/site-packages/pip (python 3.8)
And now the dev-requirements.txt install runs - yay
Back to the original intent
This sequence started because I needed to install
ckan -c /etc/ckan/default/ckan.ini create -t ckanext ckanext-example_theme
However, that was failing me. Another option was to execute
ckan -c /etc/ckan/default/ckan.ini generate extension -o ckanext/ckanext-example_theme
Now I discover another issue. The response
`cookiecutter` library is missing from import path.
Make sure you have dev-dependencies installed:
pip install -r dev-requirements.txt
Time to install cookiecutter
pip install cookiecutter
requirements and dev-requirements installed
Installing the extension again? Attempting to run cookiecutter to create your extension:
cookiecutter ckan/contrib/cookiecutter/ckan_extension/
Complete the extension prompts
project [Projects name (must begin with 'ckanext-')]:
keywords [A space separated list of keywords]:
description []:
author []:
author_email []:
github_user_name [Github user or organization name]:
project_shortname:
plugin_class_name:
Once each of the prompts has been completed, the response wasn't what I was anticipating
Traceback (most recent call last):
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 83, in run_script
proc = subprocess.Popen(
File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/generate.py", line 236, in _run_hook_from_repo_dir
run_hook(hook_name, project_dir, context)
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 145, in run_hook
run_script_with_context(script, project_dir, context)
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 129, in run_script_with_context
run_script(temp.name, cwd)
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 99, in run_script
raise FailedHookException(
cookiecutter.exceptions.FailedHookException: Hook script failed (error: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/shutil.py", line 707, in rmtree
orig_st = os.lstat(path)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/{project}/.local/bin/cookiecutter", line 8, in <module>
sys.exit(main())
File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/cli.py", line 113, in main
cookiecutter(
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/main.py", line 90, in cookiecutter
result = generate_files(
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/generate.py", line 293, in generate_files
_run_hook_from_repo_dir(
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/generate.py", line 239, in _run_hook_from_repo_dir
rmtree(project_dir)
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/utils.py", line 34, in rmtree
shutil.rmtree(path, onerror=force_delete)
File "/usr/lib/python3.8/shutil.py", line 709, in rmtree
onerror(os.lstat, path, sys.exc_info())
File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/utils.py", line 25, in force_delete
os.chmod(path, stat.S_IWRITE)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme'
Ok, so a permission issue. I need to cross-check where I'm installing:
Trying the command
ckan generate extension
Response same as above.
Directory - can you make a new directory?
As the issue is permission-based, whilst in your virtual environment try creating a directory. In the directory
/usr/lib/ckan/default/src
Using the mkdir command, I received the following response
mkdir: cannot create directory ‘{your_directory_name}’: Permission denied
The directory src owner is root:root. I'm working as a virtual environment so root won't cut it. Change the ownership
What about if I set the path?
ckan generate extension -o ckan/ckanext
Response:
Written: ckan/ckanext/ckanext-main_theme
Working!
Now I'll review changing src directory ownership. and attempt the process again.
ckan generate extension
Prompts
Extension's name [must begin 'ckanext-']: ckanext-{module}
Author's name []: {author}
Author's email []: {email}
Your Github user or organization name []: {company}
Brief description of the project []: {project}
List of keywords (separated by spaces) [CKAN]:
Response:
Written: /usr/lib/ckan/default/src/ckanext-{project}
Appendix
When you run the following commands, ensure that you have not activated the virtual environment.
Installing requirements.txt
Command
pip install -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt
Response
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: alembic==1.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 7)) (1.0.0)
Requirement already satisfied: babel==2.7.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 8)) (2.7.0)
Requirement already satisfied: beaker==1.11.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 9)) (1.11.0)
Requirement already satisfied: bleach==3.1.4 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 10)) (3.1.4)
Requirement already satisfied: certifi==2021.5.30 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 11)) (2021.5.30)
Requirement already satisfied: chardet==4.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 12)) (4.0.0)
Requirement already satisfied: click==7.1.2 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 13)) (7.1.2)
Requirement already satisfied: dominate==2.4.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 14)) (2.4.0)
Requirement already satisfied: fanstatic==1.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 15)) (1.1)
Requirement already satisfied: feedgen==0.9.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 16)) (0.9.0)
Requirement already satisfied: flask-babel==1.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 17)) (1.0.0)
Requirement already satisfied: flask-multistatic==1.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 18)) (1.0)
Requirement already satisfied: flask==1.1.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 19)) (1.1.1)
Requirement already satisfied: funcsigs==1.0.2 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 20)) (1.0.2)
Requirement already satisfied: idna==2.10 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 21)) (2.10)
Requirement already satisfied: itsdangerous==1.1.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 22)) (1.1.0)
Requirement already satisfied: jinja2==2.10.1 in /usr/lib/python3/dist-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 23)) (2.10.1)
Requirement already satisfied: lxml==4.6.3 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 24)) (4.6.3)
Requirement already satisfied: mako==1.1.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 25)) (1.1.5)
Requirement already satisfied: markdown==2.6.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 26)) (2.6.7)
Requirement already satisfied: markupsafe==1.1.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 27)) (1.1.1)
Requirement already satisfied: nose==1.3.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 28)) (1.3.7)
Requirement already satisfied: passlib==1.6.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 29)) (1.6.5)
Requirement already satisfied: polib==1.0.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 30)) (1.0.7)
Collecting psycopg2==2.8.2
Using cached psycopg2-2.8.2.tar.gz (368 kB)
Preparing metadata (setup.py) ... done
Requirement already satisfied: pyjwt==1.7.1 in /usr/lib/python3/dist-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 32)) (1.7.1)
Collecting pysolr==3.6.0
Using cached pysolr-3.6.0-py2.py3-none-any.whl (18 kB)
Requirement already satisfied: python-dateutil==2.8.2 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 34)) (2.8.2)
Requirement already satisfied: python-editor==1.0.4 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 35)) (1.0.4)
Collecting python-magic==0.4.15
Using cached python_magic-0.4.15-py2.py3-none-any.whl (5.5 kB)
Requirement already satisfied: pytz==2016.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 37)) (2016.7)
Collecting pyutilib==5.7.1
Using cached PyUtilib-5.7.1-py2.py3-none-any.whl (251 kB)
Collecting pyyaml==5.4.1
Using cached PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl (662 kB)
Collecting redis==3.5.3
Using cached redis-3.5.3-py2.py3-none-any.whl (72 kB)
Collecting repoze.lru==0.7
Using cached repoze.lru-0.7-py3-none-any.whl (10 kB)
Collecting repoze.who==2.3
Using cached repoze.who-2.3-py3-none-any.whl (75 kB)
Collecting requests==2.25.1
Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting routes==1.13
Using cached Routes-1.13-py3-none-any.whl
Collecting rq==1.0
Using cached rq-1.0-py2.py3-none-any.whl
Requirement already satisfied: shutilwhich==1.1.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 46)) (1.1.0)
Collecting simplejson==3.10.0
Using cached simplejson-3.10.0-cp38-cp38-linux_x86_64.whl
Requirement already satisfied: six==1.16.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 48)) (1.16.0)
Requirement already satisfied: sqlalchemy==1.3.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 49)) (1.3.5)
Collecting sqlparse==0.2.2
Using cached sqlparse-0.2.2-py2.py3-none-any.whl (38 kB)
Collecting tzlocal==1.3
Using cached tzlocal-1.3-py3-none-any.whl
Collecting unicodecsv==0.14.1
Using cached unicodecsv-0.14.1-py3-none-any.whl
Collecting urllib3==1.26.6
Using cached urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
Requirement already satisfied: watchdog==2.1.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 54)) (2.1.5)
Collecting webassets==0.12.1
Using cached webassets-0.12.1-py3-none-any.whl
Requirement already satisfied: webencodings==0.5.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 56)) (0.5.1)
Requirement already satisfied: webob==1.8.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 57)) (1.8.7)
Requirement already satisfied: werkzeug[watchdog]==1.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 58)) (1.0.0)
Collecting zope.interface==4.3.2
Using cached zope.interface-4.3.2-cp38-cp38-linux_x86_64.whl
Requirement already satisfied: setuptools in ./.local/lib/python3.8/site-packages (from fanstatic==1.1->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 15)) (44.1.0)
Building wheels for collected packages: psycopg2
Building wheel for psycopg2 (setup.py) ... done
Created wheel for psycopg2: filename=psycopg2-2.8.2-cp38-cp38-linux_x86_64.whl size=500936 sha256=fb871b38b59dd5f37c6beb40a9bd8847603c03eb89735a749e549b6fc0331f6b
Stored in directory: /home/{project}/.cache/pip/wheels/97/1c/85/b89f26dc502f8822a3c6f7f62264343979e0f6f2280eb753b4
Successfully built psycopg2
Installing collected packages: webassets, unicodecsv, sqlparse, simplejson, repoze.lru, python-magic, zope.interface, urllib3, tzlocal, routes, redis, pyyaml, pyutilib, psycopg2, rq, requests, repoze.who, pysolr
Successfully installed psycopg2-2.8.2 pysolr-3.6.0 python-magic-0.4.15 pyutilib-5.7.1 pyyaml-5.4.1 redis-3.5.3 repoze.lru-0.7 repoze.who-2.3 requests-2.25.1 routes-1.13 rq-1.0 simplejson-3.10.0 sqlparse-0.2.2 tzlocal-1.3 unicodecsv-0.14.1 urllib3-1.26.6 webassets-0.12.1 zope.interface-4.3.2
Installing dev-requirements.txt
pip install -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt
Response
Defaulting to user installation because normal site-packages is not writeable
Collecting beautifulsoup4==4.9.1
Downloading beautifulsoup4-4.9.1-py3-none-any.whl (115 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 115.1/115.1 kB 3.5 MB/s eta 0:00:00
Collecting coveralls
Downloading coveralls-3.3.1-py2.py3-none-any.whl (14 kB)
Collecting docutils==0.12
Downloading docutils-0.12-py3-none-any.whl (508 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 508.8/508.8 kB 13.2 MB/s eta 0:00:00
Collecting factory-boy==2.12.0
Downloading factory_boy-2.12.0-py2.py3-none-any.whl (36 kB)
Collecting Flask-DebugToolbar==0.11.0
Downloading Flask_DebugToolbar-0.11.0-py2.py3-none-any.whl (325 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 325.0/325.0 kB 24.4 MB/s eta 0:00:00
Collecting freezegun==0.3.15
Downloading freezegun-0.3.15-py2.py3-none-any.whl (14 kB)
Collecting ipdb==0.13.2
Downloading ipdb-0.13.2.tar.gz (14 kB)
Preparing metadata (setup.py) ... done
Collecting responses==0.10.14
Downloading responses-0.10.14-py2.py3-none-any.whl (15 kB)
Collecting mock==2.0.0
Downloading mock-2.0.0-py2.py3-none-any.whl (56 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.8/56.8 kB 2.9 MB/s eta 0:00:00
Collecting pycodestyle==2.5.0
Downloading pycodestyle-2.5.0-py2.py3-none-any.whl (51 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.2/51.2 kB 5.4 MB/s eta 0:00:00
Collecting pip-tools==5.1.2
Downloading pip_tools-5.1.2-py2.py3-none-any.whl (43 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.0/44.0 kB 5.1 MB/s eta 0:00:00
Collecting pyfakefs==3.2
Downloading pyfakefs-3.2-py2.py3-none-any.whl (58 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.7/58.7 kB 204.9 kB/s eta 0:00:00
Collecting Sphinx==1.8.5
Downloading Sphinx-1.8.5-py2.py3-none-any.whl (3.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 47.7 MB/s eta 0:00:00
Collecting sphinx-rtd-theme==0.4.3
Downloading sphinx_rtd_theme-0.4.3-py2.py3-none-any.whl (6.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4/6.4 MB 62.1 MB/s eta 0:00:00
Collecting cookiecutter==1.7.0
Downloading cookiecutter-1.7.0-py2.py3-none-any.whl (40 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.5/40.5 kB 4.8 MB/s eta 0:00:00
Collecting pytest==4.6.5
Downloading pytest-4.6.5-py2.py3-none-any.whl (230 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 230.1/230.1 kB 16.3 MB/s eta 0:00:00
Collecting pytest-split-tests==1.0.9
Downloading pytest_split_tests-1.0.9-py2.py3-none-any.whl (3.9 kB)
Collecting pytest-cov==2.7.1
Downloading pytest_cov-2.7.1-py2.py3-none-any.whl (17 kB)
Collecting pytest-freezegun==0.4.1
Downloading pytest_freezegun-0.4.1-py2.py3-none-any.whl (4.6 kB)
Collecting pytest-rerunfailures==8.0
Downloading pytest_rerunfailures-8.0-py2.py3-none-any.whl (11 kB)
Collecting towncrier==19.2.0
Downloading towncrier-19.2.0-py2.py3-none-any.whl (20 kB)
Collecting soupsieve>1.2
Downloading soupsieve-2.3.2.post1-py3-none-any.whl (37 kB)
Collecting Faker>=0.7.0
Downloading Faker-14.1.0-py3-none-any.whl (1.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 42.4 MB/s eta 0:00:00
Requirement already satisfied: Flask>=0.8 in ./.local/lib/python3.8/site-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.1.1)
Requirement already satisfied: Blinker in /usr/lib/python3/dist-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.4)
Requirement already satisfied: itsdangerous in ./.local/lib/python3.8/site-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.1.0)
Requirement already satisfied: werkzeug in ./.local/lib/python3.8/site-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.0.0)
Requirement already satisfied: six in ./.local/lib/python3.8/site-packages (from freezegun==0.3.15->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 8)) (1.16.0)
Requirement already satisfied: python-dateutil!=2.0,>=1.0 in ./.local/lib/python3.8/site-packages (from freezegun==0.3.15->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 8)) (2.8.2)
Requirement already satisfied: setuptools in ./.local/lib/python3.8/site-packages (from ipdb==0.13.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 9)) (44.1.0)
Collecting ipython>=5.1.0
Downloading ipython-8.4.0-py3-none-any.whl (750 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 750.8/750.8 kB 32.8 MB/s eta 0:00:00
Requirement already satisfied: requests>=2.0 in ./.local/lib/python3.8/site-packages (from responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (2.25.1)
Requirement already satisfied: pbr>=0.11 in /usr/lib/python3/dist-packages (from mock==2.0.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 11)) (5.4.5)
Requirement already satisfied: click>=7 in ./.local/lib/python3.8/site-packages (from pip-tools==5.1.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 13)) (7.1.2)
Requirement already satisfied: pip>=20.0 in ./.local/lib/python3.8/site-packages (from pip-tools==5.1.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 13)) (22.2.2)
Collecting snowballstemmer>=1.1
Downloading snowballstemmer-2.2.0-py2.py3-none-any.whl (93 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.0/93.0 kB 7.4 MB/s eta 0:00:00
Requirement already satisfied: Jinja2>=2.3 in /usr/lib/python3/dist-packages (from Sphinx==1.8.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 15)) (2.10.1)
Collecting imagesize
Downloading imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB)
Collecting sphinxcontrib-websupport
Downloading sphinxcontrib_websupport-1.2.4-py2.py3-none-any.whl (39 kB)
Collecting Pygments>=2.0
Downloading Pygments-2.13.0-py3-none-any.whl (1.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 37.0 MB/s eta 0:00:00
Collecting alabaster<0.8,>=0.7
Downloading alabaster-0.7.12-py2.py3-none-any.whl (14 kB)
Collecting packaging
Downloading packaging-21.3-py3-none-any.whl (40 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 kB 4.6 MB/s eta 0:00:00
Requirement already satisfied: babel!=2.0,>=1.3 in ./.local/lib/python3.8/site-packages (from Sphinx==1.8.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 15)) (2.7.0)
Collecting jinja2-time>=0.1.0
Downloading jinja2_time-0.2.0-py2.py3-none-any.whl (6.4 kB)
Collecting binaryornot>=0.2.0
Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
Collecting future>=0.15.2
Downloading future-0.18.2.tar.gz (829 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 829.2/829.2 kB 31.5 MB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Collecting whichcraft>=0.4.0
Downloading whichcraft-0.6.1-py2.py3-none-any.whl (5.2 kB)
Collecting poyo>=0.1.0
Downloading poyo-0.5.0-py2.py3-none-any.whl (10 kB)
Collecting pluggy<1.0,>=0.12
Downloading pluggy-0.13.1-py2.py3-none-any.whl (18 kB)
Requirement already satisfied: attrs>=17.4.0 in /usr/lib/python3/dist-packages (from pytest==4.6.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 19)) (19.3.0)
Collecting atomicwrites>=1.0
Downloading atomicwrites-1.4.1.tar.gz (14 kB)
Preparing metadata (setup.py) ... done
Requirement already satisfied: importlib-metadata>=0.12 in /usr/lib/python3/dist-packages (from pytest==4.6.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 19)) (1.5.0)
Collecting wcwidth
Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Requirement already satisfied: more-itertools>=4.0.0 in /usr/lib/python3/dist-packages (from pytest==4.6.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 19)) (4.2.0)
Collecting py>=1.5.0
Downloading py-1.11.0-py2.py3-none-any.whl (98 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.7/98.7 kB 11.0 MB/s eta 0:00:00
Collecting coverage>=4.4
Downloading coverage-6.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (213 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 213.6/213.6 kB 18.8 MB/s eta 0:00:00
Collecting toml
Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
Requirement already satisfied: incremental in /usr/lib/python3/dist-packages (from towncrier==19.2.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 24)) (16.10.1)
Collecting docopt>=0.6.1
Downloading docopt-0.6.2.tar.gz (25 kB)
Preparing metadata (setup.py) ... done
Requirement already satisfied: pytz>=2015.7 in ./.local/lib/python3.8/site-packages (from babel!=2.0,>=1.3->Sphinx==1.8.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 15)) (2016.7)
Requirement already satisfied: chardet>=3.0.2 in ./.local/lib/python3.8/site-packages (from binaryornot>=0.2.0->cookiecutter==1.7.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 17)) (4.0.0)
Collecting jedi>=0.16
Downloading jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 42.6 MB/s eta 0:00:00
Collecting matplotlib-inline
Downloading matplotlib_inline-0.1.6-py3-none-any.whl (9.4 kB)
Collecting backcall
Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting decorator
Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)
Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0
Downloading prompt_toolkit-3.0.30-py3-none-any.whl (381 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 381.7/381.7 kB 26.9 MB/s eta 0:00:00
Requirement already satisfied: pexpect>4.3 in /usr/lib/python3/dist-packages (from ipython>=5.1.0->ipdb==0.13.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 9)) (4.6.0)
Collecting traitlets>=5
Downloading traitlets-5.3.0-py3-none-any.whl (106 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 106.8/106.8 kB 10.9 MB/s eta 0:00:00
Collecting stack-data
Downloading stack_data-0.4.0-py3-none-any.whl (23 kB)
Collecting pickleshare
Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting arrow
Downloading arrow-1.2.2-py3-none-any.whl (64 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.0/64.0 kB 5.6 MB/s eta 0:00:00
Requirement already satisfied: idna<3,>=2.5 in ./.local/lib/python3.8/site-packages (from requests>=2.0->responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in ./.local/lib/python3.8/site-packages (from requests>=2.0->responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (2021.5.30)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./.local/lib/python3.8/site-packages (from requests>=2.0->responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (1.26.6)
Collecting pyparsing!=3.0.5,>=2.0.2
Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 10.4 MB/s eta 0:00:00
Collecting sphinxcontrib-serializinghtml
Downloading sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl (94 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.0/94.0 kB 10.2 MB/s eta 0:00:00
Collecting parso<0.9.0,>=0.8.0
Downloading parso-0.8.3-py2.py3-none-any.whl (100 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.8/100.8 kB 10.7 MB/s eta 0:00:00
Collecting pure-eval
Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB)
Collecting executing
Downloading executing-0.10.0-py2.py3-none-any.whl (17 kB)
Collecting asttokens
Downloading asttokens-2.0.8-py2.py3-none-any.whl (23 kB)
Building wheels for collected packages: ipdb, atomicwrites, docopt, future
Building wheel for ipdb (setup.py) ... done
Created wheel for ipdb: filename=ipdb-0.13.2-py3-none-any.whl size=10520 sha256=faf64c973270ab663d035fd2792bbf9594b0c2658326115a42a4a7e3dfb57365
Stored in directory: /home/{project}/.cache/pip/wheels/31/f3/58/accdf45cba573136dff3bc0e8aad1848899255f5fc3266a9fc
Building wheel for atomicwrites (setup.py) ... done
Created wheel for atomicwrites: filename=atomicwrites-1.4.1-py2.py3-none-any.whl size=6943 sha256=18fa074d329d867290a69fd691516a5bbd3925b98379cbc8dbe2542f1b506ed5
Stored in directory: /home/{project}/.cache/pip/wheels/ce/24/c1/56b1ca77dda9577b75eb88d7ec50425f103ec2f6170c6e97df
Building wheel for docopt (setup.py) ... done
Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13704 sha256=c1273c66cbdd896dd5eabd6e5ac8ccc8e5b38cf70170829c033af31791f0f3c3
Stored in directory: /home/{project}/.cache/pip/wheels/56/ea/58/ead137b087d9e326852a851351d1debf4ada529b6ac0ec4e8c
Building wheel for future (setup.py) ... done
Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=acfe531b2e9d87ccf5fe1bd7a79112ccde1fa68a3a2606a97e410c386e387779
Stored in directory: /home/{project}/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4
Successfully built ipdb atomicwrites docopt future
Installing collected packages: whichcraft, wcwidth, snowballstemmer, pyfakefs, pure-eval, pickleshare, executing, docutils, docopt, backcall, alabaster, traitlets, toml, sphinxcontrib-serializinghtml, soupsieve, pyparsing, Pygments, pycodestyle, py, prompt-toolkit, poyo, pluggy, pip-tools, parso, mock, imagesize, future, decorator, coverage, binaryornot, atomicwrites, asttokens, towncrier, stack-data, sphinxcontrib-websupport, responses, packaging, matplotlib-inline, jedi, freezegun, Flask-DebugToolbar, Faker, coveralls, beautifulsoup4, arrow, Sphinx, pytest, jinja2-time, ipython, factory-boy, sphinx-rtd-theme, pytest-split-tests, pytest-rerunfailures, pytest-freezegun, pytest-cov, ipdb, cookiecutter
Successfully installed Faker-14.1.0 Flask-DebugToolbar-0.11.0 Pygments-2.13.0 Sphinx-1.8.5 alabaster-0.7.12 arrow-1.2.2 asttokens-2.0.8 atomicwrites-1.4.1 backcall-0.2.0 beautifulsoup4-4.9.1 binaryornot-0.4.4 cookiecutter-1.7.0 coverage-6.4.4 coveralls-3.3.1 decorator-5.1.1 docopt-0.6.2 docutils-0.12 executing-0.10.0 factory-boy-2.12.0 freezegun-0.3.15 future-0.18.2 imagesize-1.4.1 ipdb-0.13.2 ipython-8.4.0 jedi-0.18.1 jinja2-time-0.2.0 matplotlib-inline-0.1.6 mock-2.0.0 packaging-21.3 parso-0.8.3 pickleshare-0.7.5 pip-tools-5.1.2 pluggy-0.13.1 poyo-0.5.0 prompt-toolkit-3.0.30 pure-eval-0.2.2 py-1.11.0 pycodestyle-2.5.0 pyfakefs-3.2 pyparsing-3.0.9 pytest-4.6.5 pytest-cov-2.7.1 pytest-freezegun-0.4.1 pytest-rerunfailures-8.0 pytest-split-tests-1.0.9 responses-0.10.14 snowballstemmer-2.2.0 soupsieve-2.3.2.post1 sphinx-rtd-theme-0.4.3 sphinxcontrib-serializinghtml-1.1.5 sphinxcontrib-websupport-1.2.4 stack-data-0.4.0 toml-0.10.2 towncrier-19.2.0 traitlets-5.3.0 wcwidth-0.2.5 whichcraft-0.6.1