class FeedBase(odm.StdModel): name = odm.SymbolField() live = odm.ForeignKey(CrossData, required=False) prev = odm.ForeignKey(CrossData, required=False) class Meta: abstract = True
class Position(odm.StdModel): instrument = odm.ForeignKey(Instrument, related_name='positions') fund = odm.ForeignKey(Fund, related_name='positions') dt = odm.DateField() size = odm.FloatField(default=1) def __unicode__(self): return '%s: %s @ %s' % (self.fund, self.instrument, self.dt)
class Folder(odm.StdModel): name = odm.SymbolField() view = odm.ForeignKey(PortfolioView, related_name='folders') positions = odm.ManyToManyField(Position, related_name='folders') parent = odm.ForeignKey('self', related_name='children', required=False) def __unicode__(self): return self.name
class Post(odm.StdModel): dt = odm.DateTimeField(index=False, default=datetime.now) data = odm.CharField(required=True) user = odm.ForeignKey('examples.user', index=False) def __unicode__(self): return self.data
def register_for_permissions(model): if 'group' not in model._meta.dfields: group = odm.ForeignKey(Group, related_name=model.__name__.lower()) group.register_with_model('group', model) group = model._meta.dfields['group'] if not isinstance(group, odm.ForeignKey) or group.relmodel != Group: raise RuntimeError('group field of wrong type')
class Portfolio(odm.StdModel): user = odm.ForeignKey(User) name = odm.CharField(max_length=200) description = odm.CharField() def __unicode__(self): return self.name
class Page(PageModel, ModelBase): '''The page model holds several information regarding pages in the sitemap.''' template = odm.CharField() site = odm.ForeignKey(Site) title = odm.CharField() link = odm.CharField() url = odm.SymbolField() in_navigation = odm.IntegerField(default=1) body_class = odm.CharField() # # Access soft_root = odm.BooleanField(default=False) in_sitemap = odm.BooleanField(default=True) published = odm.BooleanField(default=True) # # Content is a Json object content = odm.JSONField() head = odm.JSONField() manager_class = PageManger def __unicode__(self): return self.url #return escape(self.url) def path(self, **urlargs): return Route(self.url).url(**urlargs)
class Role(Model): '''A :class:`Role` is uniquely identified by its :attr:`name` and :attr:`owner`.''' id = odm.CompositeIdField('name', 'owner') name = odm.CharField() '''The name of this role.''' owner = odm.ForeignKey(User, related_name='own_roles') '''The owner of this role.''' permissions = odm.JSONField(default=list) '''the set of all :class:`Permission` assigned to this :class:`Role`.''' users = odm.ManyToManyField(User, related_name='roles') def __unicode__(self): return self.name def add_permission(self, resource, operation): '''Add a new :class:`Permission` for ``resource`` to perform an ``operation``. The resource can be either an object or a model.''' if isclass(resource): model_type = resource pk = '' else: model_type = resource.__class__ pk = resource.pkvalue() model = odm.get_hash_from_model(model_type) p = (model, pk, operation) if p not in self.permissions: self.permissions.append(p) def assignto(self, subject): '''Assign this :class:`Role` to ``subject``.''' return subject.assign(self)
class Item(odm.StdModel): name = odm.CharField(required=True) person = odm.ForeignKey(Person, related_name='items', required=False) checked_out = odm.BooleanField(default=False) updated = odm.DateTimeField(default=datetime.utcnow) def __unicode__(self): return '<Item {0!r}>'.format(self.name)
class Group(odm.StdModel, Subject): id = odm.CompositeIdField('name', 'user') name = odm.SymbolField() '''Group name. If the group is for a signle user, it can be the user username''' user = odm.ForeignKey(User) '''A group is always `owned` by a :class:`User`. For example the ``admin`` group for a website is owned by the ``website`` user.''' # users = odm.ManyToManyField(User, related_name='groups') '''The :class:`stdnet.odm.ManyToManyField` for linking :class:`User` and :class:`Group`.''' roles = odm.ManyToManyField('Role', related_name='subjects') manager_class = GroupManager def __unicode__(self): return self.name
class Role(odm.StdModel): '''A :class:`Role` is uniquely identified by its :attr:`name` and :attr:`owner`.''' id = odm.CompositeIdField('name', 'owner') name = odm.SymbolField() '''The name of this role.''' owner = odm.ForeignKey(Group) '''The owner of this role-permission.''' permissions = odm.ManyToManyField(Permission, related_name='roles') '''the set of all :class:`Permission` assigned to this :class:`Role`.''' def __unicode__(self): return self.name def add_permission(self, resource, operation): '''Add a new :class:`Permission` for ``resource`` to perform an ``operation``. The resource can be either an object or a model.''' if isclass(resource): model_type = resource pk = '' else: model_type = resource.__class__ pk = resource.pkvalue() p = Permission(model_type=model_type, object_pk=pk, operation=operation) session = self.session if session.transaction: session.add(p) self.permissions.add(p) return p else: with session.begin() as t: t.add(p) self.permissions.add(p) return t.add_callback(lambda r: p) def assignto(self, subject): '''Assign this :class:`Role` to ``subject``.''' return subject.assign(self)
class Session(Model): '''A session model with a hash table as data store.''' serializable = False TEST_COOKIE_NAME = 'testcookie' TEST_COOKIE_VALUE = 'worked' id = odm.SymbolField(primary_key=True) data = odm.JSONField() expiry = odm.DateTimeField() user = odm.ForeignKey(User) must_save = False modified = True def __unicode__(self): return self.id @property def expired(self): return datetime.now() >= self.expiry def get(self, key, default=None): return self.data.get(key, default) def __contains__(self, key): return key in self.data def __getitem__(self, key): return self.data[key] def __setitem__(self, key, val): self.data[key] = val self.must_save = True def __delitem__(self, key): del self.data[key] def pop(self, key, *arg): return self.data.pop(key, *arg)
class Child(odm.StdModel): name = odm.SymbolField() parent = odm.ForeignKey(Parent) uncles = odm.ManyToManyField(Parent, related_name='nephews')
class Role(odm.StdModel): profile = odm.ForeignKey(Profile)
class Item(odm.StdModel): name = odm.SymbolField() content = odm.CharField() counter = odm.IntegerField() related = odm.ForeignKey(RelatedItem, required=False) secret = odm.CharField(hidden=True)
class UserDefaultView(odm.StdModel): user = odm.SymbolField() view = odm.ForeignKey(PortfolioView)
class Person(odm.StdModel): name = odm.SymbolField() group = odm.ForeignKey(Group)
class PortfolioView(odm.StdModel): name = odm.SymbolField() portfolio = odm.ForeignKey(Fund)
class Node(odm.StdModel): parent = odm.ForeignKey('self', required=False, related_name='children') weight = odm.FloatField() def __unicode__(self): return '%s' % self.weight
class AnalyticData(odm.StdModel): group = odm.ForeignKey(Group) object = odm.ForeignKey(ObjectAnalytics, related_name='analytics') data = odm.JSONField()
class CrossData(odm.StdModel): name = odm.SymbolField() data = odm.JSONField(as_string=False) extra = odm.ForeignKey('self', required=False)