示例#1
0
文件: db.py 项目: zackbrand/poefixer
class Item(PoeDbBase):
    """
    The db-table for API item data
    """

    __tablename__ = 'item'

    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    api_id = sqlalchemy.Column(sqlalchemy.String(255),
                               nullable=False,
                               index=True,
                               unique=True)
    stash_id = sqlalchemy.Column(sqlalchemy.Integer,
                                 sqlalchemy.ForeignKey("stash.id"),
                                 nullable=False)
    h = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
    w = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
    x = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
    y = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
    abyssJewel = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    artFilename = sqlalchemy.Column(sqlalchemy.String(255))
    # Note: API docs say this cannot be null, but we get null values
    category = sqlalchemy.Column(SemiJSON)
    corrupted = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    cosmeticMods = sqlalchemy.Column(SemiJSON)
    craftedMods = sqlalchemy.Column(SemiJSON)
    descrText = sqlalchemy.Column(sqlalchemy.Unicode(255))
    duplicated = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    elder = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    enchantMods = sqlalchemy.Column(SemiJSON)
    explicitMods = sqlalchemy.Column(SemiJSON)
    flavourText = sqlalchemy.Column(SemiJSON)
    frameType = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
    icon = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
    identified = sqlalchemy.Column(sqlalchemy.Boolean, nullable=False)
    ilvl = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
    implicitMods = sqlalchemy.Column(SemiJSON)
    inventoryId = sqlalchemy.Column(sqlalchemy.String(255))
    isRelic = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    league = sqlalchemy.Column(sqlalchemy.Unicode(64),
                               nullable=False,
                               index=True)
    lockedToCharacter = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    maxStackSize = sqlalchemy.Column(sqlalchemy.Integer)
    name = sqlalchemy.Column(sqlalchemy.Unicode(255),
                             nullable=False,
                             index=True)
    nextLevelRequirements = sqlalchemy.Column(SemiJSON)
    note = sqlalchemy.Column(sqlalchemy.Unicode(255))
    properties = sqlalchemy.Column(SemiJSON)
    prophecyDiffText = sqlalchemy.Column(sqlalchemy.Unicode(255))
    prophecyText = sqlalchemy.Column(sqlalchemy.Unicode(255))
    requirements = sqlalchemy.Column(SemiJSON)
    secDescrText = sqlalchemy.Column(sqlalchemy.Text)
    shaper = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    sockets = sqlalchemy.Column(SemiJSON)
    stackSize = sqlalchemy.Column(sqlalchemy.Integer)
    support = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
    talismanTier = sqlalchemy.Column(sqlalchemy.Integer)
    typeLine = sqlalchemy.Column(sqlalchemy.String(255),
                                 nullable=False,
                                 index=True)
    utilityMods = sqlalchemy.Column(SemiJSON)
    verified = sqlalchemy.Column(sqlalchemy.Boolean, nullable=False)
    # This is an internal field which we use to track stash updates.
    # When a new version of the stash shows up, we mark all of the
    # items in it inactive, then we re-activate the one's we see again.
    active = sqlalchemy.Column(sqlalchemy.Boolean,
                               nullable=False,
                               default=True,
                               index=True)
    created_at = sqlalchemy.Column(sqlalchemy.Integer,
                                   nullable=False,
                                   index=True)
    updated_at = sqlalchemy.Column(sqlalchemy.Integer,
                                   nullable=False,
                                   index=True)

    def __repr__(self):
        return "<Item(name=%r, id=%s, api_id=%s, typeLine=%r)>" % (
            self.name, self.id, self.api_id, self.typeLine)
