kiss.py Documentation

Similar documents
mongodb-tornado-angular Documentation

alphafilter Documentation

micawber Documentation

Django MFA Documentation

Bitdock. Release 0.1.0

Without Django. applying django principles to non django projects

Django PAM Documentation

Flask Web Development Course Catalog

ClickToCall SkypeTest Documentation

Webdev: Building Django Apps. Ryan Fox Andrew Glassman MKE Python

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer

TailorDev Contact Documentation

Django with Python Course Catalog

webkitpony Documentation

django-reinhardt Documentation

Django-CSP Documentation

Easy-select2 Documentation

Django Extras Documentation

pyramid_assetmutator Documentation

django-baton Documentation

MapEntity Documentation

Flask-Genshi Documentation

django-mongonaut Documentation

HOW TO FLASK. And a very short intro to web development and databases

Django File Picker Documentation

Bambu API Documentation

django simple pagination Documentation

django-dynamic-db-router Documentation

django-telegram-login Documentation

django-dajax Documentation

django-baton Documentation

MIT AITI Python Software Development Lab DJ1:

Trunk Player Documentation

API Wrapper Documentation

django-amp-tools Documentation Release latest

Django: Views, Templates, and Sessions

MongoTor Documentation

Byte Academy. Python Fullstack

Python Schema Generator Documentation

DJOAuth2 Documentation

Python web frameworks

ejpiaj Documentation Release Marek Wywiał

Django File Picker Documentation

Lotus IT Hub. Module-1: Python Foundation (Mandatory)

django-session-security Documentation

Tissu for Fabric Documentation

RedBarrel Documentation

IoC Documentation. Release Thomas Rabaix

Building a Django Twilio Programmable Chat Application

xmodels Documentation

CIS192 Python Programming

The Pyramid Web Application Development Framework

nacelle Documentation

29-27 May 2013 CERN WEB FRAMEWORKS. Adrian Mönnich

About the Tutorial. Audience. Prerequisites. Disclaimer & Copyright. TurboGears

Course Title: Python + Django for Web Application

Security. CSC309 TA: Sukwon Oh

Bitnami OSQA for Huawei Enterprise Cloud

South Africa Templates.

colab Documentation Release 2.0dev Sergio Oliveira

django-openid Documentation

Human-Computer Interaction Design

django-ratelimit-backend Documentation

LECTURE 14. Web Frameworks

django-messages Documentation

Node.js. Node.js Overview. CS144: Web Applications

Python wrapper for Viscosity.app Documentation

About the Tutorial. Audience. Prerequisites. Disclaimer & Copyright. Django

CIS192 Python Programming

Quick housekeeping Last Two Homeworks Extra Credit for demoing project prototypes Reminder about Project Deadlines/specifics Class on April 12th Resul

flask-jwt Documentation

peewee Documentation Release charles leifer

The Django Web Framework Part II. Hamid Zarrabi-Zadeh Web Programming Fall 2013

Release Fulfil.IO Inc.

A Sample Approach to your Project

Diving into Big Data Workshop

Aircrack-ng python bindings Documentation

정재성

Seshat Documentation. Release Joshua P Ashby

Signals Documentation

PyZabbixObj Documentation

django-revproxy Documentation

django-mailbox Documentation

Django-Select2 Documentation. Nirupam Biswas

SagePay payment gateway package for django-oscar Documentation

redis-completion Documentation

Roman Numeral Converter Documentation

Brunch Documentation. Release Brunch team

dirt Documentation Release 0.6 Andy Mastbaum

Release 0.8. Repoze Developers

Scout Documentation. Release Charles Leifer

django-intercom Documentation

django-celery Documentation

django-oscar-paypal Documentation

Databases/JQuery AUGUST 1, 2018

Asema IoT Central Integration and migration. English

calyptos Documentation

django-private-chat Documentation

Frontend UI Training. Whats App :

Silpa Documentation. Release 0.1. Santhosh Thottingal

Transcription:

