forget-cancellare-vecchi-toot/model.py

93 lines
2.9 KiB
Python
Raw Normal View History

2017-07-25 10:10:44 +02:00
from datetime import datetime
2017-07-25 09:52:24 +02:00
from app import db
2017-07-27 00:35:53 +02:00
from twitter import Twitter, OAuth
import secrets
2017-07-27 00:35:53 +02:00
2017-07-25 10:10:44 +02:00
class TimestampMixin(object):
created_at = db.Column(db.DateTime, server_default=db.func.now())
updated_at = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
2017-07-25 09:52:24 +02:00
2017-07-27 00:35:53 +02:00
def touch(self):
self.updated_at=db.func.now()
2017-07-25 09:52:24 +02:00
class RemoteIDMixin(object):
@property
def service(self):
if not self.id:
return None
return self.id.split(":")[0]
2017-07-25 09:52:24 +02:00
@property
def twitter_id(self):
2017-07-30 01:35:29 +02:00
if not self.id:
return None
if self.service != "twitter":
raise Exception("wrong service bucko")
return self.id.split(":")[1]
@twitter_id.setter
def twitter_id(self, id):
self.id = "twitter:{}".format(id)
class Account(db.Model, TimestampMixin, RemoteIDMixin):
2017-07-27 00:35:53 +02:00
__tablename__ = 'accounts'
id = db.Column(db.String, primary_key=True)
2017-07-25 09:52:24 +02:00
2017-07-27 00:35:53 +02:00
# policy_enabled = db.Column(db.Boolean, server_default='FALSE', nullable=False)
# policy_keep_younger = db.Column(db.Interval)
# policy_keep_latest = db.Column(db.Integer)
# policy_delete_every = db.Column(db.Interval)
# policy_ignore_favourites = db.Column(db.Boolean, server_default='TRUE')
2017-07-25 09:52:24 +02:00
2017-07-27 00:35:53 +02:00
remote_display_name = db.Column(db.String)
2017-07-29 12:01:32 +02:00
remote_screen_name = db.Column(db.String)
2017-07-27 00:35:53 +02:00
remote_avatar_url = db.Column(db.String)
2017-07-28 12:48:00 +02:00
last_fetch = db.Column(db.DateTime, server_default='epoch')
2017-07-27 20:20:59 +02:00
# backref: tokens
2017-07-27 20:20:59 +02:00
2017-07-29 12:01:32 +02:00
def __repr__(self):
return f"<Account({self.id}, {self.remote_screen_name}, {self.remote_display_name})>"
2017-07-29 12:01:32 +02:00
2017-07-31 00:07:34 +02:00
def post_count(self):
return Post.query.filter(Post.author_id == self.id).count()
2017-07-27 00:35:53 +02:00
class OAuthToken(db.Model, TimestampMixin):
__tablename__ = 'oauth_tokens'
token = db.Column(db.String, primary_key=True)
token_secret = db.Column(db.String, nullable=False)
account_id = db.Column(db.String, db.ForeignKey('accounts.id'))
account = db.relationship(Account, backref=db.backref('tokens', order_by=lambda: db.desc(OAuthToken.created_at)))
2017-07-25 09:52:24 +02:00
class Session(db.Model, TimestampMixin):
__tablename__ = 'sessions'
id = db.Column(db.String, primary_key=True, default=lambda: secrets.token_urlsafe())
account_id = db.Column(db.String, db.ForeignKey('accounts.id'))
account = db.relationship(Account, lazy='joined')
2017-07-27 20:20:59 +02:00
class Post(db.Model, TimestampMixin, RemoteIDMixin):
2017-07-27 20:20:59 +02:00
__tablename__ = 'posts'
id = db.Column(db.String, primary_key=True)
2017-07-27 20:20:59 +02:00
body = db.Column(db.String)
author_id = db.Column(db.String, db.ForeignKey('accounts.id'))
author = db.relationship(Account)
2017-07-31 00:07:34 +02:00
class TwitterArchive(db.Model, TimestampMixin):
__tablename__ = 'twitter_archives'
id = db.Column(db.Integer, primary_key=True)
account_id = db.Column(db.String, db.ForeignKey('accounts.id'), nullable=False)
account = db.relationship(Account)
body = db.Column(db.LargeBinary, nullable=False)