Home

Awesome

pyramid_runner

Image not found

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 -

  1. Completely decoupled from client-side coding
  2. Use only JSON renderer
  3. Use only url traversal
  4. Focus on resource management

Following packages are included in the setup.py -

  1. Pyramid itself
  2. SQLAlchemy
  3. Alembic

Key Features

Requirements

Installation

After installing cookiecutter, run -

cookiecutter https://github.com/asif-mahmud/pyramid_runner.git

(Obsolete)

Project Structure

 # 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

The Makefile inside the project folder provides some easy shortcut commands-

Features of ModelBase

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 -

Helper Classes

resources.base.BaseRoot

Root resource inherits this class. See the default resources.root.Root resource.

resources.base.BaseChild

A helper base class for child nodes in the resource tree. __name__ and __parent__ attributes are handled in the __init__ method. So a container child need to implement child_instance and/or child_class (Updated in version 4.0.0) methods of it's own to generate it's requested child node. Decisions made here are -

  1. Parent/Container node is responsible to generate Child node.
  2. Parent/Container node is responsible to give the Child instance a name.

views.base.BaseView

A helper class for view classes. What it does -

  1. Sets the request attribute in __init__ method.
  2. Adds a default empty view for OPTIONS HTTP requests.

views.base.BaseJSONResponse

(new in version 4.0.0) A subclass of dict to provide consistent response from different views. It includes the following keys-

  1. code : An integer code mostly representing HTTP response code. Dafaults 200.
  2. status: A string status like "OK" or "ERROR". Defaults "OK".
  3. msg: A string containing a message for the client. Defaults "".
  4. 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.

views.base.BaseStatusReport

(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.

security.base.BaseUserRetriever

A base class to retreive authenticated user info from request params.

NOTE: Removed from version 3.9+

security.base.BaseAuthPolicy

Base class for ticket based authentication policy.

NOTE: Removed from version 3.9+

Version History

Version 6.0.1

Version 6.0.0

Version 5.9.0

Version 5.0.0

Version 4.9.0

Version 4.0.0

Version 3.9.0

Version 3.0.0

Version 2.9.0

Version 2.0.0

Version 1.9.0

Version 1.0.0

Version 0.9.0

Version 0.0.1