kiss.py Documentation Release 0.3.3 Stanislav Feldman January 15, 2015

Contents 1 Contents 3 1.1 Overview................................................. 3 1.2 Installation................................................ 3 1.3 Example................................................. 4 1.4 Core................................................... 6 1.5 Controllers................................................ 6 1.6 Views................................................... 7 2 Indices and tables 9 Python Module Index 11 i

ii

MVC web framework in Python with Gevent, Jinja2, Werkzeug. Contents 1

2 Contents

CHAPTER 1 Contents 1.1 Overview Kiss.py is MVC web framework in Python with Gevent, Jinja2, Werkzeug. You can break your app to views, controllers and models. Controller is class inherited from class Controller and may have methods get, post, put, delete. These methods get Request object param and return Response object. Request and Response objects inherited from Werkzeug. 1.1.1 Features Django-like templates from Jinja2. You can add your static path in settings and all css and javascript files will be minified. Also html templates will be minified. In css files you can use SCSS syntax. ORM with PostgreSQL, MySQL and SQLite(Peewee). Event dispatcher. You can subscribe to event or publish event. Rest controller. You can create rest interfaces to your models with RestController. 1.2 Installation 1.2.1 Installing with pip or easy_install pip install kiss.py 1.2.2 Installing with git git clone https://github.com/stanislavfeldman/kiss.py.git cd kiss.py python setup.py install 3