"""
import json

from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = 'd7a914dbc133'
down_revision = '93591ffbbc1b'

metadata = sa.MetaData()
question_type_groups = sa.Table(
    'question_type_groups', metadata,
    sa.Column('id', sa.Integer(), primary_key=True),
    sa.Column('name', sa.Unicode(255)), sa.Column('parent_id', sa.Integer()))
question_types = sa.Table('question_types', metadata,
                          sa.Column('id', sa.Integer(), primary_key=True),
                          sa.Column('name', sa.Unicode(255)),
                          sa.Column('frontend', sa.UnicodeText()),
                          sa.Column('backend', sa.UnicodeText()),
                          sa.Column('group_id', sa.Integer()),
                          sa.Column('parent_id', sa.Integer()))


def upgrade():
    parent = op.get_bind().execute(question_type_groups.select().where(
        question_type_groups.c.name == 'ess:builtins')).first()
    parent = op.get_bind().execute(question_type_groups.select().where(
        sa.and_(question_type_groups.c.name == 'ess:core',
                question_type_groups.c.parent_id == parent[0]))).first()
 class Comment(Base):
     __tablename__ = 'comment'
     id = sa.Column(sa.Integer, primary_key=True)
     content = sa.Column(sa.Unicode(255))
     thread_id = sa.Column(sa.Integer, sa.ForeignKey('thread.id'))
示例#4
0
        rdb.Column(column_key, rdb.Integer, primary_key=True),
        rdb.Column(column_name, rdb.Unicode(256), nullable=False, unique=True),
        rdb.Column("language", rdb.String(5), nullable=False),
    )


#######################
# Users
#######################

users = rdb.Table(
    "users",
    metadata,
    rdb.Column("user_id", rdb.Integer, PrincipalSequence, primary_key=True),
    # login is our principal id
    rdb.Column("login", rdb.Unicode(80), unique=True, nullable=True),
    rdb.Column("titles", rdb.Unicode(32)),
    rdb.Column("first_name", rdb.Unicode(256), nullable=False),
    rdb.Column("last_name", rdb.Unicode(256), nullable=False),
    rdb.Column("middle_name", rdb.Unicode(256)),
    rdb.Column("email", rdb.String(512), nullable=False),
    rdb.Column(
        "gender",
        rdb.String(1),
        rdb.CheckConstraint("""gender in ('M', 'F')""")  # (M)ale (F)emale
    ),
    rdb.Column("date_of_birth", rdb.Date),
    rdb.Column("birth_country", rdb.String(2),
               rdb.ForeignKey("countries.country_id")),
    rdb.Column("birth_nationality", rdb.String(2),
               rdb.ForeignKey("countries.country_id")),
from progressbar import ProgressBar
import progressbar.widgets

from coaster.utils import buid2uuid, uuid2buid

# revision identifiers, used by Alembic.
revision = '4e206c5ddabd'
down_revision = '83d3ede06c'
branch_labels = None
depends_on = None

user = table(
    'user',
    column('id', sa.Integer()),
    column('created_at', sa.DateTime()),
    column('userid', sa.Unicode(22)),
    column('uuid', UUIDType(binary=False)),
)
organization = table(
    'organization',
    column('id', sa.Integer()),
    column('created_at', sa.DateTime()),
    column('userid', sa.Unicode(22)),
    column('uuid', UUIDType(binary=False)),
)
team = table(
    'team',
    column('id', sa.Integer()),
    column('created_at', sa.DateTime()),
    column('userid', sa.Unicode(22)),
    column('uuid', UUIDType(binary=False)),
示例#6
0
class SlowCall(Base, BaseModel):
    __tablename__ = 'slow_calls'
    __table_args__ = {'implicit_returning': False}

    resource_id = sa.Column(sa.Integer(), nullable=False, index=True)
    id = sa.Column(sa.Integer, nullable=False, primary_key=True)
    report_id = sa.Column(sa.BigInteger,
                          sa.ForeignKey('reports.id',
                                        ondelete='cascade',
                                        onupdate='cascade'),
                          primary_key=True)
    duration = sa.Column(sa.Float(), default=0)
    statement = sa.Column(sa.UnicodeText(), default='')
    statement_hash = sa.Column(sa.Unicode(60), default='')
    parameters = sa.Column(JSON(), nullable=False, default=dict)
    type = sa.Column(sa.Unicode(16), default='')
    subtype = sa.Column(sa.Unicode(16), default=None)
    location = sa.Column(sa.Unicode(255), default='')
    timestamp = sa.Column(sa.DateTime(),
                          default=datetime.utcnow,
                          server_default=sa.func.now())
    report_group_time = sa.Column(sa.DateTime(),
                                  default=datetime.utcnow,
                                  server_default=sa.func.now())

    def set_data(self,
                 data,
                 protocol_version=None,
                 resource_id=None,
                 report_group=None):
        self.resource_id = resource_id
        if data.get('start') and data.get('end'):
            self.timestamp = data.get('start')
            d = data.get('end') - data.get('start')
            self.duration = d.total_seconds()
        self.statement = data.get('statement', '')
        self.type = data.get('type', 'unknown')[:16]
        self.parameters = data.get('parameters', {})
        self.location = data.get('location', '')[:255]
        self.report_group_time = report_group.first_timestamp
        if 'subtype' in data:
            self.subtype = data.get('subtype', 'unknown')[:16]
        if self.type == 'tmpl':
            self.set_hash('{} {}'.format(self.statement, self.parameters))
        else:
            self.set_hash()

    def set_hash(self, custom_statement=None):
        statement = custom_statement or self.statement
        self.statement_hash = hashlib.sha1(
            statement.encode('utf8')).hexdigest()

    @property
    def end_time(self):
        if self.duration and self.timestamp:
            return self.timestamp + timedelta(seconds=self.duration)
        return None

    def get_dict(self):
        instance_dict = super(SlowCall, self).get_dict()
        instance_dict['children'] = []
        instance_dict['end_time'] = self.end_time
        return instance_dict

    def es_doc(self):
        doc = {
            'resource_id':
            self.resource_id,
            'timestamp':
            self.timestamp,
            'pg_id':
            str(self.id),
            'permanent':
            False,
            'request_id':
            None,
            'log_level':
            'UNKNOWN',
            'message':
            self.statement,
            'namespace':
            'appenlight.slow_call',
            'tags': {
                'report_id': {
                    'values': self.report_id,
                    'numeric_values': self.report_id
                },
                'duration': {
                    'values': None,
                    'numeric_values': self.duration
                },
                'statement_hash': {
                    'values': self.statement_hash,
                    'numeric_values': None
                },
                'type': {
                    'values': self.type,
                    'numeric_values': None
                },
                'subtype': {
                    'values': self.subtype,
                    'numeric_values': None
                },
                'location': {
                    'values': self.location,
                    'numeric_values': None
                },
                'parameters': {
                    'values': None,
                    'numeric_values': None
                }
            },
            'tag_list': [
                'report_id', 'duration', 'statement_hash', 'type', 'subtype',
                'location'
            ]
        }
        if isinstance(self.parameters, str):
            doc['tags']['parameters']['values'] = self.parameters[:255]
        return doc

    @property
    def partition_id(self):
        return 'rcae_sc_%s' % self.report_group_time.strftime('%Y_%m')
示例#7
0
def upgrade():
    op.add_column("role", sa.Column("locale", sa.Unicode(), nullable=True))