model cleanup
* add __repr__() to all current module objects (fixes #10) * pep8 fixes in all Python files (addresses #9) * create subdirectory for customer templates (addresses #2) git-svn-id: file:///var/www/wwwusers/usr01/svn/pyalchemybiz/trunk@8 389c73d4-bf09-4d3d-a15e-f94a37d0667a
This commit is contained in:
parent
1228fcef3c
commit
b53e8c48df
20 changed files with 67 additions and 25 deletions
|
@ -12,6 +12,7 @@ import pyalchemybiz.lib.app_globals as app_globals
|
|||
import pyalchemybiz.lib.helpers
|
||||
from pyalchemybiz.config.routing import make_map
|
||||
|
||||
|
||||
def load_environment(global_conf, app_conf):
|
||||
"""Configure the Pylons environment via the ``pylons.config``
|
||||
object
|
||||
|
|
|
@ -12,6 +12,7 @@ from pylons.wsgiapp import PylonsApp
|
|||
|
||||
from pyalchemybiz.config.environment import load_environment
|
||||
|
||||
|
||||
def make_app(global_conf, full_stack=True, **app_conf):
|
||||
"""Create a Pylons WSGI application and return it
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ refer to the routes manual at http://routes.groovie.org/docs/
|
|||
from pylons import config
|
||||
from routes import Mapper
|
||||
|
||||
|
||||
def make_map():
|
||||
"""Create, configure and return the routes Mapper"""
|
||||
map = Mapper(directory=config['pylons.paths']['controllers'],
|
||||
|
|
|
@ -5,16 +5,17 @@ from pyalchemybiz.model import customer, meta
|
|||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CustomerController(BaseController):
|
||||
|
||||
def index(self):
|
||||
sess = meta.Session()
|
||||
cust_q = sess.query(customer.Customer)
|
||||
c.customers = cust_q.all()
|
||||
return render('/customer.mako')
|
||||
return render('/customer/index.mako')
|
||||
|
||||
def edit(self, id):
|
||||
sess = meta.Session()
|
||||
cust_q = sess.query(customer.Customer)
|
||||
c.customer = cust_q.filter(customer.Customer.id==id).one()
|
||||
return c.customer
|
||||
return render('/customer/edit.mako')
|
||||
|
|
|
@ -6,6 +6,7 @@ from pylons.middleware import error_document_template, media_path
|
|||
|
||||
from pyalchemybiz.lib.base import *
|
||||
|
||||
|
||||
class ErrorController(BaseController):
|
||||
"""Generates error documents as and when they are required.
|
||||
|
||||
|
@ -14,8 +15,9 @@ class ErrorController(BaseController):
|
|||
|
||||
This behaviour can be altered by changing the parameters to the
|
||||
ErrorDocuments middleware in your config/middleware.py file.
|
||||
|
||||
|
||||
"""
|
||||
|
||||
def document(self):
|
||||
"""Render the error document"""
|
||||
page = error_document_template % \
|
||||
|
|
|
@ -4,6 +4,7 @@ from pyalchemybiz.lib.base import *
|
|||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class IndexController(BaseController):
|
||||
|
||||
def index(self):
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from pyalchemybiz.lib.base import *
|
||||
|
||||
|
||||
class TemplateController(BaseController):
|
||||
|
||||
def view(self, url):
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""The application's Globals object"""
|
||||
from pylons import config
|
||||
|
||||
|
||||
class Globals(object):
|
||||
"""Globals acts as a container for objects available throughout the
|
||||
life of the application
|
||||
|
|
|
@ -16,6 +16,7 @@ import pyalchemybiz.model as model
|
|||
from pyalchemybiz.model import meta
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
|
||||
class BaseController(WSGIController):
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
"""Data model for pyalchemybiz."""
|
||||
import logging
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
@ -7,9 +8,10 @@ from pyalchemybiz.model import person, customer, product
|
|||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def init_model(engine):
|
||||
"""Call me before using any of the tables or classes in the model."""
|
||||
|
||||
|
||||
sm = orm.sessionmaker(autoflush=True, transactional=True, bind=engine)
|
||||
|
||||
meta.engine = engine
|
||||
|
@ -24,9 +26,9 @@ def init_model(engine):
|
|||
'product', meta.metadata, autoload=True, autoload_with=engine)
|
||||
|
||||
orm.mapper(person.Person, person.t_person)
|
||||
orm.mapper(customer.Customer, customer.t_customer)
|
||||
customer.Customer.person = orm.relation(person.Person)
|
||||
orm.mapper(customer.Customer, customer.t_customer, properties={
|
||||
'person': orm.relation(person.Person, backref='customer')})
|
||||
orm.mapper(product.ProductType, product.t_producttype)
|
||||
orm.mapper(product.Product, product.t_product)
|
||||
product.Product.producttype = orm.relation(
|
||||
product.Product, backref=orm.backref('products', lazy='dynamic'))
|
||||
orm.mapper(product.Product, product.t_product, properties={
|
||||
'producttype': orm.relation(product.ProductType,
|
||||
backref='products')})
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
"""Customer related model elements."""
|
||||
t_customer = None
|
||||
|
||||
|
||||
class Customer(object):
|
||||
def __str__(self):
|
||||
return "%s %s" % (self.firstname, self.lastname)
|
||||
"""Customer model class."""
|
||||
|
||||
def __repr__(self):
|
||||
if self.id is None:
|
||||
return "<Customer: new %s>" % (self.person)
|
||||
else:
|
||||
return "<Customer: %d %s>" % (self.id, self.person)
|
||||
|
|
|
@ -9,6 +9,6 @@ engine = None
|
|||
# SQLAlchemy session manager. Updated by model.init_model().
|
||||
Session = None
|
||||
|
||||
# Global metadata. If you have multiple databases with overlapping table
|
||||
# Global metadata. If you have multiple databases with overlapping table
|
||||
# names, you'll need a metadata for each database.
|
||||
metadata = MetaData()
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
t_person = None
|
||||
|
||||
|
||||
class Person(object):
|
||||
def __str__(self):
|
||||
return "%s %s" % (self.firstname, self.lastname)
|
||||
|
||||
def __repr__(self):
|
||||
if self.id is None:
|
||||
return "<Person: new %s %s>" % (self.firstname, self.lastname)
|
||||
else:
|
||||
return "<Person: %d %s %s>" % (self.id, self.firstname,
|
||||
self.lastname)
|
||||
|
|
|
@ -1,8 +1,21 @@
|
|||
t_producttype = None
|
||||
t_product = None
|
||||
|
||||
|
||||
class ProductType(object):
|
||||
pass
|
||||
|
||||
def __repr__(self):
|
||||
if self.id is None:
|
||||
return "<ProductType: new %s>" % (self.name)
|
||||
else:
|
||||
return "<ProductType: %d %s>" % (self.id, self.name)
|
||||
|
||||
|
||||
class Product(object):
|
||||
pass
|
||||
|
||||
def __repr__(self):
|
||||
if self.id is None:
|
||||
return "<Product: new %s %s>" % (self.name, self.producttype)
|
||||
else:
|
||||
return "<Product: %d %s %s>" % (self.id, self.name,
|
||||
self.producttype)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
<%inherit file="base.mako" />
|
||||
|
||||
<h1>Hallo</h1>
|
||||
|
||||
<ul id="customers">
|
||||
% for customer in c.customers:
|
||||
<li>${customer.firstname} ${customer.lastname} [${h.link_to('edit', h.url_for(id=customer.id, action="edit"))}]</li>
|
||||
% endfor
|
||||
</ul>
|
9
pyalchemybiz/templates/customer/index.mako
Normal file
9
pyalchemybiz/templates/customer/index.mako
Normal file
|
@ -0,0 +1,9 @@
|
|||
<%inherit file="/base.mako" />
|
||||
|
||||
<h1>Hallo</h1>
|
||||
|
||||
<ul id="customers">
|
||||
% for customer in c.customers:
|
||||
<li>${h.escape_once(customer)} [${h.link_to('edit', h.url_for(id=customer.id, action="edit"))}]</li>
|
||||
% endfor
|
||||
</ul>
|
|
@ -32,6 +32,7 @@ test_file = os.path.join(conf_dir, 'test.ini')
|
|||
cmd = paste.script.appinstall.SetupCommand('setup-app')
|
||||
cmd.run([test_file])
|
||||
|
||||
|
||||
class TestController(TestCase):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from pyalchemybiz.tests import *
|
||||
|
||||
|
||||
class TestCustomerController(TestController):
|
||||
|
||||
def test_index(self):
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from pyalchemybiz.tests import *
|
||||
|
||||
|
||||
class TestIndexController(TestController):
|
||||
|
||||
def test_index(self):
|
||||
|
|
|
@ -12,6 +12,7 @@ from pyalchemybiz.config.environment import load_environment
|
|||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def setup_config(command, filename, section, vars):
|
||||
"""Place any commands to setup pyalchemybiz here"""
|
||||
conf = appconfig('config:' + filename)
|
||||
|
|
Loading…
Reference in a new issue