1.3 Example Git repository includes example minimal project. You can use it as start point. 1.3.1 main.py from settings import options from kiss.core.application import Application app = Application(options) app.start() 1.3.2 settings.py from os import path current_dir = path.dirname(path.abspath( file )) import sys sys.path.append(path.join(current_dir, "../../kiss.py")) sys.path.append(path.join(current_dir, "../../compressinja/")) sys.path.append(path.join(current_dir, "../../putils/")) from kiss.core.application import Application from controllers.controller1 import Controller1 from controllers.controller2 import Controller2 from kiss.core.events import ApplicationStarted from kiss.controllers.events import BeforeControllerAction from kiss.models import SqliteDatabase from kiss.core.exceptions import InternalServerError from kiss.controllers.page import PageController from kiss.controllers.rest import RestController from models.models import Blog options = { "application": { "address": "127.0.0.1", "port": 8080 }, "urls": { "": Controller1, "users": { "(?P<user>\w+)": Controller2 }, "2": { "3": Controller1(), "4": Controller2 }, "3": PageController("static_view.html", {"foo": "bar"}), RestController(Blog).url: RestController(Blog).controller }, "views": { "templates_path": "views.templates", "static_path": "views.static" }, "events": { ApplicationStarted: Controller2.application_after_load, BeforeControllerAction: Controller2.before_controller_action, InternalServerError.code: Controller2.internal_server_error }, 4 Chapter 1. Contents

} "models": { "engine": SqliteDatabase, #"host": "localhost", "database": path.join(current_dir, "kiss_py_project.sqldb")#,#, #"user": postgres, #"password": "postgres" } 1.3.3 models/models.py from kiss.models import Model, CharField, TextField, DateTimeField, BooleanField, ForeignKeyField class Blog(Model): creator = CharField() name = CharField() class Entry(Model): blog = ForeignKeyField(Blog) title = CharField() body = TextField() pub_date = DateTimeField() published = BooleanField(default=True) 1.3.4 controllers/controller2.py from kiss.views.templates import TemplateResponse from kiss.core.events import Eventer from models.models import Blog, Entry import datetime class Controller2(object): def get(self, request): #publish some event eventer = Eventer() eventer.publish("some event", self) if not "foo" in request.session: request.session["foo"] = 0 request.session["foo"] += 1 #blog = Blog() blog = Blog.get(id=1) blog.name = "super blog" blog.creator = "Stas" blog.save() #entry = Entry() entry = Entry.get(id=2) entry.blog = blog entry.title = "super post" entry.body = "lkoeirsldfkwierj" entry.pub_date = datetime.datetime.now() entry.save() return TemplateResponse("view.html", { "foo": request.session["foo"], "users": [{"url": "google.com", "username": "brin"}], "blog": blog }) #on load handler via eventer def application_after_load(self, application): 1.3. Example 5

print "app loaded" #Blog.create_table() #Entry.create_table() 1.3.5 views/templates/view.html <html> </html> <head> </head> <body> </body> <title>{% block title %}{% endblock %}</title> <script src="/scripts/j.js"></script> <div>{{foo}}</div> <ul> {% for user in users %} <li><a href="{{ user.url }}">{{ user.username }}</a></li> {% endfor %} </ul> 1.4 Core 1.4.1 Application class kiss.core.application.application(options) Main class of your application. Pass options to constructor and all subsystems(eventer, router, db_engine) will be configured. 1.4.2 Events class kiss.core.events.eventer(mapping={}) Event dispatcher. You can subscribe to event or publish event. 1.5 Controllers 1.5.1 Events 1.5.2 Router class kiss.controllers.router.router(options) Router implements unique hierarhical url mapping. Pass dictionary with mapping of regex and controller. 1.5.3 Core class kiss.controllers.core.controller Base class of all controllers. 6 Chapter 1. Contents

1.5.4 Page class kiss.controllers.page.pagecontroller(page, context={}) If you need just to show page, create PageController and pass to it your page and optional context. Use it like another controllers in urls settings of your app. 1.5.5 Rest class kiss.controllers.rest.restcontroller(model, id_regex= (?P<id>\d+) ) Controller that creates REST API to your model. Pass model class to it and use url property and controller property in your urls settings. 1.5.6 Auth 1.6 Views 1.6.1 Core class kiss.views.core.jsonresponse(inp, **argw) Json response. Pass any object you want, JsonResponse converts it to json. class kiss.views.core.redirectresponse(response=none, status=none, headers=none, mimetype=none, content_type=none, direct_passthrough=false) Response for redirect. Pass path and server will do 302 request. class kiss.views.core.request(options, **argw) Base request object inhereted from werkzeug Request. Added session object. class kiss.views.core.response(text, **argw) Base response object inhereted from werkzeug Response. Text/html mimetype is default. 1.6.2 Templates class kiss.views.templates.templateresponse(path, context={}, **argw) Template response via Jinja2. Pass template path and context. 1.6.3 Static files class kiss.views.static.staticbuilder(path) Uses StaticCompiler to minify and compile js and css. class kiss.views.static.staticcompiler(path) Static files minifier. 1.6. Views 7

8 Chapter 1. Contents

CHAPTER 2 Indices and tables genindex modindex search 9

10 Chapter 2. Indices and tables

Python Module Index k kiss.controllers.core, 6 kiss.controllers.events, 6 kiss.controllers.page, 7 kiss.controllers.rest, 7 kiss.controllers.router, 6 kiss.core.application, 6 kiss.core.events, 6 kiss.views.core, 7 kiss.views.static, 7 kiss.views.templates, 7 11

12 Python Module Index

Index A Application (class in kiss.core.application), 6 C Controller (class in kiss.controllers.core), 6 E Eventer (class in kiss.core.events), 6 J JsonResponse (class in kiss.views.core), 7 K kiss.controllers.core (module), 6 kiss.controllers.events (module), 6 kiss.controllers.page (module), 7 kiss.controllers.rest (module), 7 kiss.controllers.router (module), 6 kiss.core.application (module), 6 kiss.core.events (module), 6 kiss.views.core (module), 7 kiss.views.static (module), 7 kiss.views.templates (module), 7 P PageController (class in kiss.controllers.page), 7 R RedirectResponse (class in kiss.views.core), 7 Request (class in kiss.views.core), 7 Response (class in kiss.views.core), 7 RestController (class in kiss.controllers.rest), 7 Router (class in kiss.controllers.router), 6 S StaticBuilder (class in kiss.views.static), 7 StaticCompiler (class in kiss.views.static), 7 T TemplateResponse (class in kiss.views.templates), 7 13