”;
It is assumed that a Pyramid virtual environment is up and running, and Cookiecutter is installed in it. The easiest way to create a Cookiecutter project is to use a pre-built starter template as per the following command −
cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 2.0-branch
The template is downloaded and the user is asked about his choice of name of the project −
project_name [Pyramid Scaffold]: testproj repo_name [testproj]:
Then choose the template language.
Select template_language −
1 - jinja2 2 - chameleon 3 - mako Choose from 1, 2, 3 [1]: 1
Since we are familiar with jinja2, give 1 as the choice. Next, use SQLALchemy as the backend.
Select backend: 1 - none 2 - sqlalchemy 3 - zodb Choose from 1, 2, 3 [1]: 2
Inside the testproj folder, following file structure is created −
│ development.ini │ MANIFEST.in │ production.ini │ pytest.ini │ README.txt │ setup.py │ testing.ini │ ├───testproj │ │ pshell.py │ │ routes.py │ │ __init__.py │ │ │ ├───alembic │ │ │ env.py │ │ │ script.py.mako │ │ │ │ │ └───versions │ │ README.txt │ │ │ ├───models │ │ meta.py │ │ mymodel.py │ │ __init__.py │ │ │ ├───scripts │ │ initialize_db.py │ │ __init__.py │ │ │ ├───static │ │ pyramid-16x16.png │ │ pyramid.png │ │ theme.css │ │ │ ├───templates │ │ 404.jinja2 │ │ layout.jinja2 │ │ mytemplate.jinja2 │ │ │ └───views │ default.py │ notfound.py │ __init__.py │ └───tests conftest.py test_functional.py test_views.py __init__.py
The outer testproj folder has an inner testproj package subfolder and tests package. The inner testproj subfolder is a package having models and scripts, subpackages, and static as well as templates folders.
Next, initialize and upgrade the database using Alembic.
# Generate your first revision. alembic -c development.ini revision --autogenerate -m "init" # Upgrade to that revision. alembic -c development.ini upgrade head
Alembic is a lightweight database migration tool for usage with the SQLAlchemy Database Toolkit for Python. The outer project folder will now show a testproj.sqlite database.
The development.ini file provides a default data for the database. Populate the database with it by the following command.
initialize_testproj_db development.ini
The Cookiecutter utility also generates the test suite in the tests package. They are based on PyTest package. Go ahead and see if the tests pass.
Pytest ================ test session starts ====================== platform win32 -- Python 3.10.1, pytest-7.1.2, pluggy-1.0.0 rootdir: F:pyram-envtestproj, configfile: pytest.ini, testpaths: testproj, tests plugins: cov-3.0.0 collected 5 items teststest_functional.py .. [ 40%] teststest_views.py ... [100%] =============== 5 passed, 20 warnings in 6.66s ===============
Cookiecutter uses the Waitress server. The Pyramid application is served on localhost”s port 6543 by following command −
pserve development.ini Starting server in PID 67700. 2022-06-19 23:43:51,308 INFO [waitress:485][MainThread] Serving on http://[::1]:6543 2022-06-19 23:43:51,308 INFO [waitress:485][MainThread] Serving on http://127.0.0.1:6543
Open the browser and visit http://localhost:6543/ in it. The homepage of the newly created project will be displayed as follows −
Debug Toolbar
You can find a smaller Pyramid logo at the top right of the homepage. Click on it to open a new tab and a debug toolbar that provides lots of useful information about the project.
For example, the SQLAlchemy tab under the history heading shows the SQLAlchemy queries showing the structure of the model created from the default data in development.ini.
The Global heading again shows tabs such as Introspection, Routes, etc. as shown below. Click the “Routes” tab to see the routes and their matching patterns defined in the application”s configuration.
”;