class Client(BaseModel): client_id = db.Column(db.String(40), unique=True, index=True, nullable=False) client_secret = db.Column(db.String(55), unique=True, index=True, nullable=False) name = db.Column(db.String(255)) scopes = db.relationship("Scope", secondary=api_client_scope, back_populates="clients") def __init__(self, name=None, scopes=[]): self.name = name self.scopes = scopes self.client_id = gen_salt(40) self.client_secret = gen_salt(50) @classmethod def create(cls, name): return Client(name=name) # Some properties required by oauthlib. @property def default_redirect_uri(self): return None @property def default_scopes(self): return [scope.name for scope in self.scopes] def __repr__(self): return self.name
class Rock1500Song(BaseModel): title = db.Column(db.String(100), index=True) artist_id = db.Column(UUID(), db.ForeignKey('rock1500_artist.id'), nullable=False) artist = db.relationship(Rock1500Artist, backref="songs", lazy="joined") album_id = db.Column(UUID(), db.ForeignKey('rock1500_album.id'), nullable=False) album = db.relationship(Rock1500Album, backref="songs", lazy="joined") # The important rank, once it is known. rankThisYear = db.Column(db.Integer(), index=True) # Previous ranks if known. rank2021 = db.Column(db.Integer(), index=True, unique=True) rank2020 = db.Column(db.Integer(), index=True, unique=True) rank2019 = db.Column(db.Integer(), index=True, unique=True) rank2018 = db.Column(db.Integer(), index=True, unique=True) rank2017 = db.Column(db.Integer(), index=True, unique=True) rank2016 = db.Column(db.Integer(), index=True, unique=True) rank2015 = db.Column(db.Integer(), index=True, unique=True) rank2014 = db.Column(db.Integer(), index=True, unique=True) @classmethod def find_by_name(cls, title, artist): if not artist.id: # If the artist doesn't exist yet, then there won't be any songs by them. return None song = Rock1500Song.query.filter_by(title=title, artist=artist).first() return song def __repr__(self): return self.title def set2017Rank(self, value): self.rank2017 = int(value) def set2016Rank(self, value): self.rank2016 = int(value) def set2015Rank(self, value): self.rank2015 = int(value)
class Scope(BaseModel): name = db.Column(db.String(255), unique=True) clients = db.relationship("Client", secondary=api_client_scope, back_populates="scopes") def __repr__(self): return self.name
class Tournament(TournamentBaseModel): teams = relationship("Team", order_by='Team.date_created', lazy="dynamic", backref=db.backref("tournament")) creator_id = db.Column(UUID(), db.ForeignKey('user.id'), nullable=False) creator = db.relationship(User) pass
class Rock1500Pick(BaseModel): song_id = db.Column(UUID(), db.ForeignKey('rock1500_song.id'), nullable=False) song = db.relationship(Rock1500Song, backref="picks") position = db.Column(db.Integer(), nullable=False) # TODO delete orphans? # If a user removes a pick, it should be deleted user_id = db.Column(UUID(), db.ForeignKey('user.id'), nullable=False) user = db.relationship(User, backref=backref( "rock_picks", order_by=position, cascade='all, delete-orphan', )) def __repr__(self): return "%s: %s" % (self.position, self.song)
class FoodItem(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), nullable=False, unique=True) unit_id = db.Column(db.Integer, db.ForeignKey('unit.id'), nullable=False) carbohydrates_per_unit = db.Column(db.Integer, nullable=False) calories_per_unit = db.Column(db.Integer, nullable=False) mealparts = db.relationship('MealPart') @property def unit(self): return self._unit.name @unit.setter def unit(self, value): unit = Unit.query.filter_by(name=value).first() if unit is None: unit = Unit(name=value) self._unit = unit
class Rock1500Album(BaseModel): name = db.Column(db.String(100), unique=True, index=True) year = db.Column(db.Integer()) # the cover art image url cover_art_url = db.Column(db.String(255)) artist_id = db.Column(UUID(), db.ForeignKey('rock1500_artist.id')) artist = db.relationship(Rock1500Artist, backref="albums") @classmethod def find_by_name(cls, name): album = Rock1500Album.query.filter_by(name=name).first() return album def __repr__(self): return self.name
class Unit(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32), nullable=False) fooditems = db.relationship('FoodItem', backref='_unit', lazy=True)
class Meal(db.Model): id = db.Column(db.Integer, primary_key=True) timestamp = db.Column(db.DateTime, nullable=False) mealparts = db.relationship('MealPart')