Active Record like validation on SQLAlchemy declarative model objects
Project description
Introduction
SAValidation facilitates Active Record like validation on SQLAlchemy declarative model objects.
You can install the in-development version of savalidation with easy_install savalidation==dev.
The home page is currently the bitbucket repository.
Usage Example
The following is a snippet from the examples.py file:
from datetime import datetime import formencode import sqlalchemy as sa import sqlalchemy.ext.declarative as sadec import sqlalchemy.sql as sasql import sqlalchemy.orm as saorm from savalidation import declarative_base, ValidatingSessionExtension, \ ValidationError, ValidationMixin import savalidation.validators as val engine = sa.create_engine('sqlite://') meta = sa.MetaData() Base = declarative_base(metadata=meta) Session = saorm.scoped_session( saorm.sessionmaker( bind=engine, autoflush=False, extension=ValidatingSessionExtension() ) ) sess = Session class Family(Base, ValidationMixin): __tablename__ = 'families' # SA COLUMNS id = sa.Column(sa.Integer, primary_key=True) createdts = sa.Column(sa.DateTime, nullable=False, default=datetime.now, server_default=sasql.text('CURRENT_TIMESTAMP')) updatedts = sa.Column(sa.DateTime, onupdate=datetime.now) name = sa.Column(sa.Unicode(75), nullable=False, unique=True) reg_num = sa.Column(sa.Integer, nullable=False, unique=True) status = sa.Column(sa.Unicode(15), nullable=False, default=u'active', server_default=u'active') # VALIDATION STATUS_CHOICES = ( ('active', 'Active'), ('inactive', 'Inactive'), ('moved', 'Moved'), ) # will validate nullability & length of string types val.validates_constraints() val.validates_one_of('status', [k for k, v in STATUS_CHOICES]) #OTHER def __str__(self): return '<Family id=%s, name=%s>' % (self.id, self.name) class Person(Base, ValidationMixin): __tablename__ = 'people' id = sa.Column(sa.Integer, primary_key=True) createdts = sa.Column(sa.DateTime, nullable=False, server_default=sasql.text('CURRENT_TIMESTAMP')) updatedts = sa.Column(sa.DateTime, onupdate=datetime.now) name_first = sa.Column(sa.Unicode(75), nullable=False) name_last = sa.Column(sa.Unicode(75), nullable=False) family_role = sa.Column(sa.Unicode(20), nullable=False) nullable_but_required = sa.Column(sa.Unicode(5)) birthdate = sa.Column(sa.Date) ROLE_CHOICES = ( ('father', 'Father'), ('mother', 'Mother'), ('child', 'Child'), ) val.validates_constraints(exclude='createdts') val.validates_presence_of('nullable_but_required') val.validates_choices('family_role', ROLE_CHOICES) # will automatically convert the string to a python datetime.date object val.converts_date('birthdate')
See more examples in the tests directory of the distribution.
Installing & Testing Source
(this is one way, there are others)
create a virtualenv
activate the virtualenv
pip install -e "hg+http://bitbucket.org/rsyring/sqlalchemy-validation#egg=savlidation-dev"
pip install nose
cd src/savalidation/savalidation
nosetests
Questions & Comments
Please visit: http://groups.google.com/group/blazelibs
Dependencies
SQLAlchemy
FormEncode
python-dateutil (for date/time converters)
Nose (if you want to run the tests)
Credits
This project borrows code and ideas from:
Current Status
The code itself seems stable, but the API is likely to change in the future.
Change Log
0.1.4 released 2011-05-19
change python-dateutil dependence to < 2.0, 2.x is for python 3
0.1.3 released 2011-05-19
change SQLAlchemy requirement so the latest package < 0.7 is installed
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file SAValidation-0.1.5.tar.gz
.
File metadata
- Download URL: SAValidation-0.1.5.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b89f61a309a8efa13dd4ec2f2b3aaa1c3ba46ad1eec268241d7f46476e344f2 |
|
MD5 | b5962bd9ee2fd01632b1c1f06ac91353 |
|
BLAKE2b-256 | 80b0b80185b9625e73844a3f63491a13921d5b40c91322d3f5abe7dda896881e |