1
# coding utf-8
2
# classes/sweet.py
3
# class:: Sweet
4
5
from datetime import datetime
6
7
from swtstore.classes.database import db
8
# custom SQLAlchemy type JSONType
9
from swtstore.classes.models.types import JSONType
10
from swtstore.classes.utils import urlnorm # normalize URLs
11
12
class Sweet(db.Model):
13
    """ customary docstring """
14
15
    __tablename__ = 'sweets'
16
17
    id = db.Column(db.Integer, primary_key=True)
18
19
    who = db.Column(db.String, nullable=False)
20
21
    what = db.relationship('Context', backref=db.backref('sweets',
22
                                                            order_by=id))
23
24
25
    context_id = db.Column(db.Integer, db.ForeignKey('contexts.id'))
26
27
    where = db.Column(db.String, nullable=False)
28
29
    how = db.Column(JSONType)
30
31
    created = db.Column(db.DateTime, default=datetime.utcnow)
32
33
34
    def __init__(self, who, what, where, how):
35
        print 'initing sweet..'
36
        self.who = who
37
        self.what = what
38
        self.where = urlnorm(where)
39
        self.how = how
40
41
42
    def __repr__(self):
43
        print '[Sweet Object: <%s : @%s: #%s : %s>]' % (self.id, self.who,
44
                                                        self.what, self.where)
45
46
    def __str__(self):
47
        return '[Sweet Object: <%s : @%s: #%s : %s>]' % (self.id, self.who,
48
                                                        self.what, self.where)
49
50
    # return a dictionary of data members
51
    def to_dict(self):
52
        return {
53
            'id': str(self.id),
54
            'who': self.who,
55
            'what': self.what,
56
            'context': self.context.name,
57
            'where': self.where,
58
            'how': self.how,
59
            'created': self.created
60
        }
61
62
63
    # create and persist the sweet to the database
64
    def persist(self):
65
66
        db.session.add(self)
67
        db.session.commit()