A minimal Pyramid scaffold that aims to provide a starter template to build small to large web services. To achieve this goal the following design decisions are made for you -
- Completely decoupled from client-side coding
- Use only JSON renderer
- Use only url traversal
- Focus on resource management
Following packages are included in the
- A predetermined project structure (See Project Structure).
- Saves hours of google search and typing.
- Open source and free.
- IDE (i.o PyCharm) friendly.
- One configuration file per environment(i.e development and production).
- A simple Makefile to make life even easier(See the usage of the Makefile).
- A built-in
ModelBasefor SQLAlchemy (See features of the
CookieCutterproject templating system.
cookiecutter, run -
- Create a
Python virtual environtmentfirst.
- Clone the git repo.
- Open a
- Activate the
virtual environtmentby running
python setup.py install
- # - Stands for Folder.
- + - Stands for File.
README.md's are ignored.
- Learn more about the purpose of the folders in their
# project_name | |-# database | |-# project_name - Pyramid application code | | | |-# models | |-# views | |-# tests | |-# security | |-# resources - Includes all your resource classes including Root resource. | |-# alembic | | | |-# versions | |-+ script.py.mako | |-+ env.py | |-# wsgi - Will contain wsgi servers's log files and pid file. | |-+ setup.py - Python distribution setup file. |-+ development.ini - Development environment config file. |-+ production.ini - Production environment config file. |-+ alembic.ini - Pyramid project friendly alembic config file. |-+ MANIFEST.in |-+ CHANGES.txt |-+ Makefile - Provides some useful shortcut commands.
Usage of Makefile
Makefile inside the
project folder provides some easy shortcut commands-
make setup: This command must be run once at the beginnng.
make revision: Make a database revision by Alembic.
make upgrade: Migrate your database to latest revision.
make downgrade: Migrate your database to a previous revision.
make run: Run
pserveto serve local server. Additionally it will start watching
SASSsources and angular apps.
make test: Run
pytestto test the project.
It is a default
Model base for all of your SQLAlchemy Models. But you don't have to inherit it, instead you
inherit the infamous
Base class. It provides the following class level attributes -
primary_key. Feel free to override it anytime.
DateTime Columnto provide when the entry was created. Defaults to current time.
DateTime Columnto provide when the entry was updated. Always the last update time.
__tablename__: You don't have to write
__tablename__whenever you create a
__json__: Method to represent the model as
Root resource inherits this class. See the default
A helper base class for child nodes in the resource tree.
attributes are handled in the
__init__ method. So a container child need to
child_class (Updated in version 4.0.0)
methods of it's own to generate it's requested child node. Decisions made here are -
Parent/Containernode is responsible to generate
Parent/Containernode is responsible to give the
Childinstance a name.
A helper class for view classes. What it does -
- Sets the
- Adds a default empty view for
(new in version 4.0.0)
A subclass of
dict to provide consistent response from different views.
It includes the following keys-
- code : An integer code mostly representing HTTP response code. Dafaults 200.
- status: A string status like "OK" or "ERROR". Defaults "OK".
- msg: A string containing a message for the client. Defaults "".
- error: A string containing any error message to send to the client. Defaults "".
These keys can be accessed both as dictionary keys or class attributes.
(new in version 6.0.0)
A subclass of
BaseJSONResponse. This is helpful to quickly define
a status(error or success) report standard for the API.
A base class to retreive authenticated user info from request params.
NOTE: Removed from version 3.9+
Base class for ticket based authentication policy.
NOTE: Removed from version 3.9+
BaseStatusReportand some subclasses of it. See
- Updated project README.md to better reflect the setup procedure.
- Fixed some stylings.
BaseFunctionalTestis being merged into single
- Little fixes.
- Added a
- Test base class now uses
development.inifile to read the configurations. So tests will run with same configurations as the development versions.
- Initializing database by inserting some test data is made easier by introducing
BaseTestclass. Child classes will just implement these methods to insert test data into database by normal
- More pythonic all the way. Improved
BaseChildhas more functionalities.
JWTauthentication suitable for
Gunicorninstead of waitress as development and production server.
cookiecutterproject templating system.
- Added a basic stateless security system.
ModelBaseincludes an abstract
- Working version with 3 utility classes -
- Added an example functional test for
- Git initialization.