class TokenScope(db.Model): # known scopes SCOPE_SKILL = 'esi-skills.read_skills.v1' SCOPE_CLONES = 'characterClonesRead' SCOPE_CHAR_ASSETS = 'characterAssetsRead' SCOPE_CORP_ASSETS = 'corporationAssetsRead' # model user_id = db.Column(db.BigInteger, db.ForeignKey('user.character_id'), primary_key=True) user = db.relationship('User', backref=db.backref('tokens')) scope = db.Column(db.String(100), primary_key=True) access_token = db.Column(db.String(100)) access_token_expires = db.Column(UTCDateTime(timezone=True)) refresh_token = db.Column(db.String(100)) last_update = db.Column(UTCDateTime(timezone=True)) cached_until = db.Column(UTCDateTime(timezone=True)) created_at = db.Column(UTCDateTime(timezone=True), server_default=func.now()) updated_at = db.Column(UTCDateTime(timezone=True), server_default=func.now(), onupdate=func.now()) def update_token(self, token_response): self.access_token = token_response['access_token'] self.access_token_expires = datetime.fromtimestamp( time.time() + token_response['expires_in'], tz=pytz.utc) self.token_type = token_response['token_type'] if 'refresh_token' in token_response: self.refresh_token = token_response['refresh_token'] def get_sso_data(self): return { 'access_token': self.access_token, 'refresh_token': self.refresh_token, 'expires_in': (self.access_token_expires - utcnow()).total_seconds() } def get_last_update_string(self): """ return the utc string date in iso format without ms and TZ info""" if self.last_update: return self.last_update.replace(microsecond=0, tzinfo=None).isoformat(' ') else: return "Never updated" def get_cached_until_string(self): """ return the utc string date in iso format without ms and TZ info""" if self.cached_until: return self.cached_until.replace(microsecond=0, tzinfo=None).isoformat(' ') else: return "Unknown"
class User(db.Model, UserMixin): character_id = db.Column( db.BigInteger, primary_key=True, autoincrement=False ) character_owner_hash = db.Column(db.String(255)) character_name = db.Column(db.String(200)) is_admin = db.Column(db.Boolean, default=False) current_login_at = db.Column( UTCDateTime(timezone=True), server_default=func.now(), ) created_at = db.Column( UTCDateTime(timezone=True), server_default=func.now() ) updated_at = db.Column( UTCDateTime(timezone=True), server_default=func.now(), onupdate=func.now() ) # foreign keys main_character_id = db.Column( db.BigInteger, db.ForeignKey('user.character_id'), nullable=True ) main_character = db.relationship( 'User', remote_side=[character_id], backref=db.backref('alts_characters', lazy='dynamic') ) # methods def get_portrait_url(self, datasource='tranquility', size=128): """returns URL to Character portrait from EVE Image Server""" return "{0}Character/{1}_{2}.jpg".format( EsiClient.__image_server__[datasource], self.character_id, size ) def get_id(self): return self.character_id
class TaskState(db.Model): # possible states QUEUED = 'queued' RUNNING = 'running' SUCCESS = 'success' FAILURE = 'failure' # didn't finished ERROR = 'error' # finished with error UNKNOWN = 'unknown' STATES = [QUEUED, RUNNING, SUCCESS, FAILURE, ERROR, UNKNOWN] # task id will always be unique as it includes datetime task_id = db.Column(db.String(250), primary_key=True) # any id used (character, corporation, region, none) id = db.Column(db.BigInteger) scope = scope = db.Column(db.String(100)) # other data state = db.Column(db.String(20), default=QUEUED) start_date = db.Column(UTCDateTime(timezone=True)) end_date = db.Column(UTCDateTime(timezone=True))
class ItemPrice(db.Model): item_id = db.Column(db.Integer, primary_key=True, autoincrement=False) region_id = db.Column(db.Integer, primary_key=True) sell_price = db.Column(db.Numeric(precision=17, scale=2, decimal_return_scale=2, asdecimal=False), nullable=True) buy_price = db.Column(db.Numeric(precision=17, scale=2, decimal_return_scale=2, asdecimal=False), nullable=True) updated_at = db.Column(UTCDateTime(timezone=True), server_default=func.now()) def get_delta_update(self): return self.updated_at - utcnow()