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"
Beispiel #2
0
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
Beispiel #3
0
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))
Beispiel #4
0
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()