pluserable.data.sqlalchemy.models module

Base models for apps that use SQLAlchemy and pluserable.

class pluserable.data.sqlalchemy.models.ActivationMixin(code='', valid_until=None, created_by='web')[source]

Bases: pluserable.data.models.ActivationBase, bag.sqlalchemy.tricks.MinimalBase, bag.sqlalchemy.tricks.ID

Handles email confirmation codes and password reset codes for users.

The code should be a random hash that is valid only once. After the code is used to access the site, it gets removed.

The “created by” value refers to a system: new user registration, password reset, forgot password etc.

code = Column(None, Unicode(length=30), table=None, nullable=False, default=ColumnDefault(<function random_hash>))
created_by = Column(None, Unicode(length=30), table=None, nullable=False, default=ColumnDefault('web'))
valid_until = Column(None, DateTime(), table=None, nullable=False, default=ColumnDefault(<function thirty_days_from_now>))
class pluserable.data.sqlalchemy.models.GroupMixin[source]

Bases: pluserable.data.models.GroupBase, bag.sqlalchemy.tricks.MinimalBase, bag.sqlalchemy.tricks.ID

Mixin class for groups.

description = Column(None, UnicodeText(), table=None)
name = Column(None, Unicode(length=50), table=None)
users = <RelationshipProperty at 0x7f014706e9c0; no key>
class pluserable.data.sqlalchemy.models.MinimalBase[source]

Bases: object

Declarative base class that auto-generates __tablename__.

clone(values=None, pk='id', sas=None)[source]

Return a clone of this model.

Optionally update some of its values. Optionally add the clone to the sas session. The name of the primary key column should be given as pk.

Although in general model methods should not use the session, the recursive nature of this one seems to require it.

update(adict, transient=False)[source]

Merge dictionary into this entity.

Optionally check that the keys exist.

update_from_schema(schema, adict)[source]

Validate adict against schema; return updated entity.

Validates the information in the dictionary adict against a Colander schema. If validation fails, colander.Invalid is raised. If happy, returns the updated model instance.

class pluserable.data.sqlalchemy.models.NoUsernameMixin(email, password, salt='', activation=None, **kw)[source]

Bases: pluserable.data.models.UserBase, bag.sqlalchemy.tricks.MinimalBase, bag.sqlalchemy.tricks.ID

activation = <RelationshipProperty at 0x7f014705d840; no key>
activation_id = Column(None, Integer(), ForeignKey('activation.id'), table=None)
email = Column(None, Unicode(length=100), table=None, nullable=False)
last_login_date = Column(None, TIMESTAMP(), table=None, nullable=False, default=ColumnDefault(<sqlalchemy.sql.functions.now at 0x7f0147056b90; now>), server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x7f0147055660; now>, for_update=False))
registered_date = Column(None, TIMESTAMP(), table=None, nullable=False, default=ColumnDefault(<sqlalchemy.sql.functions.now at 0x7f01470bfc70; now>), server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x7f01470bf640; now>, for_update=False))
salt = Column(None, Unicode(length=256), table=None, nullable=False)
class pluserable.data.sqlalchemy.models.UserGroupMixin[source]

Bases: bag.sqlalchemy.tricks.MinimalBase, bag.sqlalchemy.tricks.ID

group_id = Column(None, Integer(), ForeignKey('group.id'), table=None)
user_id = Column(None, Integer(), ForeignKey('user.id'), table=None)
class pluserable.data.sqlalchemy.models.UsernameMixin(email, password, salt='', activation=None, **kw)[source]

Bases: pluserable.data.sqlalchemy.models.NoUsernameMixin

Additional username column for sites that need it.

username = Column(None, Unicode(length=30), table=None, nullable=False)