7044 lines
191 KiB
Python
7044 lines
191 KiB
Python
"""Initial
|
||
|
||
Revision ID: fbb7e2a0cde0
|
||
Revises:
|
||
Create Date: 2020-05-07 10:04:40.269511
|
||
|
||
"""
|
||
import citext
|
||
import sqlalchemy as sa
|
||
import sqlalchemy_utils
|
||
from ereuse_devicehub import teal
|
||
from alembic import context
|
||
from alembic import op
|
||
from sqlalchemy.dialects import postgresql
|
||
|
||
from ereuse_devicehub.resources.enums import TransferState, Severity
|
||
|
||
# revision identifiers, used by Alembic.
|
||
revision = 'fbb7e2a0cde0'
|
||
down_revision = None
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
|
||
def get_inv():
|
||
INV = context.get_x_argument(as_dictionary=True).get('inventory')
|
||
if not INV:
|
||
raise ValueError("Inventory value is not specified")
|
||
return INV
|
||
|
||
|
||
def upgrade():
|
||
# Create Common schema
|
||
op.execute("create schema common")
|
||
op.execute(f"create schema {get_inv()}")
|
||
|
||
# Inventory table
|
||
op.create_table(
|
||
'inventory',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column(
|
||
'id',
|
||
sa.Unicode(),
|
||
nullable=False,
|
||
comment='The name of the inventory as in the URL and schema.',
|
||
),
|
||
sa.Column(
|
||
'name',
|
||
citext.CIText(),
|
||
nullable=False,
|
||
comment='The human name of the inventory.',
|
||
),
|
||
sa.Column('tag_provider', teal.db.URL(), nullable=False),
|
||
sa.Column(
|
||
'tag_token',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=False,
|
||
comment='The token to access a Tag service.',
|
||
),
|
||
sa.Column('org_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('name'),
|
||
sa.UniqueConstraint('tag_token'),
|
||
schema='common',
|
||
)
|
||
op.create_index(
|
||
'id_hash',
|
||
'inventory',
|
||
['id'],
|
||
unique=False,
|
||
schema='common',
|
||
postgresql_using='hash',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_common_inventory_created'),
|
||
'inventory',
|
||
['created'],
|
||
unique=False,
|
||
schema='common',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_common_inventory_updated'),
|
||
'inventory',
|
||
['updated'],
|
||
unique=False,
|
||
schema='common',
|
||
)
|
||
|
||
# Manufacturer table
|
||
op.create_table(
|
||
'manufacturer',
|
||
sa.Column(
|
||
'name',
|
||
citext.CIText(),
|
||
nullable=False,
|
||
comment='The normalized name of the manufacturer.',
|
||
),
|
||
sa.Column(
|
||
'url',
|
||
teal.db.URL(),
|
||
nullable=True,
|
||
comment='An URL to a page describing the manufacturer.',
|
||
),
|
||
sa.Column(
|
||
'logo',
|
||
teal.db.URL(),
|
||
nullable=True,
|
||
comment='An URL pointing to the logo of the manufacturer.',
|
||
),
|
||
sa.PrimaryKeyConstraint('name'),
|
||
sa.UniqueConstraint('url'),
|
||
schema='common',
|
||
)
|
||
|
||
# User table
|
||
op.create_table(
|
||
'user',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column(
|
||
'email', sqlalchemy_utils.types.email.EmailType(length=255), nullable=False
|
||
),
|
||
sa.Column(
|
||
'password',
|
||
sqlalchemy_utils.types.password.PasswordType(max_length=64),
|
||
nullable=True,
|
||
),
|
||
sa.Column('token', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('ethereum_address', citext.CIText(), nullable=True),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('email'),
|
||
sa.UniqueConstraint('ethereum_address'),
|
||
sa.UniqueConstraint('token'),
|
||
schema='common',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_common_user_created'),
|
||
'user',
|
||
['created'],
|
||
unique=False,
|
||
schema='common',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_common_user_updated'),
|
||
'user',
|
||
['updated'],
|
||
unique=False,
|
||
schema='common',
|
||
)
|
||
|
||
# User Inventory table
|
||
op.create_table(
|
||
'user_inventory',
|
||
sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('inventory_id', sa.Unicode(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['inventory_id'],
|
||
['common.inventory.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['user_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('user_id', 'inventory_id'),
|
||
schema='common',
|
||
)
|
||
|
||
# Device table
|
||
op.create_table(
|
||
'device',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column(
|
||
'id',
|
||
sa.BigInteger(),
|
||
nullable=False,
|
||
comment='The identifier of the device for this database. Used only\n internally for software; users should not use this.\n ',
|
||
),
|
||
sa.Column('type', sa.Unicode(length=32), nullable=False),
|
||
sa.Column(
|
||
'hid',
|
||
sa.Unicode(),
|
||
nullable=True,
|
||
comment='The Hardware ID (HID) is the unique ID traceability\n systems use to ID a device globally. This field is auto-generated\n from Devicehub using literal identifiers from the device,\n so it can re-generated *offline*.\n \n The HID is the result of concatenating,\n in the following order: the type of device (ex. Computer),\n the manufacturer name, the model name, and the S/N. It is joined\n with hyphens, and adapted to comply with the URI specification, so\n it can be used in the URI identifying the device on the Internet.\n The conversion is done as follows:\n \n 1. non-ASCII characters are converted to their ASCII equivalent or\n removed.\n 2. Characterst that are not letters or numbers are converted to \n underscores, in a way that there are no trailing underscores\n and no underscores together, and they are set to lowercase.\n \n Ex. ``laptop-acer-aod270-lusga_0d0242201212c7614``\n ',
|
||
),
|
||
sa.Column(
|
||
'model',
|
||
sa.Unicode(),
|
||
nullable=True,
|
||
comment='The model of the device in lower case.\n\n\n The model is the unambiguous, as technical as possible, denomination\n for the product. This field, among others, is used to identify\n the product.\n ',
|
||
),
|
||
sa.Column(
|
||
'manufacturer',
|
||
sa.Unicode(),
|
||
nullable=True,
|
||
comment='The normalized name of the manufacturer,\n in lower case.\n\n Although as of now Devicehub does not enforce normalization,\n users can choose a list of normalized manufacturer names\n from the own ``/manufacturers`` REST endpoint.\n ',
|
||
),
|
||
sa.Column(
|
||
'serial_number',
|
||
sa.Unicode(),
|
||
nullable=True,
|
||
comment='The serial number of the device in lower case.',
|
||
),
|
||
sa.Column(
|
||
'brand',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='A naming for consumers. This field can represent\n several models, so it can be ambiguous, and it is not used to\n identify the product.\n ',
|
||
),
|
||
sa.Column(
|
||
'generation',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The generation of the device.',
|
||
),
|
||
sa.Column(
|
||
'version',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='The version code of this device, like v1 or A001.',
|
||
),
|
||
sa.Column(
|
||
'weight',
|
||
sa.Float(decimal_return_scale=4),
|
||
nullable=True,
|
||
comment='The weight of the device in Kg.',
|
||
),
|
||
sa.Column(
|
||
'width',
|
||
sa.Float(decimal_return_scale=4),
|
||
nullable=True,
|
||
comment='The width of the device in meters.',
|
||
),
|
||
sa.Column(
|
||
'height',
|
||
sa.Float(decimal_return_scale=4),
|
||
nullable=True,
|
||
comment='The height of the device in meters.',
|
||
),
|
||
sa.Column(
|
||
'depth',
|
||
sa.Float(decimal_return_scale=4),
|
||
nullable=True,
|
||
comment='The depth of the device in meters.',
|
||
),
|
||
sa.Column(
|
||
'color',
|
||
sqlalchemy_utils.types.color.ColorType(length=20),
|
||
nullable=True,
|
||
comment='The predominant color of the device.',
|
||
),
|
||
sa.Column(
|
||
'production_date',
|
||
sa.DateTime(),
|
||
nullable=True,
|
||
comment='The date of production of the device.\n This is timezone naive, as Workbench cannot report this data with timezone information.\n ',
|
||
),
|
||
sa.Column(
|
||
'variant',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='A variant or sub-model of the device.',
|
||
),
|
||
sa.Column(
|
||
'sku',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='The Stock Keeping Unit (SKU), i.e. a\n merchant-specific identifier for a product or service.\n ',
|
||
),
|
||
sa.Column(
|
||
'image', teal.db.URL(), nullable=True, comment='An image of the device.'
|
||
),
|
||
sa.Column('max_drill_bit_size', sa.SmallInteger(), nullable=True),
|
||
sa.Column(
|
||
'size', sa.SmallInteger(), nullable=True, comment='The capacity in Liters.'
|
||
),
|
||
sa.Column('max_allowed_weight', sa.Integer(), nullable=True),
|
||
sa.Column('wheel_size', sa.SmallInteger(), nullable=True),
|
||
sa.Column('gears', sa.SmallInteger(), nullable=True),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'device_id',
|
||
'device',
|
||
['id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_device_created'),
|
||
'device',
|
||
['created'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_device_updated'),
|
||
'device',
|
||
['updated'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'type_index',
|
||
'device',
|
||
['type'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_table(
|
||
'agent',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('type', sa.Unicode(), nullable=False),
|
||
sa.Column(
|
||
'name',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='The name of the organization or person.',
|
||
),
|
||
sa.Column(
|
||
'tax_id',
|
||
sa.Unicode(length=32),
|
||
nullable=True,
|
||
comment='The Tax / Fiscal ID of the organization, \n e.g. the TIN in the US or the CIF/NIF in Spain.\n ',
|
||
),
|
||
sa.Column(
|
||
'country',
|
||
sa.Enum(
|
||
'AF',
|
||
'AX',
|
||
'AL',
|
||
'DZ',
|
||
'AS',
|
||
'AD',
|
||
'AO',
|
||
'AI',
|
||
'AQ',
|
||
'AG',
|
||
'AR',
|
||
'AM',
|
||
'AW',
|
||
'AU',
|
||
'AT',
|
||
'AZ',
|
||
'BS',
|
||
'BH',
|
||
'BD',
|
||
'BB',
|
||
'BY',
|
||
'BE',
|
||
'BZ',
|
||
'BJ',
|
||
'BM',
|
||
'BT',
|
||
'BO',
|
||
'BQ',
|
||
'BA',
|
||
'BW',
|
||
'BV',
|
||
'BR',
|
||
'IO',
|
||
'BN',
|
||
'BG',
|
||
'BF',
|
||
'BI',
|
||
'KH',
|
||
'CM',
|
||
'CA',
|
||
'CV',
|
||
'KY',
|
||
'CF',
|
||
'TD',
|
||
'CL',
|
||
'CN',
|
||
'CX',
|
||
'CC',
|
||
'CO',
|
||
'KM',
|
||
'CG',
|
||
'CD',
|
||
'CK',
|
||
'CR',
|
||
'CI',
|
||
'HR',
|
||
'CU',
|
||
'CW',
|
||
'CY',
|
||
'CZ',
|
||
'DK',
|
||
'DJ',
|
||
'DM',
|
||
'DO',
|
||
'EC',
|
||
'EG',
|
||
'SV',
|
||
'GQ',
|
||
'ER',
|
||
'EE',
|
||
'ET',
|
||
'FK',
|
||
'FO',
|
||
'FJ',
|
||
'FI',
|
||
'FR',
|
||
'GF',
|
||
'PF',
|
||
'TF',
|
||
'GA',
|
||
'GM',
|
||
'GE',
|
||
'DE',
|
||
'GH',
|
||
'GI',
|
||
'GR',
|
||
'GL',
|
||
'GD',
|
||
'GP',
|
||
'GU',
|
||
'GT',
|
||
'GG',
|
||
'GN',
|
||
'GW',
|
||
'GY',
|
||
'HT',
|
||
'HM',
|
||
'VA',
|
||
'HN',
|
||
'HK',
|
||
'HU',
|
||
'IS',
|
||
'IN',
|
||
'ID',
|
||
'IR',
|
||
'IQ',
|
||
'IE',
|
||
'IM',
|
||
'IL',
|
||
'IT',
|
||
'JM',
|
||
'JP',
|
||
'JE',
|
||
'JO',
|
||
'KZ',
|
||
'KE',
|
||
'KI',
|
||
'KP',
|
||
'KR',
|
||
'KW',
|
||
'KG',
|
||
'LA',
|
||
'LV',
|
||
'LB',
|
||
'LS',
|
||
'LR',
|
||
'LY',
|
||
'LI',
|
||
'LT',
|
||
'LU',
|
||
'MO',
|
||
'MK',
|
||
'MG',
|
||
'MW',
|
||
'MY',
|
||
'MV',
|
||
'ML',
|
||
'MT',
|
||
'MH',
|
||
'MQ',
|
||
'MR',
|
||
'MU',
|
||
'YT',
|
||
'MX',
|
||
'FM',
|
||
'MD',
|
||
'MC',
|
||
'MN',
|
||
'ME',
|
||
'MS',
|
||
'MA',
|
||
'MZ',
|
||
'MM',
|
||
'NA',
|
||
'NR',
|
||
'NP',
|
||
'NL',
|
||
'NC',
|
||
'NZ',
|
||
'NI',
|
||
'NE',
|
||
'NG',
|
||
'NU',
|
||
'NF',
|
||
'MP',
|
||
'NO',
|
||
'OM',
|
||
'PK',
|
||
'PW',
|
||
'PS',
|
||
'PA',
|
||
'PG',
|
||
'PY',
|
||
'PE',
|
||
'PH',
|
||
'PN',
|
||
'PL',
|
||
'PT',
|
||
'PR',
|
||
'QA',
|
||
'RE',
|
||
'RO',
|
||
'RU',
|
||
'RW',
|
||
'BL',
|
||
'SH',
|
||
'KN',
|
||
'LC',
|
||
'MF',
|
||
'PM',
|
||
'VC',
|
||
'WS',
|
||
'SM',
|
||
'ST',
|
||
'SA',
|
||
'SN',
|
||
'RS',
|
||
'SC',
|
||
'SL',
|
||
'SG',
|
||
'SX',
|
||
'SK',
|
||
'SI',
|
||
'SB',
|
||
'SO',
|
||
'ZA',
|
||
'GS',
|
||
'SS',
|
||
'ES',
|
||
'LK',
|
||
'SD',
|
||
'SR',
|
||
'SJ',
|
||
'SZ',
|
||
'SE',
|
||
'CH',
|
||
'SY',
|
||
'TW',
|
||
'TJ',
|
||
'TZ',
|
||
'TH',
|
||
'TL',
|
||
'TG',
|
||
'TK',
|
||
'TO',
|
||
'TT',
|
||
'TN',
|
||
'TR',
|
||
'TM',
|
||
'TC',
|
||
'TV',
|
||
'UG',
|
||
'UA',
|
||
'AE',
|
||
'GB',
|
||
'US',
|
||
'UM',
|
||
'UY',
|
||
'UZ',
|
||
'VU',
|
||
'VE',
|
||
'VN',
|
||
'VG',
|
||
'VI',
|
||
'WF',
|
||
'EH',
|
||
'YE',
|
||
'ZM',
|
||
'ZW',
|
||
name='country',
|
||
),
|
||
nullable=True,
|
||
comment='Country issuing the tax_id number.',
|
||
),
|
||
sa.Column(
|
||
'telephone',
|
||
sqlalchemy_utils.types.phone_number.PhoneNumberType(length=20),
|
||
nullable=True,
|
||
),
|
||
sa.Column(
|
||
'email', sqlalchemy_utils.types.email.EmailType(length=255), nullable=True
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('email'),
|
||
sa.UniqueConstraint(
|
||
'tax_id', 'country', name='Registration Number per country.'
|
||
),
|
||
sa.UniqueConstraint('tax_id', 'name', name='One tax ID with one name.'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'agent_type',
|
||
'agent',
|
||
['type'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_agent_created'),
|
||
'agent',
|
||
['created'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_agent_updated'),
|
||
'agent',
|
||
['updated'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Computer table
|
||
op.create_table(
|
||
'computer',
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.Column(
|
||
'chassis',
|
||
sa.Enum(
|
||
'Tower',
|
||
'Docking',
|
||
'AllInOne',
|
||
'Microtower',
|
||
'PizzaBox',
|
||
'Lunchbox',
|
||
'Stick',
|
||
'Netbook',
|
||
'Handheld',
|
||
'Laptop',
|
||
'Convertible',
|
||
'Detachable',
|
||
'Tablet',
|
||
'Virtual',
|
||
name='computerchassis',
|
||
),
|
||
nullable=False,
|
||
comment='The physical form of the computer.\n\n It is a subset of the Linux definition of DMI / DMI decode.\n ',
|
||
),
|
||
sa.Column('ethereum_address', citext.CIText(), nullable=True),
|
||
sa.Column('deposit', sa.Integer(), nullable=True),
|
||
sa.Column('owner_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column(
|
||
'transfer_state',
|
||
teal.db.IntEnum(TransferState),
|
||
nullable=False,
|
||
comment='State of transfer for a given Lot of devices.\n ',
|
||
),
|
||
sa.Column('receiver_id', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column('deliverynote_address', citext.CIText(), nullable=True),
|
||
sa.Column(
|
||
'layout',
|
||
sa.Enum(
|
||
'US',
|
||
'AF',
|
||
'ARA',
|
||
'AL',
|
||
'AM',
|
||
'AT',
|
||
'AU',
|
||
'AZ',
|
||
'BY',
|
||
'BE',
|
||
'BD',
|
||
'BA',
|
||
'BR',
|
||
'BG',
|
||
'DZ',
|
||
'MA',
|
||
'CM',
|
||
'MM',
|
||
'CA',
|
||
'CD',
|
||
'CN',
|
||
'HR',
|
||
'CZ',
|
||
'DK',
|
||
'NL',
|
||
'BT',
|
||
'EE',
|
||
'IR',
|
||
'IQ',
|
||
'FO',
|
||
'FI',
|
||
'FR',
|
||
'GH',
|
||
'GN',
|
||
'GE',
|
||
'DE',
|
||
'GR',
|
||
'HU',
|
||
'IL',
|
||
'IT',
|
||
'JP',
|
||
'KG',
|
||
'KH',
|
||
'KZ',
|
||
'LA',
|
||
'LATAM',
|
||
'LT',
|
||
'LV',
|
||
'MAO',
|
||
'ME',
|
||
'MK',
|
||
'MT',
|
||
'MN',
|
||
'NO',
|
||
'PL',
|
||
'PT',
|
||
'RO',
|
||
'RU',
|
||
'RS',
|
||
'SI',
|
||
'SK',
|
||
'ES',
|
||
'SE',
|
||
'CH',
|
||
'SY',
|
||
'TJ',
|
||
'LK',
|
||
'TH',
|
||
'TR',
|
||
'TW',
|
||
'UA',
|
||
'GB',
|
||
'UZ',
|
||
'VN',
|
||
'KR',
|
||
'IE',
|
||
'PK',
|
||
'MV',
|
||
'ZA',
|
||
'EPO',
|
||
'NP',
|
||
'NG',
|
||
'ET',
|
||
'SN',
|
||
'BRAI',
|
||
'TM',
|
||
'ML',
|
||
'TZ',
|
||
'TG',
|
||
'KE',
|
||
'BW',
|
||
'PH',
|
||
'MD',
|
||
'ID',
|
||
'MY',
|
||
'BN',
|
||
'IN',
|
||
'IS',
|
||
'NEC_VNDR_JP',
|
||
name='layouts',
|
||
),
|
||
nullable=True,
|
||
comment='Layout of a built-in keyboard of the computer,\n if any.\n ',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['owner_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['receiver_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('ethereum_address'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Computer accessory
|
||
op.create_table(
|
||
'computer_accessory',
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.Column(
|
||
'layout',
|
||
sa.Enum(
|
||
'US',
|
||
'AF',
|
||
'ARA',
|
||
'AL',
|
||
'AM',
|
||
'AT',
|
||
'AU',
|
||
'AZ',
|
||
'BY',
|
||
'BE',
|
||
'BD',
|
||
'BA',
|
||
'BR',
|
||
'BG',
|
||
'DZ',
|
||
'MA',
|
||
'CM',
|
||
'MM',
|
||
'CA',
|
||
'CD',
|
||
'CN',
|
||
'HR',
|
||
'CZ',
|
||
'DK',
|
||
'NL',
|
||
'BT',
|
||
'EE',
|
||
'IR',
|
||
'IQ',
|
||
'FO',
|
||
'FI',
|
||
'FR',
|
||
'GH',
|
||
'GN',
|
||
'GE',
|
||
'DE',
|
||
'GR',
|
||
'HU',
|
||
'IL',
|
||
'IT',
|
||
'JP',
|
||
'KG',
|
||
'KH',
|
||
'KZ',
|
||
'LA',
|
||
'LATAM',
|
||
'LT',
|
||
'LV',
|
||
'MAO',
|
||
'ME',
|
||
'MK',
|
||
'MT',
|
||
'MN',
|
||
'NO',
|
||
'PL',
|
||
'PT',
|
||
'RO',
|
||
'RU',
|
||
'RS',
|
||
'SI',
|
||
'SK',
|
||
'ES',
|
||
'SE',
|
||
'CH',
|
||
'SY',
|
||
'TJ',
|
||
'LK',
|
||
'TH',
|
||
'TR',
|
||
'TW',
|
||
'UA',
|
||
'GB',
|
||
'UZ',
|
||
'VN',
|
||
'KR',
|
||
'IE',
|
||
'PK',
|
||
'MV',
|
||
'ZA',
|
||
'EPO',
|
||
'NP',
|
||
'NG',
|
||
'ET',
|
||
'SN',
|
||
'BRAI',
|
||
'TM',
|
||
'ML',
|
||
'TZ',
|
||
'TG',
|
||
'KE',
|
||
'BW',
|
||
'PH',
|
||
'MD',
|
||
'ID',
|
||
'MY',
|
||
'BN',
|
||
'IN',
|
||
'IS',
|
||
'NEC_VNDR_JP',
|
||
name='layouts',
|
||
),
|
||
nullable=True,
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Device search table
|
||
op.create_table(
|
||
'device_search',
|
||
sa.Column('device_id', sa.BigInteger(), nullable=False),
|
||
sa.Column('properties', postgresql.TSVECTOR(), nullable=False),
|
||
sa.Column('tags', postgresql.TSVECTOR(), nullable=True),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'], [f'{get_inv()}.device.id'], ondelete='CASCADE'
|
||
),
|
||
sa.PrimaryKeyConstraint('device_id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'properties gist',
|
||
'device_search',
|
||
['properties'],
|
||
unique=False,
|
||
postgresql_using='gist',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'tags gist',
|
||
'device_search',
|
||
['tags'],
|
||
unique=False,
|
||
postgresql_using='gist',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Lot table
|
||
op.create_table(
|
||
'lot',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('name', citext.CIText(), nullable=False),
|
||
sa.Column(
|
||
'description',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='A comment about the lot.',
|
||
),
|
||
sa.Column(
|
||
'closed',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='A closed lot cannot be modified anymore.',
|
||
),
|
||
sa.Column('deposit', sa.Integer(), nullable=True),
|
||
sa.Column('owner_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column(
|
||
'transfer_state',
|
||
teal.db.IntEnum(TransferState),
|
||
nullable=False,
|
||
comment='State of transfer for a given Lot of devices.\n ',
|
||
),
|
||
sa.Column('receiver_address', citext.CIText(), nullable=True),
|
||
sa.Column('deliverynote_address', citext.CIText(), nullable=True),
|
||
sa.ForeignKeyConstraint(
|
||
['owner_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['receiver_address'],
|
||
['common.user.ethereum_address'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_lot_created'), 'lot', ['created'], unique=False, schema=f'{get_inv()}'
|
||
)
|
||
op.create_index(
|
||
op.f('ix_lot_updated'), 'lot', ['updated'], unique=False, schema=f'{get_inv()}'
|
||
)
|
||
|
||
# Mobile table
|
||
op.create_table(
|
||
'mobile',
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.Column(
|
||
'imei',
|
||
sa.BigInteger(),
|
||
nullable=True,
|
||
comment='The International Mobile Equipment Identity of\n the smartphone as an integer.\n ',
|
||
),
|
||
sa.Column(
|
||
'meid',
|
||
sa.Unicode(),
|
||
nullable=True,
|
||
comment='The Mobile Equipment Identifier as a hexadecimal\n string.\n ',
|
||
),
|
||
sa.Column(
|
||
'ram_size',
|
||
sa.Integer(),
|
||
nullable=True,
|
||
comment='The total of RAM of the device in MB.',
|
||
),
|
||
sa.Column(
|
||
'data_storage_size',
|
||
sa.Integer(),
|
||
nullable=True,
|
||
comment='The total of data storage of the device in MB',
|
||
),
|
||
sa.Column(
|
||
'display_size',
|
||
sa.Float(decimal_return_scale=1),
|
||
nullable=True,
|
||
comment='The total size of the device screen',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Monitor table
|
||
op.create_table(
|
||
'monitor',
|
||
sa.Column(
|
||
'size',
|
||
sa.Float(decimal_return_scale=1),
|
||
nullable=False,
|
||
comment='The size of the monitor in inches.',
|
||
),
|
||
sa.Column(
|
||
'technology',
|
||
sa.Enum(
|
||
'CRT', 'TFT', 'LED', 'PDP', 'LCD', 'OLED', 'AMOLED', name='displaytech'
|
||
),
|
||
nullable=True,
|
||
comment='The technology the monitor uses to display\n the image.\n ',
|
||
),
|
||
sa.Column(
|
||
'resolution_width',
|
||
sa.SmallInteger(),
|
||
nullable=False,
|
||
comment='The maximum horizontal resolution the\n monitor can natively support in pixels.\n ',
|
||
),
|
||
sa.Column(
|
||
'resolution_height',
|
||
sa.SmallInteger(),
|
||
nullable=False,
|
||
comment='The maximum vertical resolution the\n monitor can natively support in pixels.\n ',
|
||
),
|
||
sa.Column('refresh_rate', sa.SmallInteger(), nullable=True),
|
||
sa.Column('contrast_ratio', sa.SmallInteger(), nullable=True),
|
||
sa.Column(
|
||
'touchable',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='Whether it is a touchscreen.',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Networtking table
|
||
op.create_table(
|
||
'networking',
|
||
sa.Column(
|
||
'speed',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The maximum speed this network adapter can handle,\n in mbps.\n ',
|
||
),
|
||
sa.Column(
|
||
'wireless',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Whether it is a wireless interface.',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Organization table
|
||
op.create_table(
|
||
'organization',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.agent.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Printer table
|
||
op.create_table(
|
||
'printer',
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.Column(
|
||
'wireless',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Whether it is a wireless printer.',
|
||
),
|
||
sa.Column(
|
||
'scanning',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Whether the printer has scanning capabilities.',
|
||
),
|
||
sa.Column(
|
||
'technology',
|
||
sa.Enum(
|
||
'Toner',
|
||
'Inkjet',
|
||
'SolidInk',
|
||
'Dye',
|
||
'Thermal',
|
||
name='printertechnology',
|
||
),
|
||
nullable=True,
|
||
comment='Technology used to print.',
|
||
),
|
||
sa.Column(
|
||
'monochrome',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Whether the printer is only monochrome.',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Proof table
|
||
op.create_table(
|
||
'proof',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('type', sa.Unicode(), nullable=False),
|
||
sa.Column('ethereum_hash', citext.CIText(), nullable=False),
|
||
sa.Column('device_id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_proof_created'),
|
||
'proof',
|
||
['created'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_proof_updated'),
|
||
'proof',
|
||
['updated'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Action table
|
||
op.create_table(
|
||
'action',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('type', sa.Unicode(), nullable=False),
|
||
sa.Column(
|
||
'name',
|
||
citext.CIText(),
|
||
nullable=False,
|
||
comment='A name or title for the action. Used when searching\n for actions.\n ',
|
||
),
|
||
sa.Column(
|
||
'severity',
|
||
teal.db.IntEnum(Severity),
|
||
nullable=False,
|
||
comment='A flag evaluating the action execution. Ex. failed actions\n have the value `Severity.Error`. Devicehub uses 4 severity levels:\n\n * Info (Pass): default neutral severity. The action succeeded.\n * Notice: The action succeeded but it is raising awareness.\n Notices are not usually that important but something\n (good or bad) worth checking.\n * Warning: The action succeeded but there is something important\n to check negatively affecting the action.\n * Error (Fail): the action failed.\n\n Devicehub specially raises user awareness when an action\n has a Severity of ``Warning`` or greater.\n ',
|
||
),
|
||
sa.Column(
|
||
'closed',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Whether the author has finished the action.\n After this is set to True, no modifications are allowed.\n By default actions are closed when performed.\n ',
|
||
),
|
||
sa.Column(
|
||
'description',
|
||
sa.Unicode(),
|
||
nullable=False,
|
||
comment='A comment about the action.',
|
||
),
|
||
sa.Column(
|
||
'start_time',
|
||
sa.TIMESTAMP(timezone=True),
|
||
nullable=True,
|
||
comment='When the action starts. For some actions like\n reservations the time when they are available, for others like renting\n when the renting starts.\n ',
|
||
),
|
||
sa.Column(
|
||
'end_time',
|
||
sa.TIMESTAMP(timezone=True),
|
||
nullable=True,
|
||
comment='When the action ends. For some actions like reservations\n the time when they expire, for others like renting\n the time the end rents. For punctual actions it is the time \n they are performed; it differs with ``created`` in which\n created is the where the system received the action.\n ',
|
||
),
|
||
sa.Column('snapshot_id', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column(
|
||
'author_id',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=False,
|
||
comment='The user that recorded this action in the system.\n \n This does not necessarily has to be the person that produced\n the action in the real world. For that purpose see\n ``agent``.\n ',
|
||
),
|
||
sa.Column(
|
||
'agent_id',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=False,
|
||
comment='The direct performer or driver of the action. \n e.g. John wrote a book.\n \n It can differ with the user that registered the action in the\n system, which can be in their behalf.\n ',
|
||
),
|
||
sa.Column(
|
||
'parent_id',
|
||
sa.BigInteger(),
|
||
nullable=True,
|
||
comment='For actions that are performed to components, \n the device parent at that time.\n \n For example: for a ``EraseBasic`` performed on a data storage, this\n would point to the computer that contained this data storage, if any.\n ',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['agent_id'],
|
||
[f'{get_inv()}.agent.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['author_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['parent_id'],
|
||
[f'{get_inv()}.computer.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['snapshot_id'],
|
||
[f'{get_inv()}.snapshot.id'],
|
||
name='snapshot_actions',
|
||
use_alter=True,
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_action_created'),
|
||
'action',
|
||
['created'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_action_updated'),
|
||
'action',
|
||
['updated'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'ix_id',
|
||
'action',
|
||
['id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'ix_parent_id',
|
||
'action',
|
||
['parent_id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'ix_type',
|
||
'action',
|
||
['type'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Component table
|
||
op.create_table(
|
||
'component',
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.Column('parent_id', sa.BigInteger(), nullable=True),
|
||
sa.Column('focal_length', sa.SmallInteger(), nullable=True),
|
||
sa.Column('video_height', sa.SmallInteger(), nullable=True),
|
||
sa.Column('video_width', sa.Integer(), nullable=True),
|
||
sa.Column('horizontal_view_angle', sa.Integer(), nullable=True),
|
||
sa.Column(
|
||
'facing', sa.Enum('Front', 'Back', name='camerafacing'), nullable=True
|
||
),
|
||
sa.Column('vertical_view_angle', sa.SmallInteger(), nullable=True),
|
||
sa.Column('video_stabilization', sa.Boolean(), nullable=True),
|
||
sa.Column('flash', sa.Boolean(), nullable=True),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['parent_id'],
|
||
[f'{get_inv()}.computer.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'parent_index',
|
||
'component',
|
||
['parent_id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Deliverynote table
|
||
op.create_table(
|
||
'deliverynote',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('document_id', citext.CIText(), nullable=False),
|
||
sa.Column('creator_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('supplier_email', citext.CIText(), nullable=False),
|
||
sa.Column('receiver_address', citext.CIText(), nullable=False),
|
||
sa.Column(
|
||
'date',
|
||
sa.DateTime(),
|
||
nullable=False,
|
||
comment='The date the DeliveryNote initiated',
|
||
),
|
||
sa.Column('deposit', sa.Integer(), nullable=True),
|
||
sa.Column(
|
||
'expected_devices', postgresql.JSONB(astext_type=sa.Text()), nullable=False
|
||
),
|
||
sa.Column(
|
||
'transferred_devices', sa.ARRAY(sa.Integer(), dimensions=1), nullable=True
|
||
),
|
||
sa.Column(
|
||
'transfer_state',
|
||
teal.db.IntEnum(TransferState),
|
||
nullable=False,
|
||
comment='State of transfer for a given Lot of devices.\n ',
|
||
),
|
||
sa.Column('ethereum_address', citext.CIText(), nullable=True),
|
||
sa.Column('lot_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['creator_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['lot_id'],
|
||
[f'{get_inv()}.lot.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['receiver_address'],
|
||
['common.user.email'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['supplier_email'],
|
||
['common.user.email'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('ethereum_address'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_deliverynote_created'),
|
||
'deliverynote',
|
||
['created'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_deliverynote_updated'),
|
||
'deliverynote',
|
||
['updated'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Individual table
|
||
op.create_table(
|
||
'individual',
|
||
sa.Column('active_org_id', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['active_org_id'],
|
||
[f'{get_inv()}.organization.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.agent.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['user_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('user_id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Lot device table
|
||
op.create_table(
|
||
'lot_device',
|
||
sa.Column('device_id', sa.BigInteger(), nullable=False),
|
||
sa.Column('lot_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('created', sa.DateTime(), nullable=False),
|
||
sa.Column(
|
||
'author_id',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=False,
|
||
comment='The user that put the device in the lot.',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['author_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['lot_id'],
|
||
[f'{get_inv()}.lot.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('device_id', 'lot_id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Path table
|
||
op.create_table(
|
||
'path',
|
||
sa.Column(
|
||
'id',
|
||
postgresql.UUID(as_uuid=True),
|
||
server_default=sa.text('gen_random_uuid()'),
|
||
nullable=False,
|
||
),
|
||
sa.Column('lot_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('path', sqlalchemy_utils.types.ltree.LtreeType(), nullable=False),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=True,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['lot_id'],
|
||
[f'{get_inv()}.lot.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint(
|
||
'path', deferrable='True', initially='immediate', name='path_unique'
|
||
),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'lot_id_index',
|
||
'path',
|
||
['lot_id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'path_btree',
|
||
'path',
|
||
['path'],
|
||
unique=False,
|
||
postgresql_using='btree',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'path_gist',
|
||
'path',
|
||
['path'],
|
||
unique=False,
|
||
postgresql_using='gist',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Proof recycling table
|
||
op.create_table(
|
||
'proof_recycling',
|
||
sa.Column('collection_point', citext.CIText(), nullable=False),
|
||
sa.Column('date', sa.DateTime(), nullable=False),
|
||
sa.Column('contact', citext.CIText(), nullable=False),
|
||
sa.Column('ticket', citext.CIText(), nullable=False),
|
||
sa.Column('gps_location', citext.CIText(), nullable=False),
|
||
sa.Column('recycler_code', citext.CIText(), nullable=False),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.proof.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Proof reuse table
|
||
op.create_table(
|
||
'proof_reuse',
|
||
sa.Column('receiver_segment', citext.CIText(), nullable=False),
|
||
sa.Column('id_receipt', citext.CIText(), nullable=False),
|
||
sa.Column('supplier_id', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column('receiver_id', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column('price', sa.Integer(), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.proof.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['receiver_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['supplier_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Proof transfer table
|
||
op.create_table(
|
||
'proof_transfer',
|
||
sa.Column('supplier_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('receiver_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('deposit', sa.Integer(), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.proof.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['receiver_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['supplier_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Tag table
|
||
op.create_table(
|
||
'tag',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', citext.CIText(), nullable=False, comment='The ID of the tag.'),
|
||
sa.Column('org_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column(
|
||
'provider',
|
||
teal.db.URL(),
|
||
nullable=True,
|
||
comment='The tag provider URL. If None, the provider is\n this Devicehub.\n ',
|
||
),
|
||
sa.Column('device_id', sa.BigInteger(), nullable=True),
|
||
sa.Column(
|
||
'secondary',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='A secondary identifier for this tag. \n It has the same constraints as the main one. Only needed in special cases.\n ',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'], [f'{get_inv()}.device.id'], ondelete='SET NULL'
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['org_id'],
|
||
[f'{get_inv()}.organization.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id', 'org_id'),
|
||
sa.UniqueConstraint('id', 'org_id', name='one tag id per organization'),
|
||
sa.UniqueConstraint(
|
||
'secondary', 'org_id', name='one secondary tag per organization'
|
||
),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'device_id_index',
|
||
'tag',
|
||
['device_id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_tag_created'), 'tag', ['created'], unique=False, schema=f'{get_inv()}'
|
||
)
|
||
op.create_index(
|
||
op.f('ix_tag_secondary'),
|
||
'tag',
|
||
['secondary'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_tag_updated'), 'tag', ['updated'], unique=False, schema=f'{get_inv()}'
|
||
)
|
||
|
||
# ActionComponent table
|
||
op.create_table(
|
||
'action_component',
|
||
sa.Column('device_id', sa.BigInteger(), nullable=False),
|
||
sa.Column('action_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['action_id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('device_id', 'action_id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Action device table
|
||
op.create_table(
|
||
'action_device',
|
||
sa.Column('device_id', sa.BigInteger(), nullable=False),
|
||
sa.Column('action_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['action_id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('device_id', 'action_id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# ActionWithOneDevice table
|
||
op.create_table(
|
||
'action_with_one_device',
|
||
sa.Column('device_id', sa.BigInteger(), nullable=False),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['device_id'],
|
||
[f'{get_inv()}.device.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
'action_one_device_id_index',
|
||
'action_with_one_device',
|
||
['device_id'],
|
||
unique=False,
|
||
postgresql_using='hash',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Allocate table
|
||
op.create_table(
|
||
'allocate',
|
||
sa.Column('to_id', postgresql.UUID(), nullable=True),
|
||
sa.Column('organization', citext.CIText(), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['to_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# BAtter table
|
||
op.create_table(
|
||
'battery',
|
||
sa.Column(
|
||
'wireless',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='If the battery can be charged wirelessly.',
|
||
),
|
||
sa.Column(
|
||
'technology',
|
||
sa.Enum(
|
||
'LiIon',
|
||
'NiCd',
|
||
'NiMH',
|
||
'LiPoly',
|
||
'LiFe',
|
||
'LiMn',
|
||
'Al',
|
||
name='batterytechnology',
|
||
),
|
||
nullable=True,
|
||
),
|
||
sa.Column(
|
||
'size',
|
||
sa.Integer(),
|
||
nullable=False,
|
||
comment='Maximum battery capacity by design, in mAh.\n\n Use BatteryTest\'s "size" to get the actual size of the battery.\n ',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# DataStorage table
|
||
op.create_table(
|
||
'data_storage',
|
||
sa.Column(
|
||
'size',
|
||
sa.Integer(),
|
||
nullable=True,
|
||
comment='The size of the data-storage in MB.',
|
||
),
|
||
sa.Column(
|
||
'interface',
|
||
sa.Enum('ATA', 'USB', 'PCI', name='datastorageinterface'),
|
||
nullable=True,
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Deallocate table
|
||
op.create_table(
|
||
'deallocate',
|
||
sa.Column('from_id', postgresql.UUID(), nullable=True),
|
||
sa.Column('organization', citext.CIText(), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['from_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Display table
|
||
op.create_table(
|
||
'display',
|
||
sa.Column(
|
||
'size',
|
||
sa.Float(decimal_return_scale=1),
|
||
nullable=False,
|
||
comment='The size of the monitor in inches.',
|
||
),
|
||
sa.Column(
|
||
'technology',
|
||
sa.Enum(
|
||
'CRT', 'TFT', 'LED', 'PDP', 'LCD', 'OLED', 'AMOLED', name='displaytech'
|
||
),
|
||
nullable=True,
|
||
comment='The technology the monitor uses to display\n the image.\n ',
|
||
),
|
||
sa.Column(
|
||
'resolution_width',
|
||
sa.SmallInteger(),
|
||
nullable=False,
|
||
comment='The maximum horizontal resolution the\n monitor can natively support in pixels.\n ',
|
||
),
|
||
sa.Column(
|
||
'resolution_height',
|
||
sa.SmallInteger(),
|
||
nullable=False,
|
||
comment='The maximum vertical resolution the\n monitor can natively support in pixels.\n ',
|
||
),
|
||
sa.Column('refresh_rate', sa.SmallInteger(), nullable=True),
|
||
sa.Column('contrast_ratio', sa.SmallInteger(), nullable=True),
|
||
sa.Column(
|
||
'touchable',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='Whether it is a touchscreen.',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# GraphiCard table
|
||
op.create_table(
|
||
'graphic_card',
|
||
sa.Column(
|
||
'memory',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The amount of memory of the Graphic Card in MB.',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Membership table
|
||
op.create_table(
|
||
'membership',
|
||
sa.Column(
|
||
'updated',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='The last time Devicehub recorded a change for \n this thing.\n ',
|
||
),
|
||
sa.Column(
|
||
'created',
|
||
sa.TIMESTAMP(timezone=True),
|
||
server_default=sa.text('CURRENT_TIMESTAMP'),
|
||
nullable=False,
|
||
comment='When Devicehub created this.',
|
||
),
|
||
sa.Column('id', sa.Unicode(), nullable=True),
|
||
sa.Column('organization_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('individual_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['individual_id'],
|
||
[f'{get_inv()}.individual.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['organization_id'],
|
||
[f'{get_inv()}.organization.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('organization_id', 'individual_id'),
|
||
sa.UniqueConstraint(
|
||
'id', 'organization_id', name='One member id per organization.'
|
||
),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_membership_created'),
|
||
'membership',
|
||
['created'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.create_index(
|
||
op.f('ix_membership_updated'),
|
||
'membership',
|
||
['updated'],
|
||
unique=False,
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Migrate table
|
||
op.create_table(
|
||
'migrate',
|
||
sa.Column(
|
||
'other',
|
||
teal.db.URL(),
|
||
nullable=False,
|
||
comment='\n The URL of the Migrate in the other end.\n ',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Motherboard table
|
||
op.create_table(
|
||
'motherboard',
|
||
sa.Column(
|
||
'slots',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='PCI slots the motherboard has.',
|
||
),
|
||
sa.Column('usb', sa.SmallInteger(), nullable=True),
|
||
sa.Column('firewire', sa.SmallInteger(), nullable=True),
|
||
sa.Column('serial', sa.SmallInteger(), nullable=True),
|
||
sa.Column('pcmcia', sa.SmallInteger(), nullable=True),
|
||
sa.Column(
|
||
'bios_date',
|
||
sa.Date(),
|
||
nullable=True,
|
||
comment='The date of the BIOS version.',
|
||
),
|
||
sa.Column('ram_slots', sa.SmallInteger(), nullable=True),
|
||
sa.Column('ram_max_size', sa.Integer(), nullable=True),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Network adapter
|
||
op.create_table(
|
||
'network_adapter',
|
||
sa.Column(
|
||
'speed',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The maximum speed this network adapter can handle,\n in mbps.\n ',
|
||
),
|
||
sa.Column(
|
||
'wireless',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Whether it is a wireless interface.',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Organize table
|
||
op.create_table(
|
||
'organize',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Processor table
|
||
op.create_table(
|
||
'processor',
|
||
sa.Column('speed', sa.Float(), nullable=True, comment='The regular CPU speed.'),
|
||
sa.Column(
|
||
'cores',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The number of regular cores.',
|
||
),
|
||
sa.Column(
|
||
'threads',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The number of threads per core.',
|
||
),
|
||
sa.Column(
|
||
'address',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The address of the CPU: 8, 16, 32, 64, 128 or 256 bits.',
|
||
),
|
||
sa.Column(
|
||
'abi',
|
||
sa.Unicode(),
|
||
nullable=True,
|
||
comment='The Application Binary Interface of the processor.',
|
||
),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# RamModule table
|
||
op.create_table(
|
||
'ram_module',
|
||
sa.Column(
|
||
'size',
|
||
sa.SmallInteger(),
|
||
nullable=True,
|
||
comment='The capacity of the RAM stick.',
|
||
),
|
||
sa.Column('speed', sa.SmallInteger(), nullable=True),
|
||
sa.Column(
|
||
'interface',
|
||
sa.Enum(
|
||
'SDRAM',
|
||
'DDR',
|
||
'DDR2',
|
||
'DDR3',
|
||
'DDR4',
|
||
'DDR5',
|
||
'DDR6',
|
||
name='raminterface',
|
||
),
|
||
nullable=True,
|
||
),
|
||
sa.Column('format', sa.Enum('DIMM', 'SODIMM', name='ramformat'), nullable=True),
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Receive table
|
||
op.create_table(
|
||
'receive',
|
||
sa.Column(
|
||
'role',
|
||
sa.Enum(
|
||
'Intermediary',
|
||
'FinalUser',
|
||
'CollectionPoint',
|
||
'RecyclingPoint',
|
||
'Transporter',
|
||
name='receiverrole',
|
||
),
|
||
nullable=False,
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Sound card table
|
||
op.create_table(
|
||
'sound_card',
|
||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.component.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Benchmark table
|
||
op.create_table(
|
||
'benchmark',
|
||
sa.Column('elapsed', sa.Interval(), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Erase basic table
|
||
op.create_table(
|
||
'erase_basic',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column(
|
||
'method',
|
||
sa.Enum('Shred', 'Disintegration', name='physicalerasuremethod'),
|
||
nullable=True,
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'install',
|
||
sa.Column('elapsed', sa.Interval(), nullable=False),
|
||
sa.Column('address', sa.SmallInteger(), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Live table
|
||
op.create_table(
|
||
'live',
|
||
sa.Column(
|
||
'ip',
|
||
teal.db.IP(),
|
||
nullable=False,
|
||
comment='The IP where the live was triggered.',
|
||
),
|
||
sa.Column('subdivision_confidence', sa.SmallInteger(), nullable=False),
|
||
sa.Column(
|
||
'subdivision',
|
||
sa.Enum(
|
||
'AE-AJ',
|
||
'AE-AZ',
|
||
'AE-DU',
|
||
'AE-FU',
|
||
'AE-RK',
|
||
'AE-SH',
|
||
'AE-UQ',
|
||
'AF-BAL',
|
||
'AF-BAM',
|
||
'AF-BDG',
|
||
'AF-BDS',
|
||
'AF-BGL',
|
||
'AF-FRAU',
|
||
'AF-FYB',
|
||
'AF-GHA',
|
||
'AF-GHO',
|
||
'AF-HEL',
|
||
'AF-HER',
|
||
'AF-JOW',
|
||
'AF-KAB',
|
||
'AF-KANN',
|
||
'AF-KAP',
|
||
'AF-KDZ',
|
||
'AF-KNR',
|
||
'AF-LAG',
|
||
'AF-LOW',
|
||
'AF-NAN',
|
||
'AF-NIM',
|
||
'AF-ORU',
|
||
'AF-PAR',
|
||
'AF-PIA',
|
||
'AF-PKA',
|
||
'AF-SAM',
|
||
'AF-SAR',
|
||
'AF-TAK',
|
||
'AF-WAR',
|
||
'AF-ZAB',
|
||
'AL-BR',
|
||
'AL-BU',
|
||
'AL-DI',
|
||
'AL-DL',
|
||
'AL-DR',
|
||
'AL-DV',
|
||
'AL-EL',
|
||
'AL-ER',
|
||
'AL-FR',
|
||
'AL-GJ',
|
||
'AL-GR',
|
||
'AL-HA',
|
||
'AL-KA',
|
||
'AL-KB',
|
||
'AL-KC',
|
||
'AL-KO',
|
||
'AL-KR',
|
||
'AL-KU',
|
||
'AL-LA',
|
||
'AL-LB',
|
||
'AL-LE',
|
||
'AL-LU',
|
||
'AL-MK',
|
||
'AL-MM',
|
||
'AL-MR',
|
||
'AL-MT',
|
||
'AL-PG',
|
||
'AL-PQ',
|
||
'AL-PR',
|
||
'AL-PU',
|
||
'AL-SH',
|
||
'AL-SK',
|
||
'AL-SR',
|
||
'AL-TE',
|
||
'AL-TP',
|
||
'AL-TR',
|
||
'AL-VL',
|
||
'AM-AG',
|
||
'AM-AR',
|
||
'AM-AV',
|
||
'AM-ER',
|
||
'AM-GR',
|
||
'AM-KT',
|
||
'AM-LO',
|
||
'AM-SH',
|
||
'AM-SU',
|
||
'AM-TV',
|
||
'AM-VD',
|
||
'AO-BGO',
|
||
'AO-BGU',
|
||
'AO-BIE',
|
||
'AO-CAB',
|
||
'AO-CCU',
|
||
'AO-CNN',
|
||
'AO-CNO',
|
||
'AO-CUS',
|
||
'AO-HUA',
|
||
'AO-HUI',
|
||
'AO-LNO',
|
||
'AO-LSU',
|
||
'AO-LUA',
|
||
'AO-MAL',
|
||
'AO-MOX',
|
||
'AO-NAM',
|
||
'AO-UIG',
|
||
'AO-ZAI',
|
||
'AR-A',
|
||
'AR-B',
|
||
'AR-C',
|
||
'AR-D',
|
||
'AR-E',
|
||
'AR-F',
|
||
'AR-G',
|
||
'AR-H',
|
||
'AR-J',
|
||
'AR-K',
|
||
'AR-L',
|
||
'AR-M',
|
||
'AR-N',
|
||
'AR-P',
|
||
'AR-Q',
|
||
'AR-R',
|
||
'AR-S',
|
||
'AR-T',
|
||
'AR-U',
|
||
'AR-V',
|
||
'AR-W',
|
||
'AR-X',
|
||
'AR-Y',
|
||
'AR-Z',
|
||
'AT-1',
|
||
'AT-2',
|
||
'AT-3',
|
||
'AT-4',
|
||
'AT-5',
|
||
'AT-6',
|
||
'AT-7',
|
||
'AT-8',
|
||
'AT-9',
|
||
'AU-CT',
|
||
'AU-NS',
|
||
'AU-NT',
|
||
'AU-QL',
|
||
'AU-SA',
|
||
'AU-TS',
|
||
'AU-VI',
|
||
'AU-WA',
|
||
'AZ-AB',
|
||
'AZ-ABS',
|
||
'AZ-AGA',
|
||
'AZ-AGC',
|
||
'AZ-AGM',
|
||
'AZ-AGS',
|
||
'AZ-AGU',
|
||
'AZ-AST',
|
||
'AZ-BA',
|
||
'AZ-BAB',
|
||
'AZ-BAL',
|
||
'AZ-BAR',
|
||
'AZ-BEY',
|
||
'AZ-BIL',
|
||
'AZ-CAB',
|
||
'AZ-CAL',
|
||
'AZ-CUL',
|
||
'AZ-DAS',
|
||
'AZ-DAV',
|
||
'AZ-FUZ',
|
||
'AZ-GA',
|
||
'AZ-GAD',
|
||
'AZ-GOR',
|
||
'AZ-GOY',
|
||
'AZ-HAC',
|
||
'AZ-IMI',
|
||
'AZ-ISM',
|
||
'AZ-KAL',
|
||
'AZ-KUR',
|
||
'AZ-LA',
|
||
'AZ-LAC',
|
||
'AZ-LAN',
|
||
'AZ-LER',
|
||
'AZ-MAS',
|
||
'AZ-MI',
|
||
'AZ-MM',
|
||
'AZ-NA',
|
||
'AZ-NEF',
|
||
'AZ-OGU',
|
||
'AZ-ORD',
|
||
'AZ-QAB',
|
||
'AZ-QAX',
|
||
'AZ-QAZ',
|
||
'AZ-QBA',
|
||
'AZ-QBI',
|
||
'AZ-QOB',
|
||
'AZ-QUS',
|
||
'AZ-SA',
|
||
'AZ-SAB',
|
||
'AZ-SAD',
|
||
'AZ-SAH',
|
||
'AZ-SAK',
|
||
'AZ-SAL',
|
||
'AZ-SAR',
|
||
'AZ-SAT',
|
||
'AZ-SIY',
|
||
'AZ-SKR',
|
||
'AZ-SM',
|
||
'AZ-SMI',
|
||
'AZ-SMX',
|
||
'AZ-SS',
|
||
'AZ-SUS',
|
||
'AZ-TAR',
|
||
'AZ-TOV',
|
||
'AZ-UCA',
|
||
'AZ-XA',
|
||
'AZ-XAC',
|
||
'AZ-XAN',
|
||
'AZ-XCI',
|
||
'AZ-XIZ',
|
||
'AZ-XVD',
|
||
'AZ-YAR',
|
||
'AZ-YE',
|
||
'AZ-YEV',
|
||
'AZ-ZAN',
|
||
'AZ-ZAQ',
|
||
'AZ-ZAR',
|
||
'BA-BIH',
|
||
'BA-SRP',
|
||
'BD-01',
|
||
'BD-02',
|
||
'BD-03',
|
||
'BD-04',
|
||
'BD-05',
|
||
'BD-06',
|
||
'BD-07',
|
||
'BD-08',
|
||
'BD-09',
|
||
'BD-1',
|
||
'BD-10',
|
||
'BD-11',
|
||
'BD-12',
|
||
'BD-13',
|
||
'BD-14',
|
||
'BD-15',
|
||
'BD-16',
|
||
'BD-17',
|
||
'BD-18',
|
||
'BD-19',
|
||
'BD-2',
|
||
'BD-20',
|
||
'BD-21',
|
||
'BD-22',
|
||
'BD-23',
|
||
'BD-24',
|
||
'BD-25',
|
||
'BD-26',
|
||
'BD-27',
|
||
'BD-28',
|
||
'BD-29',
|
||
'BD-3',
|
||
'BD-30',
|
||
'BD-31',
|
||
'BD-32',
|
||
'BD-33',
|
||
'BD-34',
|
||
'BD-35',
|
||
'BD-36',
|
||
'BD-37',
|
||
'BD-38',
|
||
'BD-39',
|
||
'BD-4',
|
||
'BD-40',
|
||
'BD-41',
|
||
'BD-42',
|
||
'BD-43',
|
||
'BD-44',
|
||
'BD-45',
|
||
'BD-46',
|
||
'BD-47',
|
||
'BD-48',
|
||
'BD-49',
|
||
'BD-5',
|
||
'BD-50',
|
||
'BD-51',
|
||
'BD-52',
|
||
'BD-53',
|
||
'BD-54',
|
||
'BD-55',
|
||
'BD-56',
|
||
'BD-57',
|
||
'BD-58',
|
||
'BD-59',
|
||
'BD-6',
|
||
'BD-60',
|
||
'BD-61',
|
||
'BD-62',
|
||
'BD-63',
|
||
'BD-64',
|
||
'BE-BRU',
|
||
'BE-VAN',
|
||
'BE-VBR',
|
||
'BE-VLG',
|
||
'BE-VLI',
|
||
'BE-VOV',
|
||
'BE-VWV',
|
||
'BE-WAL',
|
||
'BE-WBR',
|
||
'BE-WHT',
|
||
'BE-WLG',
|
||
'BE-WLX',
|
||
'BE-WNA',
|
||
'BF-BAL',
|
||
'BF-BAM',
|
||
'BF-BAN',
|
||
'BF-BAZ',
|
||
'BF-BGR',
|
||
'BF-BLG',
|
||
'BF-BLK',
|
||
'BF-COM',
|
||
'BF-GAN',
|
||
'BF-GNA',
|
||
'BF-GOU',
|
||
'BF-HOU',
|
||
'BF-IOB',
|
||
'BF-KAD',
|
||
'BF-KEN',
|
||
'BF-KMD',
|
||
'BF-KMP',
|
||
'BF-KOP',
|
||
'BF-KOS',
|
||
'BF-KOT',
|
||
'BF-KOW',
|
||
'BF-LER',
|
||
'BF-LOR',
|
||
'BF-MOU',
|
||
'BF-NAM',
|
||
'BF-NAO',
|
||
'BF-NAY',
|
||
'BF-NOU',
|
||
'BF-OUB',
|
||
'BF-OUD',
|
||
'BF-PAS',
|
||
'BF-PON',
|
||
'BF-SEN',
|
||
'BF-SIS',
|
||
'BF-SMT',
|
||
'BF-SNG',
|
||
'BF-SOM',
|
||
'BF-SOR',
|
||
'BF-TAP',
|
||
'BF-TUI',
|
||
'BF-YAG',
|
||
'BF-YAT',
|
||
'BF-ZIR',
|
||
'BF-ZON',
|
||
'BF-ZOU',
|
||
'BG-01',
|
||
'BG-02',
|
||
'BG-03',
|
||
'BG-04',
|
||
'BG-05',
|
||
'BG-06',
|
||
'BG-07',
|
||
'BG-08',
|
||
'BG-09',
|
||
'BG-10',
|
||
'BG-11',
|
||
'BG-12',
|
||
'BG-13',
|
||
'BG-14',
|
||
'BG-15',
|
||
'BG-16',
|
||
'BG-17',
|
||
'BG-18',
|
||
'BG-19',
|
||
'BG-20',
|
||
'BG-21',
|
||
'BG-22',
|
||
'BG-23',
|
||
'BG-24',
|
||
'BG-25',
|
||
'BG-26',
|
||
'BG-27',
|
||
'BG-28',
|
||
'BH-01',
|
||
'BH-02',
|
||
'BH-03',
|
||
'BH-04',
|
||
'BH-05',
|
||
'BH-06',
|
||
'BH-07',
|
||
'BH-08',
|
||
'BH-09',
|
||
'BH-10',
|
||
'BH-11',
|
||
'BH-12',
|
||
'BI-BB',
|
||
'BI-BJ',
|
||
'BI-BR',
|
||
'BI-CA',
|
||
'BI-CI',
|
||
'BI-GI',
|
||
'BI-KI',
|
||
'BI-KR',
|
||
'BI-KY',
|
||
'BI-MA',
|
||
'BI-MU',
|
||
'BI-MW',
|
||
'BI-MY',
|
||
'BI-NG',
|
||
'BI-RT',
|
||
'BI-RY',
|
||
'BJ-AK',
|
||
'BJ-AL',
|
||
'BJ-AQ',
|
||
'BJ-BO',
|
||
'BJ-CO',
|
||
'BJ-DO',
|
||
'BJ-KO',
|
||
'BJ-LI',
|
||
'BJ-MO',
|
||
'BJ-OU',
|
||
'BJ-PL',
|
||
'BJ-ZO',
|
||
'BN-BE',
|
||
'BN-BM',
|
||
'BN-TE',
|
||
'BN-TU',
|
||
'BO-B',
|
||
'BO-C',
|
||
'BO-H',
|
||
'BO-L',
|
||
'BO-N',
|
||
'BO-O',
|
||
'BO-P',
|
||
'BO-S',
|
||
'BO-T',
|
||
'BR-AC',
|
||
'BR-AL',
|
||
'BR-AM',
|
||
'BR-AP',
|
||
'BR-BA',
|
||
'BR-CE',
|
||
'BR-DF',
|
||
'BR-ES',
|
||
'BR-GO',
|
||
'BR-MA',
|
||
'BR-MG',
|
||
'BR-MS',
|
||
'BR-MT',
|
||
'BR-PA',
|
||
'BR-PB',
|
||
'BR-PE',
|
||
'BR-PI',
|
||
'BR-PR',
|
||
'BR-RJ',
|
||
'BR-RN',
|
||
'BR-RO',
|
||
'BR-RR',
|
||
'BR-RS',
|
||
'BR-SC',
|
||
'BR-SE',
|
||
'BR-SP',
|
||
'BR-TO',
|
||
'BS-AC',
|
||
'BS-BI',
|
||
'BS-CI',
|
||
'BS-EX',
|
||
'BS-FC',
|
||
'BS-FP',
|
||
'BS-GH',
|
||
'BS-GT',
|
||
'BS-HI',
|
||
'BS-HR',
|
||
'BS-IN',
|
||
'BS-KB',
|
||
'BS-LI',
|
||
'BS-MG',
|
||
'BS-MH',
|
||
'BS-NB',
|
||
'BS-NP',
|
||
'BS-RI',
|
||
'BS-RS',
|
||
'BS-SP',
|
||
'BS-SR',
|
||
'BT-11',
|
||
'BT-12',
|
||
'BT-13',
|
||
'BT-14',
|
||
'BT-15',
|
||
'BT-21',
|
||
'BT-22',
|
||
'BT-23',
|
||
'BT-24',
|
||
'BT-31',
|
||
'BT-32',
|
||
'BT-33',
|
||
'BT-34',
|
||
'BT-41',
|
||
'BT-42',
|
||
'BT-43',
|
||
'BT-44',
|
||
'BT-45',
|
||
'BT-GA',
|
||
'BT-TY',
|
||
'BW-CE',
|
||
'BW-CH',
|
||
'BW-GH',
|
||
'BW-KG',
|
||
'BW-KL',
|
||
'BW-KW',
|
||
'BW-NE',
|
||
'BW-NG',
|
||
'BW-SE',
|
||
'BW-SO',
|
||
'BY-BR',
|
||
'BY-HO',
|
||
'BY-HR',
|
||
'BY-MA',
|
||
'BY-MI',
|
||
'BY-VI',
|
||
'BZ-BZ',
|
||
'BZ-CY',
|
||
'BZ-CZL',
|
||
'BZ-OW',
|
||
'BZ-SC',
|
||
'BZ-TOL',
|
||
'CA-AB',
|
||
'CA-BC',
|
||
'CA-MB',
|
||
'CA-NB',
|
||
'CA-NL',
|
||
'CA-NS',
|
||
'CA-NT',
|
||
'CA-NU',
|
||
'CA-ON',
|
||
'CA-PE',
|
||
'CA-QC',
|
||
'CA-SK',
|
||
'CA-YT',
|
||
'CD-BC',
|
||
'CD-BN',
|
||
'CD-EQ',
|
||
'CD-KA',
|
||
'CD-KE',
|
||
'CD-KN',
|
||
'CD-KW',
|
||
'CD-MA',
|
||
'CD-NK',
|
||
'CD-OR',
|
||
'CD-SK',
|
||
'CF-AC',
|
||
'CF-BB',
|
||
'CF-BGF',
|
||
'CF-BK',
|
||
'CF-HK',
|
||
'CF-HM',
|
||
'CF-HS',
|
||
'CF-KB',
|
||
'CF-KG',
|
||
'CF-LB',
|
||
'CF-MB',
|
||
'CF-MP',
|
||
'CF-NM',
|
||
'CF-OP',
|
||
'CF-SE',
|
||
'CF-UK',
|
||
'CF-VK',
|
||
'CG-11',
|
||
'CG-12',
|
||
'CG-13',
|
||
'CG-14',
|
||
'CG-15',
|
||
'CG-2',
|
||
'CG-5',
|
||
'CG-7',
|
||
'CG-8',
|
||
'CG-9',
|
||
'CG-BZV',
|
||
'CH-AG',
|
||
'CH-AI',
|
||
'CH-AR',
|
||
'CH-BE',
|
||
'CH-BL',
|
||
'CH-BS',
|
||
'CH-FR',
|
||
'CH-GE',
|
||
'CH-GL',
|
||
'CH-GR',
|
||
'CH-JU',
|
||
'CH-LU',
|
||
'CH-NE',
|
||
'CH-NW',
|
||
'CH-OW',
|
||
'CH-SG',
|
||
'CH-SH',
|
||
'CH-SO',
|
||
'CH-SZ',
|
||
'CH-TG',
|
||
'CH-TI',
|
||
'CH-UR',
|
||
'CH-VD',
|
||
'CH-VS',
|
||
'CH-ZG',
|
||
'CH-ZH',
|
||
'CI-01',
|
||
'CI-02',
|
||
'CI-03',
|
||
'CI-04',
|
||
'CI-05',
|
||
'CI-06',
|
||
'CI-07',
|
||
'CI-08',
|
||
'CI-09',
|
||
'CI-10',
|
||
'CI-11',
|
||
'CI-12',
|
||
'CI-13',
|
||
'CI-14',
|
||
'CI-15',
|
||
'CI-16',
|
||
'CL-AI',
|
||
'CL-AN',
|
||
'CL-AR',
|
||
'CL-AT',
|
||
'CL-BI',
|
||
'CL-CO',
|
||
'CL-LI',
|
||
'CL-LL',
|
||
'CL-MA',
|
||
'CL-ML',
|
||
'CL-RM',
|
||
'CL-TA',
|
||
'CL-VS',
|
||
'CM-AD',
|
||
'CM-CE',
|
||
'CM-EN',
|
||
'CM-ES',
|
||
'CM-LT',
|
||
'CM-NO',
|
||
'CM-NW',
|
||
'CM-OU',
|
||
'CM-SU',
|
||
'CM-SW',
|
||
'CN-11',
|
||
'CN-12',
|
||
'CN-13',
|
||
'CN-14',
|
||
'CN-15',
|
||
'CN-21',
|
||
'CN-22',
|
||
'CN-23',
|
||
'CN-31',
|
||
'CN-32',
|
||
'CN-33',
|
||
'CN-34',
|
||
'CN-35',
|
||
'CN-36',
|
||
'CN-37',
|
||
'CN-41',
|
||
'CN-42',
|
||
'CN-43',
|
||
'CN-44',
|
||
'CN-45',
|
||
'CN-46',
|
||
'CN-50',
|
||
'CN-51',
|
||
'CN-52',
|
||
'CN-53',
|
||
'CN-54',
|
||
'CN-61',
|
||
'CN-62',
|
||
'CN-63',
|
||
'CN-64',
|
||
'CN-65',
|
||
'CN-71',
|
||
'CN-91',
|
||
'CN-92',
|
||
'CO-AMA',
|
||
'CO-ANT',
|
||
'CO-ARA',
|
||
'CO-ATL',
|
||
'CO-BOL',
|
||
'CO-BOY',
|
||
'CO-CAL',
|
||
'CO-CAQ',
|
||
'CO-CAS',
|
||
'CO-CAU',
|
||
'CO-CES',
|
||
'CO-CHO',
|
||
'CO-COR',
|
||
'CO-CUN',
|
||
'CO-DC',
|
||
'CO-GUA',
|
||
'CO-GUV',
|
||
'CO-HUI',
|
||
'CO-LAG',
|
||
'CO-MAG',
|
||
'CO-MET',
|
||
'CO-NAR',
|
||
'CO-NSA',
|
||
'CO-PUT',
|
||
'CO-QUI',
|
||
'CO-RIS',
|
||
'CO-SAN',
|
||
'CO-SAP',
|
||
'CO-SUC',
|
||
'CO-TOL',
|
||
'CO-VAC',
|
||
'CO-VAU',
|
||
'CO-VID',
|
||
'CR-A',
|
||
'CR-C',
|
||
'CR-G',
|
||
'CR-H',
|
||
'CR-L',
|
||
'CR-P',
|
||
'CR-SJ',
|
||
'CU-01',
|
||
'CU-02',
|
||
'CU-03',
|
||
'CU-04',
|
||
'CU-05',
|
||
'CU-06',
|
||
'CU-07',
|
||
'CU-08',
|
||
'CU-09',
|
||
'CU-10',
|
||
'CU-11',
|
||
'CU-12',
|
||
'CU-13',
|
||
'CU-14',
|
||
'CU-99',
|
||
'CV-B',
|
||
'CV-BR',
|
||
'CV-BV',
|
||
'CV-CA',
|
||
'CV-CR',
|
||
'CV-CS',
|
||
'CV-FO',
|
||
'CV-MA',
|
||
'CV-MO',
|
||
'CV-PA',
|
||
'CV-PN',
|
||
'CV-PR',
|
||
'CV-RG',
|
||
'CV-S',
|
||
'CV-SF',
|
||
'CV-SL',
|
||
'CV-SN',
|
||
'CV-SV',
|
||
'CV-TA',
|
||
'CY-01',
|
||
'CY-02',
|
||
'CY-03',
|
||
'CY-04',
|
||
'CY-05',
|
||
'CY-06',
|
||
'CZ-JC',
|
||
'CZ-JM',
|
||
'CZ-KA',
|
||
'CZ-KR',
|
||
'CZ-LI',
|
||
'CZ-MO',
|
||
'CZ-OL',
|
||
'CZ-PA',
|
||
'CZ-PL',
|
||
'CZ-PR',
|
||
'CZ-ST',
|
||
'CZ-US',
|
||
'CZ-VY',
|
||
'CZ-ZL',
|
||
'DE-BB',
|
||
'DE-BE',
|
||
'DE-BW',
|
||
'DE-BY',
|
||
'DE-HB',
|
||
'DE-HE',
|
||
'DE-HH',
|
||
'DE-MV',
|
||
'DE-NI',
|
||
'DE-NW',
|
||
'DE-RP',
|
||
'DE-SH',
|
||
'DE-SL',
|
||
'DE-SN',
|
||
'DE-ST',
|
||
'DE-TH',
|
||
'DJ-AS',
|
||
'DJ-DI',
|
||
'DJ-DJ',
|
||
'DJ-OB',
|
||
'DJ-TA',
|
||
'DK-015',
|
||
'DK-020',
|
||
'DK-025',
|
||
'DK-030',
|
||
'DK-035',
|
||
'DK-040',
|
||
'DK-042',
|
||
'DK-050',
|
||
'DK-055',
|
||
'DK-060',
|
||
'DK-065',
|
||
'DK-070',
|
||
'DK-076',
|
||
'DK-080',
|
||
'DK-101',
|
||
'DK-147',
|
||
'DO-01',
|
||
'DO-02',
|
||
'DO-03',
|
||
'DO-04',
|
||
'DO-05',
|
||
'DO-06',
|
||
'DO-07',
|
||
'DO-08',
|
||
'DO-09',
|
||
'DO-10',
|
||
'DO-11',
|
||
'DO-12',
|
||
'DO-13',
|
||
'DO-14',
|
||
'DO-15',
|
||
'DO-16',
|
||
'DO-17',
|
||
'DO-18',
|
||
'DO-19',
|
||
'DO-20',
|
||
'DO-21',
|
||
'DO-22',
|
||
'DO-23',
|
||
'DO-24',
|
||
'DO-25',
|
||
'DO-26',
|
||
'DO-27',
|
||
'DO-28',
|
||
'DO-29',
|
||
'DO-30',
|
||
'DZ-01',
|
||
'DZ-02',
|
||
'DZ-03',
|
||
'DZ-04',
|
||
'DZ-05',
|
||
'DZ-06',
|
||
'DZ-07',
|
||
'DZ-08',
|
||
'DZ-09',
|
||
'DZ-10',
|
||
'DZ-11',
|
||
'DZ-12',
|
||
'DZ-13',
|
||
'DZ-14',
|
||
'DZ-15',
|
||
'DZ-16',
|
||
'DZ-17',
|
||
'DZ-18',
|
||
'DZ-19',
|
||
'DZ-20',
|
||
'DZ-21',
|
||
'DZ-22',
|
||
'DZ-23',
|
||
'DZ-24',
|
||
'DZ-25',
|
||
'DZ-26',
|
||
'DZ-27',
|
||
'DZ-28',
|
||
'DZ-29',
|
||
'DZ-30',
|
||
'DZ-31',
|
||
'DZ-32',
|
||
'DZ-33',
|
||
'DZ-34',
|
||
'DZ-35',
|
||
'DZ-36',
|
||
'DZ-37',
|
||
'DZ-38',
|
||
'DZ-39',
|
||
'DZ-40',
|
||
'DZ-41',
|
||
'DZ-42',
|
||
'DZ-43',
|
||
'DZ-44',
|
||
'DZ-45',
|
||
'DZ-46',
|
||
'DZ-47',
|
||
'DZ-48',
|
||
'EC-A',
|
||
'EC-B',
|
||
'EC-C',
|
||
'EC-D',
|
||
'EC-E',
|
||
'EC-F',
|
||
'EC-G',
|
||
'EC-H',
|
||
'EC-I',
|
||
'EC-L',
|
||
'EC-M',
|
||
'EC-N',
|
||
'EC-O',
|
||
'EC-P',
|
||
'EC-R',
|
||
'EC-S',
|
||
'EC-T',
|
||
'EC-U',
|
||
'EC-W',
|
||
'EC-X',
|
||
'EC-Y',
|
||
'EC-Z',
|
||
'EE-37',
|
||
'EE-39',
|
||
'EE-44',
|
||
'EE-49',
|
||
'EE-51',
|
||
'EE-57',
|
||
'EE-59',
|
||
'EE-65',
|
||
'EE-67',
|
||
'EE-70',
|
||
'EE-74',
|
||
'EE-78',
|
||
'EE-82',
|
||
'EE-84',
|
||
'EE-86',
|
||
'EG-ALX',
|
||
'EG-ASN',
|
||
'EG-AST',
|
||
'EG-BA',
|
||
'EG-BH',
|
||
'EG-BNS',
|
||
'EG-C',
|
||
'EG-DK',
|
||
'EG-DT',
|
||
'EG-FYM',
|
||
'EG-GH',
|
||
'EG-GZ',
|
||
'EG-IS',
|
||
'EG-JS',
|
||
'EG-KB',
|
||
'EG-KFS',
|
||
'EG-KN',
|
||
'EG-MN',
|
||
'EG-MNF',
|
||
'EG-MT',
|
||
'EG-PTS',
|
||
'EG-SHG',
|
||
'EG-SHR',
|
||
'EG-SIN',
|
||
'EG-SUZ',
|
||
'EG-WAD',
|
||
'ER-AN',
|
||
'ER-DK',
|
||
'ER-DU',
|
||
'ER-GB',
|
||
'ER-MA',
|
||
'ER-SK',
|
||
'ES-A',
|
||
'ES-AB',
|
||
'ES-AL',
|
||
'ES-AN',
|
||
'ES-AR',
|
||
'ES-AV',
|
||
'ES-B',
|
||
'ES-BA',
|
||
'ES-BI',
|
||
'ES-BU',
|
||
'ES-C',
|
||
'ES-CA',
|
||
'ES-CC',
|
||
'ES-CE',
|
||
'ES-CL',
|
||
'ES-CM',
|
||
'ES-CN',
|
||
'ES-CO',
|
||
'ES-CR',
|
||
'ES-CS',
|
||
'ES-CT',
|
||
'ES-CU',
|
||
'ES-EX',
|
||
'ES-GA',
|
||
'ES-GC',
|
||
'ES-GI',
|
||
'ES-GR',
|
||
'ES-GU',
|
||
'ES-H',
|
||
'ES-HU',
|
||
'ES-J',
|
||
'ES-L',
|
||
'ES-LE',
|
||
'ES-LO',
|
||
'ES-LU',
|
||
'ES-M',
|
||
'ES-MA',
|
||
'ES-ML',
|
||
'ES-MU',
|
||
'ES-NA',
|
||
'ES-O',
|
||
'ES-OR',
|
||
'ES-P',
|
||
'ES-PM',
|
||
'ES-PO',
|
||
'ES-PV',
|
||
'ES-S',
|
||
'ES-SA',
|
||
'ES-SE',
|
||
'ES-SG',
|
||
'ES-SO',
|
||
'ES-SS',
|
||
'ES-T',
|
||
'ES-TE',
|
||
'ES-TF',
|
||
'ES-TO',
|
||
'ES-V',
|
||
'ES-VA',
|
||
'ES-VC',
|
||
'ES-VI',
|
||
'ES-Z',
|
||
'ES-ZA',
|
||
'ET-AA',
|
||
'ET-AF',
|
||
'ET-AM',
|
||
'ET-BE',
|
||
'ET-DD',
|
||
'ET-GA',
|
||
'ET-HA',
|
||
'ET-OR',
|
||
'ET-SN',
|
||
'ET-SO',
|
||
'ET-TI',
|
||
'FI-AL',
|
||
'FI-ES',
|
||
'FI-IS',
|
||
'FI-LL',
|
||
'FI-LS',
|
||
'FI-OL',
|
||
'FJ-C',
|
||
'FJ-E',
|
||
'FJ-N',
|
||
'FJ-R',
|
||
'FJ-W',
|
||
'FM-KSA',
|
||
'FM-PNI',
|
||
'FM-TRK',
|
||
'FM-YAP',
|
||
'FR-01',
|
||
'FR-02',
|
||
'FR-03',
|
||
'FR-04',
|
||
'FR-05',
|
||
'FR-06',
|
||
'FR-07',
|
||
'FR-08',
|
||
'FR-09',
|
||
'FR-10',
|
||
'FR-11',
|
||
'FR-12',
|
||
'FR-13',
|
||
'FR-14',
|
||
'FR-15',
|
||
'FR-16',
|
||
'FR-17',
|
||
'FR-18',
|
||
'FR-19',
|
||
'FR-21',
|
||
'FR-22',
|
||
'FR-23',
|
||
'FR-24',
|
||
'FR-25',
|
||
'FR-26',
|
||
'FR-27',
|
||
'FR-28',
|
||
'FR-29',
|
||
'FR-2A',
|
||
'FR-2B',
|
||
'FR-30',
|
||
'FR-31',
|
||
'FR-32',
|
||
'FR-33',
|
||
'FR-34',
|
||
'FR-35',
|
||
'FR-36',
|
||
'FR-37',
|
||
'FR-38',
|
||
'FR-39',
|
||
'FR-40',
|
||
'FR-41',
|
||
'FR-42',
|
||
'FR-43',
|
||
'FR-44',
|
||
'FR-45',
|
||
'FR-46',
|
||
'FR-47',
|
||
'FR-48',
|
||
'FR-49',
|
||
'FR-50',
|
||
'FR-51',
|
||
'FR-52',
|
||
'FR-53',
|
||
'FR-54',
|
||
'FR-55',
|
||
'FR-56',
|
||
'FR-57',
|
||
'FR-58',
|
||
'FR-59',
|
||
'FR-60',
|
||
'FR-61',
|
||
'FR-62',
|
||
'FR-63',
|
||
'FR-64',
|
||
'FR-65',
|
||
'FR-66',
|
||
'FR-67',
|
||
'FR-68',
|
||
'FR-69',
|
||
'FR-70',
|
||
'FR-71',
|
||
'FR-72',
|
||
'FR-73',
|
||
'FR-74',
|
||
'FR-75',
|
||
'FR-76',
|
||
'FR-77',
|
||
'FR-78',
|
||
'FR-79',
|
||
'FR-80',
|
||
'FR-81',
|
||
'FR-82',
|
||
'FR-83',
|
||
'FR-84',
|
||
'FR-85',
|
||
'FR-86',
|
||
'FR-87',
|
||
'FR-88',
|
||
'FR-89',
|
||
'FR-90',
|
||
'FR-91',
|
||
'FR-92',
|
||
'FR-93',
|
||
'FR-94',
|
||
'FR-95',
|
||
'FR-A',
|
||
'FR-B',
|
||
'FR-C',
|
||
'FR-D',
|
||
'FR-E',
|
||
'FR-F',
|
||
'FR-G',
|
||
'FR-GF',
|
||
'FR-GP',
|
||
'FR-H',
|
||
'FR-I',
|
||
'FR-J',
|
||
'FR-K',
|
||
'FR-L',
|
||
'FR-M',
|
||
'FR-MQ',
|
||
'FR-N',
|
||
'FR-NC',
|
||
'FR-O',
|
||
'FR-P',
|
||
'FR-PF',
|
||
'FR-PM',
|
||
'FR-Q',
|
||
'FR-R',
|
||
'FR-RE',
|
||
'FR-S',
|
||
'FR-T',
|
||
'FR-TF',
|
||
'FR-U',
|
||
'FR-V',
|
||
'FR-WF',
|
||
'FR-YT',
|
||
'GA-1',
|
||
'GA-2',
|
||
'GA-3',
|
||
'GA-4',
|
||
'GA-5',
|
||
'GA-6',
|
||
'GA-7',
|
||
'GA-8',
|
||
'GA-9',
|
||
'GB-ABD',
|
||
'GB-ABE',
|
||
'GB-AGB',
|
||
'GB-AGY',
|
||
'GB-ANS',
|
||
'GB-ANT',
|
||
'GB-ARD',
|
||
'GB-ARM',
|
||
'GB-BAS',
|
||
'GB-BBD',
|
||
'GB-BDF',
|
||
'GB-BDG',
|
||
'GB-BEN',
|
||
'GB-BEX',
|
||
'GB-BFS',
|
||
'GB-BGE',
|
||
'GB-BGW',
|
||
'GB-BIR',
|
||
'GB-BKM',
|
||
'GB-BLA',
|
||
'GB-BLY',
|
||
'GB-BMH',
|
||
'GB-BNB',
|
||
'GB-BNE',
|
||
'GB-BNH',
|
||
'GB-BNS',
|
||
'GB-BOL',
|
||
'GB-BPL',
|
||
'GB-BRC',
|
||
'GB-BRD',
|
||
'GB-BRY',
|
||
'GB-BST',
|
||
'GB-BUR',
|
||
'GB-CAM',
|
||
'GB-CAY',
|
||
'GB-CGN',
|
||
'GB-CGV',
|
||
'GB-CHA',
|
||
'GB-CHS',
|
||
'GB-CKF',
|
||
'GB-CKT',
|
||
'GB-CLD',
|
||
'GB-CLK',
|
||
'GB-CLR',
|
||
'GB-CMA',
|
||
'GB-CMD',
|
||
'GB-CMN',
|
||
'GB-CON',
|
||
'GB-COV',
|
||
'GB-CRF',
|
||
'GB-CRY',
|
||
'GB-CSR',
|
||
'GB-CWY',
|
||
'GB-DAL',
|
||
'GB-DBY',
|
||
'GB-DEN',
|
||
'GB-DER',
|
||
'GB-DEV',
|
||
'GB-DGN',
|
||
'GB-DGY',
|
||
'GB-DNC',
|
||
'GB-DND',
|
||
'GB-DOR',
|
||
'GB-DOW',
|
||
'GB-DRY',
|
||
'GB-DUD',
|
||
'GB-DUR',
|
||
'GB-EAL',
|
||
'GB-EAW',
|
||
'GB-EAY',
|
||
'GB-EDH',
|
||
'GB-EDU',
|
||
'GB-ELN',
|
||
'GB-ELS',
|
||
'GB-ENF',
|
||
'GB-ENG',
|
||
'GB-ERW',
|
||
'GB-ERY',
|
||
'GB-ESS',
|
||
'GB-ESX',
|
||
'GB-FAL',
|
||
'GB-FER',
|
||
'GB-FIF',
|
||
'GB-FLN',
|
||
'GB-GAT',
|
||
'GB-GBN',
|
||
'GB-GLG',
|
||
'GB-GLS',
|
||
'GB-GRE',
|
||
'GB-GSY',
|
||
'GB-GWN',
|
||
'GB-HAL',
|
||
'GB-HAM',
|
||
'GB-HAV',
|
||
'GB-HCK',
|
||
'GB-HEF',
|
||
'GB-HIL',
|
||
'GB-HLD',
|
||
'GB-HMF',
|
||
'GB-HNS',
|
||
'GB-HPL',
|
||
'GB-HRT',
|
||
'GB-HRW',
|
||
'GB-HRY',
|
||
'GB-IOM',
|
||
'GB-IOS',
|
||
'GB-IOW',
|
||
'GB-ISL',
|
||
'GB-IVC',
|
||
'GB-JSY',
|
||
'GB-KEC',
|
||
'GB-KEN',
|
||
'GB-KHL',
|
||
'GB-KIR',
|
||
'GB-KTT',
|
||
'GB-KWL',
|
||
'GB-LAN',
|
||
'GB-LBH',
|
||
'GB-LCE',
|
||
'GB-LDS',
|
||
'GB-LEC',
|
||
'GB-LEW',
|
||
'GB-LIN',
|
||
'GB-LIV',
|
||
'GB-LMV',
|
||
'GB-LND',
|
||
'GB-LRN',
|
||
'GB-LSB',
|
||
'GB-LUT',
|
||
'GB-MAN',
|
||
'GB-MDB',
|
||
'GB-MDW',
|
||
'GB-MFT',
|
||
'GB-MIK',
|
||
'GB-MLN',
|
||
'GB-MON',
|
||
'GB-MRT',
|
||
'GB-MRY',
|
||
'GB-MTY',
|
||
'GB-MYL',
|
||
'GB-NAY',
|
||
'GB-NBL',
|
||
'GB-NDN',
|
||
'GB-NEL',
|
||
'GB-NET',
|
||
'GB-NFK',
|
||
'GB-NGM',
|
||
'GB-NIR',
|
||
'GB-NLK',
|
||
'GB-NLN',
|
||
'GB-NSM',
|
||
'GB-NTA',
|
||
'GB-NTH',
|
||
'GB-NTL',
|
||
'GB-NTT',
|
||
'GB-NTY',
|
||
'GB-NWM',
|
||
'GB-NWP',
|
||
'GB-NYK',
|
||
'GB-NYM',
|
||
'GB-OLD',
|
||
'GB-OMH',
|
||
'GB-ORK',
|
||
'GB-OXF',
|
||
'GB-PEM',
|
||
'GB-PKN',
|
||
'GB-PLY',
|
||
'GB-POL',
|
||
'GB-POR',
|
||
'GB-POW',
|
||
'GB-PTE',
|
||
'GB-RCC',
|
||
'GB-RCH',
|
||
'GB-RCT',
|
||
'GB-RDB',
|
||
'GB-RDG',
|
||
'GB-RFW',
|
||
'GB-RIC',
|
||
'GB-ROT',
|
||
'GB-RUT',
|
||
'GB-SAW',
|
||
'GB-SAY',
|
||
'GB-SCB',
|
||
'GB-SCT',
|
||
'GB-SFK',
|
||
'GB-SFT',
|
||
'GB-SGC',
|
||
'GB-SHF',
|
||
'GB-SHN',
|
||
'GB-SHR',
|
||
'GB-SKP',
|
||
'GB-SLF',
|
||
'GB-SLG',
|
||
'GB-SLK',
|
||
'GB-SND',
|
||
'GB-SOL',
|
||
'GB-SOM',
|
||
'GB-SOS',
|
||
'GB-SRY',
|
||
'GB-STB',
|
||
'GB-STE',
|
||
'GB-STG',
|
||
'GB-STH',
|
||
'GB-STN',
|
||
'GB-STS',
|
||
'GB-STT',
|
||
'GB-STY',
|
||
'GB-SWA',
|
||
'GB-SWD',
|
||
'GB-SWK',
|
||
'GB-TAM',
|
||
'GB-TFW',
|
||
'GB-THR',
|
||
'GB-TOB',
|
||
'GB-TOF',
|
||
'GB-TRF',
|
||
'GB-TWH',
|
||
'GB-UKM',
|
||
'GB-VGL',
|
||
'GB-WAR',
|
||
'GB-WBK',
|
||
'GB-WDU',
|
||
'GB-WFT',
|
||
'GB-WGN',
|
||
'GB-WILL',
|
||
'GB-WKF',
|
||
'GB-WLL',
|
||
'GB-WLN',
|
||
'GB-WLS',
|
||
'GB-WLV',
|
||
'GB-WND',
|
||
'GB-WNM',
|
||
'GB-WOK',
|
||
'GB-WOR',
|
||
'GB-WRL',
|
||
'GB-WRT',
|
||
'GB-WRX',
|
||
'GB-WSM',
|
||
'GB-WSX',
|
||
'GB-YOR',
|
||
'GB-ZET',
|
||
'GE-AB',
|
||
'GE-AJ',
|
||
'GE-GU',
|
||
'GE-IM',
|
||
'GE-KA',
|
||
'GE-KK',
|
||
'GE-MM',
|
||
'GE-RL',
|
||
'GE-SJ',
|
||
'GE-SK',
|
||
'GE-SZ',
|
||
'GE-TB',
|
||
'GH-AA',
|
||
'GH-AH',
|
||
'GH-BA',
|
||
'GH-CP',
|
||
'GH-EP',
|
||
'GH-NP',
|
||
'GH-TV',
|
||
'GH-UE',
|
||
'GH-UW',
|
||
'GH-WP',
|
||
'GM-B',
|
||
'GM-L',
|
||
'GM-M',
|
||
'GM-N',
|
||
'GM-U',
|
||
'GM-W',
|
||
'GN-B',
|
||
'GN-BE',
|
||
'GN-BF',
|
||
'GN-BK',
|
||
'GN-C',
|
||
'GN-CO',
|
||
'GN-D',
|
||
'GN-DB',
|
||
'GN-DI',
|
||
'GN-DL',
|
||
'GN-DU',
|
||
'GN-F',
|
||
'GN-FA',
|
||
'GN-FO',
|
||
'GN-FR',
|
||
'GN-GA',
|
||
'GN-GU',
|
||
'GN-K',
|
||
'GN-KA',
|
||
'GN-KB',
|
||
'GN-KD; 2',
|
||
'GN-KE',
|
||
'GN-KN',
|
||
'GN-KO',
|
||
'GN-KS',
|
||
'GN-L',
|
||
'GN-LA',
|
||
'GN-LE',
|
||
'GN-LO',
|
||
'GN-M',
|
||
'GN-MC',
|
||
'GN-MD',
|
||
'GN-ML',
|
||
'GN-MM',
|
||
'GN-N',
|
||
'GN-NZ',
|
||
'GN-PI',
|
||
'GN-SI',
|
||
'GN-TE',
|
||
'GN-TO',
|
||
'GN-YO',
|
||
'GQ-AN',
|
||
'GQ-BN',
|
||
'GQ-BS',
|
||
'GQ-C',
|
||
'GQ-CS',
|
||
'GQ-I',
|
||
'GQ-KN',
|
||
'GQ-LI',
|
||
'GQ-WN',
|
||
'GR-01',
|
||
'GR-03',
|
||
'GR-04',
|
||
'GR-05',
|
||
'GR-06',
|
||
'GR-07',
|
||
'GR-11',
|
||
'GR-12',
|
||
'GR-13',
|
||
'GR-14',
|
||
'GR-15',
|
||
'GR-16',
|
||
'GR-17',
|
||
'GR-21',
|
||
'GR-22',
|
||
'GR-23',
|
||
'GR-24',
|
||
'GR-31',
|
||
'GR-32',
|
||
'GR-33',
|
||
'GR-34',
|
||
'GR-41',
|
||
'GR-42',
|
||
'GR-43',
|
||
'GR-44',
|
||
'GR-51',
|
||
'GR-52',
|
||
'GR-53',
|
||
'GR-54',
|
||
'GR-55',
|
||
'GR-56',
|
||
'GR-57',
|
||
'GR-58',
|
||
'GR-59',
|
||
'GR-61',
|
||
'GR-62',
|
||
'GR-63',
|
||
'GR-64',
|
||
'GR-69',
|
||
'GR-71',
|
||
'GR-72',
|
||
'GR-73',
|
||
'GR-81',
|
||
'GR-82',
|
||
'GR-83',
|
||
'GR-84',
|
||
'GR-85',
|
||
'GR-91',
|
||
'GR-92',
|
||
'GR-93',
|
||
'GR-94',
|
||
'GR-A1',
|
||
'GR-I',
|
||
'GR-II',
|
||
'GR-III',
|
||
'GR-IV',
|
||
'GR-IX',
|
||
'GR-V',
|
||
'GR-VI',
|
||
'GR-VII',
|
||
'GR-VIII',
|
||
'GR-X',
|
||
'GR-XI',
|
||
'GR-XII',
|
||
'GR-XIII',
|
||
'GT-AV',
|
||
'GT-BV',
|
||
'GT-CM',
|
||
'GT-CQ',
|
||
'GT-ES',
|
||
'GT-GU',
|
||
'GT-HU',
|
||
'GT-IZ',
|
||
'GT-JA',
|
||
'GT-JU',
|
||
'GT-PE',
|
||
'GT-PR',
|
||
'GT-QC',
|
||
'GT-QZ',
|
||
'GT-RE',
|
||
'GT-SA',
|
||
'GT-SM',
|
||
'GT-SO',
|
||
'GT-SR',
|
||
'GT-SU',
|
||
'GT-TO',
|
||
'GT-ZA',
|
||
'GW-BA',
|
||
'GW-BL',
|
||
'GW-BM',
|
||
'GW-BS',
|
||
'GW-CA',
|
||
'GW-GA',
|
||
'GW-L',
|
||
'GW-N',
|
||
'GW-OI',
|
||
'GW-QU',
|
||
'GW-S',
|
||
'GW-TO',
|
||
'GY-BA',
|
||
'GY-CU',
|
||
'GY-DE',
|
||
'GY-EB',
|
||
'GY-ES',
|
||
'GY-MA',
|
||
'GY-PM',
|
||
'GY-PT',
|
||
'GY-UD',
|
||
'GY-UT',
|
||
'HN-AT',
|
||
'HN-CH',
|
||
'HN-CL',
|
||
'HN-CM',
|
||
'HN-CP',
|
||
'HN-CR',
|
||
'HN-EP',
|
||
'HN-FM',
|
||
'HN-GD',
|
||
'HN-IB',
|
||
'HN-IN',
|
||
'HN-LE',
|
||
'HN-LP',
|
||
'HN-OC',
|
||
'HN-OL',
|
||
'HN-SB',
|
||
'HN-VA',
|
||
'HN-YO',
|
||
'HR-01',
|
||
'HR-02',
|
||
'HR-03',
|
||
'HR-04',
|
||
'HR-05',
|
||
'HR-06',
|
||
'HR-07',
|
||
'HR-08',
|
||
'HR-09',
|
||
'HR-10',
|
||
'HR-11',
|
||
'HR-12',
|
||
'HR-13',
|
||
'HR-14',
|
||
'HR-15',
|
||
'HR-16',
|
||
'HR-17',
|
||
'HR-18',
|
||
'HR-19',
|
||
'HR-20',
|
||
'HR-21',
|
||
'HT-AR',
|
||
'HT-CE',
|
||
'HT-GA',
|
||
'HT-ND',
|
||
'HT-NE',
|
||
'HT-NO',
|
||
'HT-OU',
|
||
'HT-SD',
|
||
'HT-SE',
|
||
'HU-BA',
|
||
'HU-BC',
|
||
'HU-BE',
|
||
'HU-BK',
|
||
'HU-BU',
|
||
'HU-BZ',
|
||
'HU-CS',
|
||
'HU-DE',
|
||
'HU-DU',
|
||
'HU-EG',
|
||
'HU-FE',
|
||
'HU-GS',
|
||
'HU-GY',
|
||
'HU-HB',
|
||
'HU-HE',
|
||
'HU-HV',
|
||
'HU-JN',
|
||
'HU-KE',
|
||
'HU-KM',
|
||
'HU-KV',
|
||
'HU-MI',
|
||
'HU-NK',
|
||
'HU-NO',
|
||
'HU-NY',
|
||
'HU-PE',
|
||
'HU-PS',
|
||
'HU-SD',
|
||
'HU-SF',
|
||
'HU-SH',
|
||
'HU-SK',
|
||
'HU-SN',
|
||
'HU-SO',
|
||
'HU-SS',
|
||
'HU-ST',
|
||
'HU-SZ',
|
||
'HU-TB',
|
||
'HU-TO',
|
||
'HU-VA',
|
||
'HU-VE',
|
||
'HU-VM',
|
||
'HU-ZA',
|
||
'HU-ZE',
|
||
'ID-AC',
|
||
'ID-BA',
|
||
'ID-BB',
|
||
'ID-BE',
|
||
'ID-BT',
|
||
'ID-GO',
|
||
'ID-IJ',
|
||
'ID-JA',
|
||
'ID-JB',
|
||
'ID-JI',
|
||
'ID-JK',
|
||
'ID-JT',
|
||
'ID-JW',
|
||
'ID-KA',
|
||
'ID-KB',
|
||
'ID-KI',
|
||
'ID-KS',
|
||
'ID-KT',
|
||
'ID-LA',
|
||
'ID-MA',
|
||
'ID-MU',
|
||
'ID-NB',
|
||
'ID-NT',
|
||
'ID-NU',
|
||
'ID-PA',
|
||
'ID-RI',
|
||
'ID-SA',
|
||
'ID-SB',
|
||
'ID-SG',
|
||
'ID-SL',
|
||
'ID-SM',
|
||
'ID-SN',
|
||
'ID-SS',
|
||
'ID-ST',
|
||
'ID-SU',
|
||
'ID-YO',
|
||
'IE-C',
|
||
'IE-C; 2',
|
||
'IE-CE',
|
||
'IE-CN',
|
||
'IE-CW',
|
||
'IE-D',
|
||
'IE-DL',
|
||
'IE-G',
|
||
'IE-KE',
|
||
'IE-KK',
|
||
'IE-KY',
|
||
'IE-L',
|
||
'IE-LD',
|
||
'IE-LH',
|
||
'IE-LK',
|
||
'IE-LM',
|
||
'IE-LS',
|
||
'IE-M',
|
||
'IE-MH',
|
||
'IE-MN',
|
||
'IE-MO',
|
||
'IE-OY',
|
||
'IE-RN',
|
||
'IE-SO',
|
||
'IE-TA',
|
||
'IE-U',
|
||
'IE-WD',
|
||
'IE-WH',
|
||
'IE-WW',
|
||
'IE-WX',
|
||
'IL-D',
|
||
'IL-HA',
|
||
'IL-JM',
|
||
'IL-M',
|
||
'IL-TA',
|
||
'IL-Z',
|
||
'IN-AN',
|
||
'IN-AP',
|
||
'IN-AR',
|
||
'IN-AS',
|
||
'IN-BR',
|
||
'IN-CH',
|
||
'IN-CT',
|
||
'IN-DD',
|
||
'IN-DL',
|
||
'IN-DN',
|
||
'IN-GA',
|
||
'IN-GJ',
|
||
'IN-HP',
|
||
'IN-HR',
|
||
'IN-JH',
|
||
'IN-JK',
|
||
'IN-KA',
|
||
'IN-KL',
|
||
'IN-LD',
|
||
'IN-MH',
|
||
'IN-ML',
|
||
'IN-MN',
|
||
'IN-MP',
|
||
'IN-MZ',
|
||
'IN-NL',
|
||
'IN-OR',
|
||
'IN-PB',
|
||
'IN-PY',
|
||
'IN-RJ',
|
||
'IN-SK',
|
||
'IN-TN',
|
||
'IN-TR',
|
||
'IN-UL',
|
||
'IN-UP',
|
||
'IN-WB',
|
||
'IQ-AN',
|
||
'IQ-AR',
|
||
'IQ-BA',
|
||
'IQ-BB',
|
||
'IQ-BG',
|
||
'IQ-DA',
|
||
'IQ-DI',
|
||
'IQ-DQ',
|
||
'IQ-KA',
|
||
'IQ-MA',
|
||
'IQ-MU',
|
||
'IQ-NA',
|
||
'IQ-NI',
|
||
'IQ-QA',
|
||
'IQ-SD',
|
||
'IQ-SU',
|
||
'IQ-TS',
|
||
'IQ-WA',
|
||
'IR-01',
|
||
'IR-02',
|
||
'IR-03',
|
||
'IR-04',
|
||
'IR-05',
|
||
'IR-06',
|
||
'IR-07',
|
||
'IR-08',
|
||
'IR-09',
|
||
'IR-10',
|
||
'IR-11',
|
||
'IR-12',
|
||
'IR-13',
|
||
'IR-14',
|
||
'IR-15',
|
||
'IR-16',
|
||
'IR-17',
|
||
'IR-18',
|
||
'IR-19',
|
||
'IR-20',
|
||
'IR-21',
|
||
'IR-22',
|
||
'IR-23',
|
||
'IR-24',
|
||
'IR-25',
|
||
'IR-26',
|
||
'IR-27',
|
||
'IR-28',
|
||
'IS-0',
|
||
'IS-1',
|
||
'IS-2',
|
||
'IS-3',
|
||
'IS-4',
|
||
'IS-5',
|
||
'IS-6',
|
||
'IS-7',
|
||
'IS-8',
|
||
'IT-21',
|
||
'IT-23',
|
||
'IT-25',
|
||
'IT-32',
|
||
'IT-34',
|
||
'IT-36',
|
||
'IT-42',
|
||
'IT-45',
|
||
'IT-52',
|
||
'IT-55',
|
||
'IT-57',
|
||
'IT-62',
|
||
'IT-65',
|
||
'IT-67',
|
||
'IT-72',
|
||
'IT-75',
|
||
'IT-77',
|
||
'IT-78',
|
||
'IT-82',
|
||
'IT-88',
|
||
'IT-AG',
|
||
'IT-AL',
|
||
'IT-AN',
|
||
'IT-AO',
|
||
'IT-AP',
|
||
'IT-AQ',
|
||
'IT-AR',
|
||
'IT-AT',
|
||
'IT-AV',
|
||
'IT-BA',
|
||
'IT-BG',
|
||
'IT-BI',
|
||
'IT-BL',
|
||
'IT-BN',
|
||
'IT-BO',
|
||
'IT-BR',
|
||
'IT-BS',
|
||
'IT-BZ',
|
||
'IT-CA',
|
||
'IT-CB',
|
||
'IT-CE',
|
||
'IT-CH',
|
||
'IT-CL',
|
||
'IT-CN',
|
||
'IT-CO',
|
||
'IT-CR',
|
||
'IT-CS',
|
||
'IT-CT',
|
||
'IT-CZ',
|
||
'IT-DU',
|
||
'IT-EN',
|
||
'IT-FE',
|
||
'IT-FG',
|
||
'IT-FI',
|
||
'IT-FO',
|
||
'IT-FR',
|
||
'IT-GE',
|
||
'IT-GO',
|
||
'IT-GR',
|
||
'IT-IM',
|
||
'IT-IS',
|
||
'IT-KR',
|
||
'IT-LC',
|
||
'IT-LE',
|
||
'IT-LI',
|
||
'IT-LO',
|
||
'IT-LT',
|
||
'IT-LU',
|
||
'IT-MC',
|
||
'IT-ME',
|
||
'IT-MI',
|
||
'IT-MN',
|
||
'IT-MO',
|
||
'IT-MS',
|
||
'IT-MT',
|
||
'IT-NA',
|
||
'IT-NO',
|
||
'IT-NU',
|
||
'IT-OR',
|
||
'IT-PA',
|
||
'IT-PC',
|
||
'IT-PD',
|
||
'IT-PE',
|
||
'IT-PG',
|
||
'IT-PI',
|
||
'IT-PN',
|
||
'IT-PO',
|
||
'IT-PR',
|
||
'IT-PS',
|
||
'IT-PT',
|
||
'IT-PV',
|
||
'IT-PZ',
|
||
'IT-RA',
|
||
'IT-RC',
|
||
'IT-RE',
|
||
'IT-RG',
|
||
'IT-RI',
|
||
'IT-RM',
|
||
'IT-RN',
|
||
'IT-RO',
|
||
'IT-SA',
|
||
'IT-SI',
|
||
'IT-SO',
|
||
'IT-SP',
|
||
'IT-SR',
|
||
'IT-SS',
|
||
'IT-SV',
|
||
'IT-TA',
|
||
'IT-TE',
|
||
'IT-TN',
|
||
'IT-TO',
|
||
'IT-TP',
|
||
'IT-TR',
|
||
'IT-TS',
|
||
'IT-TV',
|
||
'IT-VA',
|
||
'IT-VB',
|
||
'IT-VC',
|
||
'IT-VE',
|
||
'IT-VI',
|
||
'IT-VR',
|
||
'IT-VT',
|
||
'IT-VV',
|
||
'JM-01',
|
||
'JM-02',
|
||
'JM-03',
|
||
'JM-04',
|
||
'JM-05',
|
||
'JM-06',
|
||
'JM-07',
|
||
'JM-08',
|
||
'JM-09',
|
||
'JM-10',
|
||
'JM-11',
|
||
'JM-12',
|
||
'JM-13',
|
||
'JM-14',
|
||
'JO-AJ',
|
||
'JO-AM',
|
||
'JO-AQ',
|
||
'JO-AT',
|
||
'JO-AZ',
|
||
'JO-BA',
|
||
'JO-IR',
|
||
'JO-JA',
|
||
'JO-KA',
|
||
'JO-MA',
|
||
'JO-MD',
|
||
'JO-MN',
|
||
'JP-01',
|
||
'JP-02',
|
||
'JP-03',
|
||
'JP-04',
|
||
'JP-05',
|
||
'JP-06',
|
||
'JP-07',
|
||
'JP-08',
|
||
'JP-09',
|
||
'JP-10',
|
||
'JP-11',
|
||
'JP-12',
|
||
'JP-13',
|
||
'JP-14',
|
||
'JP-15',
|
||
'JP-16',
|
||
'JP-17',
|
||
'JP-18',
|
||
'JP-19',
|
||
'JP-20',
|
||
'JP-21',
|
||
'JP-22',
|
||
'JP-23',
|
||
'JP-24',
|
||
'JP-25',
|
||
'JP-26',
|
||
'JP-27',
|
||
'JP-28',
|
||
'JP-29',
|
||
'JP-30',
|
||
'JP-31',
|
||
'JP-32',
|
||
'JP-33',
|
||
'JP-34',
|
||
'JP-35',
|
||
'JP-36',
|
||
'JP-37',
|
||
'JP-38',
|
||
'JP-39',
|
||
'JP-40',
|
||
'JP-41',
|
||
'JP-42',
|
||
'JP-43',
|
||
'JP-44',
|
||
'JP-45',
|
||
'JP-46',
|
||
'JP-47',
|
||
'KE-110',
|
||
'KE-200',
|
||
'KE-300',
|
||
'KE-400',
|
||
'KE-500',
|
||
'KE-600',
|
||
'KE-700',
|
||
'KE-900',
|
||
'KG-B',
|
||
'KG-C',
|
||
'KG-GB',
|
||
'KG-J',
|
||
'KG-N',
|
||
'KG-O',
|
||
'KG-T',
|
||
'KG-Y',
|
||
'KH-1',
|
||
'KH-10',
|
||
'KH-11',
|
||
'KH-12',
|
||
'KH-13',
|
||
'KH-14',
|
||
'KH-15',
|
||
'KH-16',
|
||
'KH-17',
|
||
'KH-18',
|
||
'KH-19',
|
||
'KH-2',
|
||
'KH-20',
|
||
'KH-21',
|
||
'KH-22',
|
||
'KH-23',
|
||
'KH-24',
|
||
'KH-3',
|
||
'KH-4',
|
||
'KH-5',
|
||
'KH-6',
|
||
'KH-7',
|
||
'KH-8',
|
||
'KH-9',
|
||
'KI-G',
|
||
'KI-L',
|
||
'KI-P',
|
||
'KM-A',
|
||
'KM-G',
|
||
'KM-M',
|
||
'KP-CHA',
|
||
'KP-HAB',
|
||
'KP-HAN',
|
||
'KP-HWB',
|
||
'KP-HWN',
|
||
'KP-KAE',
|
||
'KP-KAN',
|
||
'KP-NAJ',
|
||
'KP-NAM',
|
||
'KP-PYB',
|
||
'KP-PYN',
|
||
'KP-PYO',
|
||
'KP-YAN',
|
||
'KR-11',
|
||
'KR-26',
|
||
'KR-27',
|
||
'KR-28',
|
||
'KR-29',
|
||
'KR-30',
|
||
'KR-31',
|
||
'KR-41',
|
||
'KR-42',
|
||
'KR-43',
|
||
'KR-44',
|
||
'KR-45',
|
||
'KR-46',
|
||
'KR-47',
|
||
'KR-48',
|
||
'KR-49',
|
||
'KW-AH',
|
||
'KW-FA',
|
||
'KW-HA',
|
||
'KW-JA',
|
||
'KW-KU',
|
||
'KZ-AKM',
|
||
'KZ-AKT',
|
||
'KZ-ALA',
|
||
'KZ-ALM',
|
||
'KZ-AST',
|
||
'KZ-ATY',
|
||
'KZ-KAR',
|
||
'KZ-KUS',
|
||
'KZ-KZY',
|
||
'KZ-MAN',
|
||
'KZ-PAV',
|
||
'KZ-SEV',
|
||
'KZ-VOS',
|
||
'KZ-YUZ',
|
||
'KZ-ZAP',
|
||
'KZ-ZHA',
|
||
'LA-AT',
|
||
'LA-BK',
|
||
'LA-BL',
|
||
'LA-CH',
|
||
'LA-HO',
|
||
'LA-KH',
|
||
'LA-LM',
|
||
'LA-LP',
|
||
'LA-OU',
|
||
'LA-PH',
|
||
'LA-SL',
|
||
'LA-SV',
|
||
'LA-VI',
|
||
'LA-VT',
|
||
'LA-XA',
|
||
'LA-XE',
|
||
'LA-XI',
|
||
'LA-XN',
|
||
'LB-AS',
|
||
'LB-BA',
|
||
'LB-BI',
|
||
'LB-JA',
|
||
'LB-JL',
|
||
'LB-NA',
|
||
'LK-1',
|
||
'LK-11',
|
||
'LK-12',
|
||
'LK-13',
|
||
'LK-2',
|
||
'LK-21',
|
||
'LK-22',
|
||
'LK-23',
|
||
'LK-3',
|
||
'LK-31',
|
||
'LK-32',
|
||
'LK-33',
|
||
'LK-4',
|
||
'LK-41',
|
||
'LK-42',
|
||
'LK-43',
|
||
'LK-44',
|
||
'LK-45',
|
||
'LK-5',
|
||
'LK-51',
|
||
'LK-52',
|
||
'LK-53',
|
||
'LK-6',
|
||
'LK-61',
|
||
'LK-62',
|
||
'LK-7',
|
||
'LK-71',
|
||
'LK-72',
|
||
'LK-8',
|
||
'LK-81',
|
||
'LK-82',
|
||
'LK-9',
|
||
'LK-91',
|
||
'LK-92',
|
||
'LR-BG',
|
||
'LR-BM',
|
||
'LR-CM',
|
||
'LR-GB',
|
||
'LR-GG',
|
||
'LR-GK',
|
||
'LR-LO',
|
||
'LR-MG',
|
||
'LR-MO',
|
||
'LR-MY',
|
||
'LR-NI',
|
||
'LR-RI',
|
||
'LR-SI',
|
||
'LS-A',
|
||
'LS-B',
|
||
'LS-C',
|
||
'LS-D',
|
||
'LS-E',
|
||
'LS-F',
|
||
'LS-G',
|
||
'LS-H',
|
||
'LS-J',
|
||
'LS-K',
|
||
'LT-AL',
|
||
'LT-KL',
|
||
'LT-KU',
|
||
'LT-MR',
|
||
'LT-PN',
|
||
'LT-SA',
|
||
'LT-TA',
|
||
'LT-TE',
|
||
'LT-UT',
|
||
'LT-VL',
|
||
'LU-D',
|
||
'LU-G',
|
||
'LU-L',
|
||
'LV-AI',
|
||
'LV-AL',
|
||
'LV-BL',
|
||
'LV-BU',
|
||
'LV-CE',
|
||
'LV-DA',
|
||
'LV-DGV',
|
||
'LV-DO',
|
||
'LV-GU',
|
||
'LV-JEL',
|
||
'LV-JK',
|
||
'LV-JL',
|
||
'LV-JUR',
|
||
'LV-KR',
|
||
'LV-KU',
|
||
'LV-LE',
|
||
'LV-LM',
|
||
'LV-LPX',
|
||
'LV-LU',
|
||
'LV-MA',
|
||
'LV-OG',
|
||
'LV-PR',
|
||
'LV-RE',
|
||
'LV-REZ',
|
||
'LV-RI',
|
||
'LV-RIX',
|
||
'LV-SA',
|
||
'LV-TA',
|
||
'LV-TU',
|
||
'LV-VE',
|
||
'LV-VEN',
|
||
'LV-VK',
|
||
'LV-VM',
|
||
'LY-BA',
|
||
'LY-BU',
|
||
'LY-FA',
|
||
'LY-JA',
|
||
'LY-JG',
|
||
'LY-JU',
|
||
'LY-MI',
|
||
'LY-NA',
|
||
'LY-SF',
|
||
'LY-TB',
|
||
'LY-WA',
|
||
'LY-WU',
|
||
'LY-ZA',
|
||
'MA-01',
|
||
'MA-02',
|
||
'MA-03',
|
||
'MA-04',
|
||
'MA-05',
|
||
'MA-06',
|
||
'MA-07',
|
||
'MA-08',
|
||
'MA-09',
|
||
'MA-10',
|
||
'MA-11',
|
||
'MA-12',
|
||
'MA-13',
|
||
'MA-14',
|
||
'MA-15',
|
||
'MA-16',
|
||
'MA-AGD',
|
||
'MA-ASZ',
|
||
'MA-AZI',
|
||
'MA-BAH',
|
||
'MA-BEM',
|
||
'MA-BER',
|
||
'MA-BES',
|
||
'MA-BOD',
|
||
'MA-BOM',
|
||
'MA-CAS',
|
||
'MA-CHE',
|
||
'MA-CHI',
|
||
'MA-ERR',
|
||
'MA-ESI',
|
||
'MA-ESM',
|
||
'MA-FES',
|
||
'MA-FIG',
|
||
'MA-GUE',
|
||
'MA-HAJ',
|
||
'MA-HAO',
|
||
'MA-HOC',
|
||
'MA-IFR',
|
||
'MA-JDI',
|
||
'MA-JRA',
|
||
'MA-KEN',
|
||
'MA-KES',
|
||
'MA-KHE',
|
||
'MA-KHN',
|
||
'MA-KHO',
|
||
'MA-LAA',
|
||
'MA-LAR',
|
||
'MA-MAR',
|
||
'MA-MEK',
|
||
'MA-MEL',
|
||
'MA-NAD',
|
||
'MA-OUA',
|
||
'MA-OUD',
|
||
'MA-OUJ',
|
||
'MA-RBA',
|
||
'MA-SAF',
|
||
'MA-SEF',
|
||
'MA-SET',
|
||
'MA-SIK',
|
||
'MA-TAO',
|
||
'MA-TAR',
|
||
'MA-TAT',
|
||
'MA-TAZ',
|
||
'MA-TET',
|
||
'MA-TIZ',
|
||
'MA-TNG',
|
||
'MA-TNT',
|
||
'MD-BA',
|
||
'MD-CA',
|
||
'MD-CH',
|
||
'MD-CU',
|
||
'MD-ED',
|
||
'MD-GA',
|
||
'MD-LA',
|
||
'MD-OR',
|
||
'MD-SN',
|
||
'MD-SO',
|
||
'MD-TA',
|
||
'MD-TI',
|
||
'MD-UN',
|
||
'MG-A',
|
||
'MG-D',
|
||
'MG-F',
|
||
'MG-M',
|
||
'MG-T',
|
||
'MG-U',
|
||
'MH-ALK',
|
||
'MH-ALL',
|
||
'MH-ARN',
|
||
'MH-AUR',
|
||
'MH-EBO',
|
||
'MH-ENI',
|
||
'MH-JAL',
|
||
'MH-KIL',
|
||
'MH-KWA',
|
||
'MH-L',
|
||
'MH-LAE',
|
||
'MH-LIB',
|
||
'MH-LIK',
|
||
'MH-MAJ',
|
||
'MH-MAL',
|
||
'MH-MEJ',
|
||
'MH-MIL',
|
||
'MH-NMK',
|
||
'MH-NMU',
|
||
'MH-RON',
|
||
'MH-T',
|
||
'MH-UJA',
|
||
'MH-UJL',
|
||
'MH-UTI',
|
||
'MH-WTH',
|
||
'MH-WTJ',
|
||
'ML-1',
|
||
'ML-2',
|
||
'ML-3',
|
||
'ML-4',
|
||
'ML-5',
|
||
'ML-6',
|
||
'ML-7',
|
||
'ML-8',
|
||
'ML-BKO',
|
||
'MM-01',
|
||
'MM-02',
|
||
'MM-03',
|
||
'MM-04',
|
||
'MM-05',
|
||
'MM-06',
|
||
'MM-07',
|
||
'MM-11',
|
||
'MM-12',
|
||
'MM-13',
|
||
'MM-14',
|
||
'MM-15',
|
||
'MM-16',
|
||
'MM-17',
|
||
'MN-035',
|
||
'MN-037',
|
||
'MN-039',
|
||
'MN-041',
|
||
'MN-043',
|
||
'MN-046',
|
||
'MN-047',
|
||
'MN-049',
|
||
'MN-051',
|
||
'MN-053',
|
||
'MN-055',
|
||
'MN-057',
|
||
'MN-059',
|
||
'MN-061',
|
||
'MN-063',
|
||
'MN-064',
|
||
'MN-065',
|
||
'MN-067',
|
||
'MN-069',
|
||
'MN-071',
|
||
'MN-073',
|
||
'MN-1',
|
||
'MR-01',
|
||
'MR-02',
|
||
'MR-03',
|
||
'MR-04',
|
||
'MR-05',
|
||
'MR-06',
|
||
'MR-07',
|
||
'MR-08',
|
||
'MR-09',
|
||
'MR-10',
|
||
'MR-11',
|
||
'MR-12',
|
||
'MR-NKC',
|
||
'MU-AG',
|
||
'MU-BL',
|
||
'MU-BR',
|
||
'MU-CC',
|
||
'MU-CU',
|
||
'MU-FL',
|
||
'MU-GP',
|
||
'MU-MO',
|
||
'MU-PA',
|
||
'MU-PL',
|
||
'MU-PU',
|
||
'MU-PW',
|
||
'MU-QB',
|
||
'MU-RO',
|
||
'MU-RR',
|
||
'MU-SA',
|
||
'MU-VP',
|
||
'MV-01',
|
||
'MV-02',
|
||
'MV-03',
|
||
'MV-04',
|
||
'MV-05',
|
||
'MV-07',
|
||
'MV-08',
|
||
'MV-12',
|
||
'MV-13',
|
||
'MV-14',
|
||
'MV-17',
|
||
'MV-20',
|
||
'MV-23',
|
||
'MV-24',
|
||
'MV-25',
|
||
'MV-26',
|
||
'MV-27',
|
||
'MV-28',
|
||
'MV-29',
|
||
'MV-MLE',
|
||
'MW-BA',
|
||
'MW-BL',
|
||
'MW-C',
|
||
'MW-CK',
|
||
'MW-CR',
|
||
'MW-CT',
|
||
'MW-DE',
|
||
'MW-DO',
|
||
'MW-KR',
|
||
'MW-KS',
|
||
'MW-LI',
|
||
'MW-LK',
|
||
'MW-MC',
|
||
'MW-MG',
|
||
'MW-MH',
|
||
'MW-MU',
|
||
'MW-MW',
|
||
'MW-MZ',
|
||
'MW-N',
|
||
'MW-NB',
|
||
'MW-NI',
|
||
'MW-NK',
|
||
'MW-NS',
|
||
'MW-NU',
|
||
'MW-PH',
|
||
'MW-RU',
|
||
'MW-S',
|
||
'MW-SA',
|
||
'MW-TH',
|
||
'MW-ZO',
|
||
'MX-AGU',
|
||
'MX-BCN',
|
||
'MX-BCS',
|
||
'MX-CAM',
|
||
'MX-CHH',
|
||
'MX-CHP',
|
||
'MX-COA',
|
||
'MX-COL',
|
||
'MX-DIF',
|
||
'MX-DUR',
|
||
'MX-GRO',
|
||
'MX-GUA',
|
||
'MX-HID',
|
||
'MX-JAL',
|
||
'MX-MEX',
|
||
'MX-MIC',
|
||
'MX-MOR',
|
||
'MX-NAY',
|
||
'MX-NLE',
|
||
'MX-OAX',
|
||
'MX-PUE',
|
||
'MX-QUE',
|
||
'MX-ROO',
|
||
'MX-SIN',
|
||
'MX-SLP',
|
||
'MX-SON',
|
||
'MX-TAB',
|
||
'MX-TAM',
|
||
'MX-TLA',
|
||
'MX-VER',
|
||
'MX-YUC',
|
||
'MX-ZAC',
|
||
'MY-A',
|
||
'MY-B',
|
||
'MY-C',
|
||
'MY-D',
|
||
'MY-J',
|
||
'MY-K',
|
||
'MY-L',
|
||
'MY-M',
|
||
'MY-N',
|
||
'MY-P',
|
||
'MY-R',
|
||
'MY-SA',
|
||
'MY-SK',
|
||
'MY-T',
|
||
'MY-W',
|
||
'MZ-A',
|
||
'MZ-B',
|
||
'MZ-G',
|
||
'MZ-I',
|
||
'MZ-L',
|
||
'MZ-MPM',
|
||
'MZ-N',
|
||
'MZ-P',
|
||
'MZ-Q',
|
||
'MZ-S',
|
||
'MZ-T',
|
||
'NA-CA',
|
||
'NA-ER',
|
||
'NA-HA',
|
||
'NA-KA',
|
||
'NA-KH',
|
||
'NA-KU',
|
||
'NA-OD',
|
||
'NA-OH',
|
||
'NA-OK',
|
||
'NA-ON',
|
||
'NA-OS',
|
||
'NA-OT',
|
||
'NA-OW',
|
||
'NE-1',
|
||
'NE-2',
|
||
'NE-3',
|
||
'NE-4',
|
||
'NE-5',
|
||
'NE-6',
|
||
'NE-7',
|
||
'NE-8',
|
||
'NG-AB',
|
||
'NG-AD',
|
||
'NG-AK',
|
||
'NG-AN',
|
||
'NG-BA',
|
||
'NG-BE',
|
||
'NG-BO',
|
||
'NG-BY',
|
||
'NG-CR',
|
||
'NG-DE',
|
||
'NG-EB',
|
||
'NG-ED',
|
||
'NG-EK',
|
||
'NG-EN',
|
||
'NG-FC',
|
||
'NG-GO',
|
||
'NG-IM',
|
||
'NG-JI',
|
||
'NG-KD',
|
||
'NG-KE',
|
||
'NG-KN',
|
||
'NG-KO',
|
||
'NG-KT',
|
||
'NG-KW',
|
||
'NG-LA',
|
||
'NG-NA',
|
||
'NG-NI',
|
||
'NG-OG',
|
||
'NG-ON',
|
||
'NG-OS',
|
||
'NG-OY',
|
||
'NG-PL',
|
||
'NG-RI',
|
||
'NG-SO',
|
||
'NG-TA',
|
||
'NG-YO',
|
||
'NG-ZA',
|
||
'NI-AN',
|
||
'NI-AS',
|
||
'NI-BO',
|
||
'NI-CA',
|
||
'NI-CI',
|
||
'NI-CO',
|
||
'NI-ES',
|
||
'NI-GR',
|
||
'NI-JI',
|
||
'NI-LE',
|
||
'NI-MD',
|
||
'NI-MN',
|
||
'NI-MS',
|
||
'NI-MT',
|
||
'NI-NS',
|
||
'NI-RI',
|
||
'NI-SJ',
|
||
'NL-DR',
|
||
'NL-FL',
|
||
'NL-FR',
|
||
'NL-GE',
|
||
'NL-GR',
|
||
'NL-LI',
|
||
'NL-NB',
|
||
'NL-NH',
|
||
'NL-OV',
|
||
'NL-UT',
|
||
'NL-ZE',
|
||
'NL-ZH',
|
||
'NO-01',
|
||
'NO-02',
|
||
'NO-03',
|
||
'NO-04',
|
||
'NO-05',
|
||
'NO-06',
|
||
'NO-07',
|
||
'NO-08',
|
||
'NO-09',
|
||
'NO-10',
|
||
'NO-11',
|
||
'NO-12',
|
||
'NO-14',
|
||
'NO-15',
|
||
'NO-16',
|
||
'NO-17',
|
||
'NO-18',
|
||
'NO-19',
|
||
'NO-20',
|
||
'NO-21',
|
||
'NO-22',
|
||
'NP-1',
|
||
'NP-2',
|
||
'NP-3',
|
||
'NP-4',
|
||
'NP-5',
|
||
'NP-BA',
|
||
'NP-BH',
|
||
'NP-DH',
|
||
'NP-GA',
|
||
'NP-JA',
|
||
'NP-KA',
|
||
'NP-KO',
|
||
'NP-LU',
|
||
'NP-MA',
|
||
'NP-ME',
|
||
'NP-NA',
|
||
'NP-RA',
|
||
'NP-SA',
|
||
'NP-SE',
|
||
'NZ-AUK',
|
||
'NZ-BOP',
|
||
'NZ-CAN',
|
||
'NZ-GIS',
|
||
'NZ-HKB',
|
||
'NZ-MBH',
|
||
'NZ-MWT',
|
||
'NZ-N',
|
||
'NZ-NSN',
|
||
'NZ-NTL',
|
||
'NZ-OTA',
|
||
'NZ-S',
|
||
'NZ-STL',
|
||
'NZ-TAS',
|
||
'NZ-TKI',
|
||
'NZ-WGN',
|
||
'NZ-WKO',
|
||
'NZ-WTC',
|
||
'OM-BA',
|
||
'OM-DA',
|
||
'OM-JA',
|
||
'OM-MA',
|
||
'OM-MU',
|
||
'OM-SH',
|
||
'OM-WU',
|
||
'OM-ZA',
|
||
'PA-0',
|
||
'PA-1',
|
||
'PA-2',
|
||
'PA-3',
|
||
'PA-4',
|
||
'PA-5',
|
||
'PA-6',
|
||
'PA-7',
|
||
'PA-8',
|
||
'PA-9',
|
||
'PE-AMA',
|
||
'PE-ANC',
|
||
'PE-APU',
|
||
'PE-ARE',
|
||
'PE-AYA',
|
||
'PE-CAJ',
|
||
'PE-CAL',
|
||
'PE-CUS',
|
||
'PE-HUC',
|
||
'PE-HUV',
|
||
'PE-ICA',
|
||
'PE-JUN',
|
||
'PE-LAL',
|
||
'PE-LAM',
|
||
'PE-LIM',
|
||
'PE-LOR',
|
||
'PE-MDD',
|
||
'PE-MOQ',
|
||
'PE-PAS',
|
||
'PE-PIU',
|
||
'PE-PUN',
|
||
'PE-SAM',
|
||
'PE-TAC',
|
||
'PE-TUM',
|
||
'PE-UCA',
|
||
'PG-CPK',
|
||
'PG-CPM',
|
||
'PG-EBR',
|
||
'PG-EHG',
|
||
'PG-EPW',
|
||
'PG-ESW',
|
||
'PG-GPK',
|
||
'PG-MBA',
|
||
'PG-MPL',
|
||
'PG-MPM',
|
||
'PG-MRL',
|
||
'PG-NCD',
|
||
'PG-NIK',
|
||
'PG-NPP',
|
||
'PG-NSA',
|
||
'PG-SAN',
|
||
'PG-SHM',
|
||
'PG-WBK',
|
||
'PG-WHM',
|
||
'PG-WPD',
|
||
'PH-00',
|
||
'PH-01',
|
||
'PH-02',
|
||
'PH-03',
|
||
'PH-04',
|
||
'PH-05',
|
||
'PH-06',
|
||
'PH-07',
|
||
'PH-08',
|
||
'PH-09',
|
||
'PH-10',
|
||
'PH-11',
|
||
'PH-12',
|
||
'PH-13',
|
||
'PH-14',
|
||
'PH-15',
|
||
'PH-ABR',
|
||
'PH-AGN',
|
||
'PH-AGS',
|
||
'PH-AKL',
|
||
'PH-ALB',
|
||
'PH-ANT',
|
||
'PH-APA',
|
||
'PH-AUR',
|
||
'PH-BAN',
|
||
'PH-BAS',
|
||
'PH-BEN',
|
||
'PH-BIL',
|
||
'PH-BOH',
|
||
'PH-BTG',
|
||
'PH-BTN',
|
||
'PH-BUK',
|
||
'PH-BUL',
|
||
'PH-CAG',
|
||
'PH-CAM',
|
||
'PH-CAN',
|
||
'PH-CAP',
|
||
'PH-CAS',
|
||
'PH-CAT',
|
||
'PH-CAV',
|
||
'PH-CEB',
|
||
'PH-COM',
|
||
'PH-DAO',
|
||
'PH-DAS',
|
||
'PH-DAV',
|
||
'PH-EAS',
|
||
'PH-GUI',
|
||
'PH-IFU',
|
||
'PH-ILI',
|
||
'PH-ILN',
|
||
'PH-ILS',
|
||
'PH-ISA',
|
||
'PH-KAL',
|
||
'PH-LAG',
|
||
'PH-LAN',
|
||
'PH-LAS',
|
||
'PH-LEY',
|
||
'PH-LUN',
|
||
'PH-MAD',
|
||
'PH-MAG',
|
||
'PH-MAS',
|
||
'PH-MDC',
|
||
'PH-MDR',
|
||
'PH-MOU',
|
||
'PH-MSC',
|
||
'PH-MSR',
|
||
'PH-NCO',
|
||
'PH-NEC',
|
||
'PH-NER',
|
||
'PH-NSA',
|
||
'PH-NUE',
|
||
'PH-NUV',
|
||
'PH-PAM',
|
||
'PH-PAN',
|
||
'PH-PLW',
|
||
'PH-QUE',
|
||
'PH-QUI',
|
||
'PH-RIZ',
|
||
'PH-ROM',
|
||
'PH-SAR',
|
||
'PH-SCO',
|
||
'PH-SIG',
|
||
'PH-SLE',
|
||
'PH-SLU',
|
||
'PH-SOR',
|
||
'PH-SUK',
|
||
'PH-SUN',
|
||
'PH-SUR',
|
||
'PH-TAR',
|
||
'PH-TAW',
|
||
'PH-WSA',
|
||
'PH-ZAN',
|
||
'PH-ZAS',
|
||
'PH-ZMB',
|
||
'PH-ZSI',
|
||
'PK-BA',
|
||
'PK-IS',
|
||
'PK-JK',
|
||
'PK-NA',
|
||
'PK-NW',
|
||
'PK-PB',
|
||
'PK-SD',
|
||
'PK-TA',
|
||
'PL-DS',
|
||
'PL-KP',
|
||
'PL-LB',
|
||
'PL-LD',
|
||
'PL-LU',
|
||
'PL-MA',
|
||
'PL-MZ',
|
||
'PL-OP',
|
||
'PL-PD',
|
||
'PL-PK',
|
||
'PL-PM',
|
||
'PL-SK',
|
||
'PL-SL',
|
||
'PL-WN',
|
||
'PL-WP',
|
||
'PL-ZP',
|
||
'PT-01',
|
||
'PT-02',
|
||
'PT-03',
|
||
'PT-04',
|
||
'PT-05',
|
||
'PT-06',
|
||
'PT-07',
|
||
'PT-08',
|
||
'PT-09',
|
||
'PT-10',
|
||
'PT-11',
|
||
'PT-12',
|
||
'PT-13',
|
||
'PT-14',
|
||
'PT-15',
|
||
'PT-16',
|
||
'PT-17',
|
||
'PT-18',
|
||
'PT-20',
|
||
'PT-30',
|
||
'PY-1',
|
||
'PY-10',
|
||
'PY-11',
|
||
'PY-12',
|
||
'PY-13',
|
||
'PY-14',
|
||
'PY-15',
|
||
'PY-16',
|
||
'PY-19',
|
||
'PY-2',
|
||
'PY-3',
|
||
'PY-4',
|
||
'PY-5',
|
||
'PY-6',
|
||
'PY-7',
|
||
'PY-8',
|
||
'PY-9',
|
||
'PY-ASU',
|
||
'QA-DA',
|
||
'QA-GH',
|
||
'QA-JB',
|
||
'QA-JU',
|
||
'QA-KH',
|
||
'QA-MS',
|
||
'QA-RA',
|
||
'QA-US',
|
||
'QA-WA',
|
||
'RO-AB',
|
||
'RO-AG',
|
||
'RO-AR',
|
||
'RO-B',
|
||
'RO-BC',
|
||
'RO-BH',
|
||
'RO-BN',
|
||
'RO-BR',
|
||
'RO-BT',
|
||
'RO-BV',
|
||
'RO-BZ',
|
||
'RO-CJ',
|
||
'RO-CL',
|
||
'RO-CS',
|
||
'RO-CT',
|
||
'RO-CV',
|
||
'RO-DB',
|
||
'RO-DJ',
|
||
'RO-GJ',
|
||
'RO-GL',
|
||
'RO-GR',
|
||
'RO-HD',
|
||
'RO-HR',
|
||
'RO-IF',
|
||
'RO-IL',
|
||
'RO-IS',
|
||
'RO-MH',
|
||
'RO-MM',
|
||
'RO-MS',
|
||
'RO-NT',
|
||
'RO-OT',
|
||
'RO-PH',
|
||
'RO-SB',
|
||
'RO-SJ',
|
||
'RO-SM',
|
||
'RO-SV',
|
||
'RO-TL',
|
||
'RO-TM',
|
||
'RO-TR',
|
||
'RO-VL',
|
||
'RO-VN',
|
||
'RO-VS',
|
||
'RU-AD',
|
||
'RU-AGB',
|
||
'RU-AL',
|
||
'RU-ALT',
|
||
'RU-AMU',
|
||
'RU-ARK',
|
||
'RU-AST',
|
||
'RU-BA',
|
||
'RU-BEL',
|
||
'RU-BRY',
|
||
'RU-BU',
|
||
'RU-CE',
|
||
'RU-CHE',
|
||
'RU-CHI',
|
||
'RU-CHU',
|
||
'RU-CU',
|
||
'RU-DA',
|
||
'RU-DU',
|
||
'RU-EVE',
|
||
'RU-IN',
|
||
'RU-IRK',
|
||
'RU-IVA',
|
||
'RU-KAM',
|
||
'RU-KB',
|
||
'RU-KC',
|
||
'RU-KDA',
|
||
'RU-KEM',
|
||
'RU-KGD',
|
||
'RU-KGN',
|
||
'RU-KHA',
|
||
'RU-KHM',
|
||
'RU-KIR',
|
||
'RU-KK',
|
||
'RU-KL',
|
||
'RU-KLU',
|
||
'RU-KO',
|
||
'RU-KOP',
|
||
'RU-KOR',
|
||
'RU-KOS',
|
||
'RU-KR',
|
||
'RU-KRS',
|
||
'RU-KYA',
|
||
'RU-LEN',
|
||
'RU-LIP',
|
||
'RU-MAG',
|
||
'RU-ME',
|
||
'RU-MO',
|
||
'RU-MOS',
|
||
'RU-MOW',
|
||
'RU-MUR',
|
||
'RU-NEN',
|
||
'RU-NGR',
|
||
'RU-NIZ',
|
||
'RU-NVS',
|
||
'RU-OMS',
|
||
'RU-ORE',
|
||
'RU-ORL',
|
||
'RU-PER',
|
||
'RU-PNZ',
|
||
'RU-PRI',
|
||
'RU-PSK',
|
||
'RU-ROS',
|
||
'RU-RYA',
|
||
'RU-SA',
|
||
'RU-SAK',
|
||
'RU-SAM',
|
||
'RU-SAR',
|
||
'RU-SE',
|
||
'RU-SMO',
|
||
'RU-SPE',
|
||
'RU-STA',
|
||
'RU-SVE',
|
||
'RU-TA',
|
||
'RU-TAM',
|
||
'RU-TAY',
|
||
'RU-TOM',
|
||
'RU-TUL',
|
||
'RU-TVE',
|
||
'RU-TY',
|
||
'RU-TYU',
|
||
'RU-ULY',
|
||
'RU-UOB',
|
||
'RU-VGG',
|
||
'RU-VLA',
|
||
'RU-VLG',
|
||
'RU-VOR',
|
||
'RU-YAN',
|
||
'RU-YAR',
|
||
'RU-YEV',
|
||
'RW-B',
|
||
'RW-C',
|
||
'RW-D',
|
||
'RW-E',
|
||
'RW-F',
|
||
'RW-G',
|
||
'RW-H',
|
||
'RW-I',
|
||
'RW-J',
|
||
'RW-K',
|
||
'RW-L',
|
||
'RW-M',
|
||
'SA-01',
|
||
'SA-02',
|
||
'SA-03',
|
||
'SA-04',
|
||
'SA-05',
|
||
'SA-06',
|
||
'SA-07',
|
||
'SA-08',
|
||
'SA-09',
|
||
'SA-10',
|
||
'SA-11',
|
||
'SA-12',
|
||
'SA-14',
|
||
'SB-CE',
|
||
'SB-CT',
|
||
'SB-GU',
|
||
'SB-IS',
|
||
'SB-MK',
|
||
'SB-ML',
|
||
'SB-TE',
|
||
'SB-WE',
|
||
'SD-01',
|
||
'SD-02',
|
||
'SD-03',
|
||
'SD-04',
|
||
'SD-05',
|
||
'SD-06',
|
||
'SD-07',
|
||
'SD-08',
|
||
'SD-09',
|
||
'SD-10',
|
||
'SD-11',
|
||
'SD-12',
|
||
'SD-13',
|
||
'SD-14',
|
||
'SD-15',
|
||
'SD-16',
|
||
'SD-17',
|
||
'SD-18',
|
||
'SD-19',
|
||
'SD-20',
|
||
'SD-21',
|
||
'SD-22',
|
||
'SD-23',
|
||
'SD-24',
|
||
'SD-25',
|
||
'SD-26',
|
||
'SE-AB',
|
||
'SE-AC',
|
||
'SE-BD',
|
||
'SE-C',
|
||
'SE-D',
|
||
'SE-E',
|
||
'SE-F',
|
||
'SE-G',
|
||
'SE-H',
|
||
'SE-I',
|
||
'SE-K',
|
||
'SE-M',
|
||
'SE-N',
|
||
'SE-O',
|
||
'SE-S',
|
||
'SE-T',
|
||
'SE-U',
|
||
'SE-W',
|
||
'SE-X',
|
||
'SE-Y',
|
||
'SE-Z',
|
||
'SH-AC',
|
||
'SH-SH',
|
||
'SH-TA',
|
||
'SI-01',
|
||
'SI-02',
|
||
'SI-03',
|
||
'SI-04',
|
||
'SI-05',
|
||
'SI-06',
|
||
'SI-07',
|
||
'SI-08',
|
||
'SI-09',
|
||
'SI-10',
|
||
'SI-11',
|
||
'SI-12',
|
||
'SK-BC',
|
||
'SK-BL',
|
||
'SK-KI',
|
||
'SK-NI',
|
||
'SK-PV',
|
||
'SK-TA',
|
||
'SK-TC',
|
||
'SK-ZI',
|
||
'SL-E',
|
||
'SL-N',
|
||
'SL-S',
|
||
'SL-W',
|
||
'SN-DB',
|
||
'SN-DK',
|
||
'SN-FK',
|
||
'SN-KD',
|
||
'SN-KL',
|
||
'SN-LG',
|
||
'SN-SL',
|
||
'SN-TC',
|
||
'SN-TH',
|
||
'SN-ZG',
|
||
'SO-AW',
|
||
'SO-BK',
|
||
'SO-BN',
|
||
'SO-BR',
|
||
'SO-BY',
|
||
'SO-GA',
|
||
'SO-GE',
|
||
'SO-HI',
|
||
'SO-JD',
|
||
'SO-JH',
|
||
'SO-MU',
|
||
'SO-NU',
|
||
'SO-SA',
|
||
'SO-SD',
|
||
'SO-SH',
|
||
'SO-SO',
|
||
'SO-TO',
|
||
'SO-WO',
|
||
'SR-BR',
|
||
'SR-CM',
|
||
'SR-CR',
|
||
'SR-MA',
|
||
'SR-NI',
|
||
'SR-PM',
|
||
'SR-PR',
|
||
'SR-SA',
|
||
'SR-SI',
|
||
'SR-WA',
|
||
'ST-P',
|
||
'ST-S',
|
||
'SV-AH',
|
||
'SV-CA',
|
||
'SV-CH',
|
||
'SV-CU',
|
||
'SV-LI',
|
||
'SV-MO',
|
||
'SV-PA',
|
||
'SV-SA',
|
||
'SV-SM',
|
||
'SV-SO',
|
||
'SV-SS',
|
||
'SV-SV',
|
||
'SV-UN',
|
||
'SV-US',
|
||
'SY-DI',
|
||
'SY-DR',
|
||
'SY-DY',
|
||
'SY-HA',
|
||
'SY-HI',
|
||
'SY-HL',
|
||
'SY-HM',
|
||
'SY-ID',
|
||
'SY-LA',
|
||
'SY-QU',
|
||
'SY-RA',
|
||
'SY-RD',
|
||
'SY-SU',
|
||
'SY-TA',
|
||
'SZ-HH',
|
||
'SZ-LU',
|
||
'SZ-MA',
|
||
'SZ-SH',
|
||
'TD-BA',
|
||
'TD-BET',
|
||
'TD-BI',
|
||
'TD-CB',
|
||
'TD-GR',
|
||
'TD-KA',
|
||
'TD-LC',
|
||
'TD-LO',
|
||
'TD-LR',
|
||
'TD-MC',
|
||
'TD-MK',
|
||
'TD-OD',
|
||
'TD-SA',
|
||
'TD-TA',
|
||
'TG-C',
|
||
'TG-K',
|
||
'TG-M',
|
||
'TG-P',
|
||
'TG-S',
|
||
'TH-10',
|
||
'TH-11',
|
||
'TH-12',
|
||
'TH-13',
|
||
'TH-14',
|
||
'TH-15',
|
||
'TH-16',
|
||
'TH-17',
|
||
'TH-18',
|
||
'TH-19',
|
||
'TH-20',
|
||
'TH-21',
|
||
'TH-22',
|
||
'TH-23',
|
||
'TH-24',
|
||
'TH-25',
|
||
'TH-26',
|
||
'TH-27',
|
||
'TH-30',
|
||
'TH-31',
|
||
'TH-32',
|
||
'TH-33',
|
||
'TH-34',
|
||
'TH-35',
|
||
'TH-36',
|
||
'TH-37',
|
||
'TH-39',
|
||
'TH-40',
|
||
'TH-41',
|
||
'TH-42',
|
||
'TH-43',
|
||
'TH-44',
|
||
'TH-45',
|
||
'TH-46',
|
||
'TH-47',
|
||
'TH-48',
|
||
'TH-49',
|
||
'TH-50',
|
||
'TH-51',
|
||
'TH-52',
|
||
'TH-53',
|
||
'TH-54',
|
||
'TH-55',
|
||
'TH-56',
|
||
'TH-57',
|
||
'TH-58',
|
||
'TH-60',
|
||
'TH-61',
|
||
'TH-62',
|
||
'TH-63',
|
||
'TH-64',
|
||
'TH-65',
|
||
'TH-66',
|
||
'TH-67',
|
||
'TH-70',
|
||
'TH-71',
|
||
'TH-72',
|
||
'TH-73',
|
||
'TH-74',
|
||
'TH-75',
|
||
'TH-76',
|
||
'TH-77',
|
||
'TH-80',
|
||
'TH-81',
|
||
'TH-82',
|
||
'TH-83',
|
||
'TH-84',
|
||
'TH-85',
|
||
'TH-86',
|
||
'TH-90',
|
||
'TH-91',
|
||
'TH-92',
|
||
'TH-93',
|
||
'TH-94',
|
||
'TH-95',
|
||
'TH-96',
|
||
'TH-S',
|
||
'TJ-GB',
|
||
'TJ-KT',
|
||
'TJ-SU',
|
||
'TL-AL',
|
||
'TL-AN',
|
||
'TL-BA',
|
||
'TL-BO',
|
||
'TL-CO',
|
||
'TL-DI',
|
||
'TL-ER',
|
||
'TL-LA',
|
||
'TL-LI',
|
||
'TL-MF',
|
||
'TL-MT',
|
||
'TL-OE',
|
||
'TL-VI',
|
||
'TM-A',
|
||
'TM-B',
|
||
'TM-D',
|
||
'TM-L',
|
||
'TM-M',
|
||
'TN-11',
|
||
'TN-12',
|
||
'TN-13',
|
||
'TN-21',
|
||
'TN-22',
|
||
'TN-23',
|
||
'TN-31',
|
||
'TN-32',
|
||
'TN-33',
|
||
'TN-34',
|
||
'TN-41',
|
||
'TN-42',
|
||
'TN-43',
|
||
'TN-51',
|
||
'TN-52',
|
||
'TN-53',
|
||
'TN-61',
|
||
'TN-71',
|
||
'TN-72',
|
||
'TN-73',
|
||
'TN-81',
|
||
'TN-82',
|
||
'TN-83',
|
||
'TR-01',
|
||
'TR-02',
|
||
'TR-03',
|
||
'TR-04',
|
||
'TR-05',
|
||
'TR-06',
|
||
'TR-07',
|
||
'TR-08',
|
||
'TR-09',
|
||
'TR-10',
|
||
'TR-11',
|
||
'TR-12',
|
||
'TR-13',
|
||
'TR-14',
|
||
'TR-15',
|
||
'TR-16',
|
||
'TR-17',
|
||
'TR-18',
|
||
'TR-19',
|
||
'TR-20',
|
||
'TR-21',
|
||
'TR-22',
|
||
'TR-23',
|
||
'TR-24',
|
||
'TR-25',
|
||
'TR-26',
|
||
'TR-27',
|
||
'TR-28',
|
||
'TR-29',
|
||
'TR-30',
|
||
'TR-31',
|
||
'TR-32',
|
||
'TR-33',
|
||
'TR-34',
|
||
'TR-35',
|
||
'TR-36',
|
||
'TR-37',
|
||
'TR-38',
|
||
'TR-39',
|
||
'TR-40',
|
||
'TR-41',
|
||
'TR-42',
|
||
'TR-43',
|
||
'TR-44',
|
||
'TR-45',
|
||
'TR-46',
|
||
'TR-47',
|
||
'TR-48',
|
||
'TR-49',
|
||
'TR-50',
|
||
'TR-51',
|
||
'TR-52',
|
||
'TR-53',
|
||
'TR-54',
|
||
'TR-55',
|
||
'TR-56',
|
||
'TR-57',
|
||
'TR-58',
|
||
'TR-59',
|
||
'TR-60',
|
||
'TR-61',
|
||
'TR-62',
|
||
'TR-63',
|
||
'TR-64',
|
||
'TR-65',
|
||
'TR-66',
|
||
'TR-67',
|
||
'TR-68',
|
||
'TR-69',
|
||
'TR-70',
|
||
'TR-71',
|
||
'TR-72',
|
||
'TR-73',
|
||
'TR-74',
|
||
'TR-75',
|
||
'TR-76',
|
||
'TR-77',
|
||
'TR-78',
|
||
'TR-79',
|
||
'TR-80',
|
||
'TR-81',
|
||
'TT-ARI',
|
||
'TT-CHA',
|
||
'TT-CTT',
|
||
'TT-DMN',
|
||
'TT-ETO',
|
||
'TT-PED',
|
||
'TT-POS',
|
||
'TT-PRT',
|
||
'TT-PTF',
|
||
'TT-RCM',
|
||
'TT-SFO',
|
||
'TT-SGE',
|
||
'TT-SIP',
|
||
'TT-SJL',
|
||
'TT-TUP',
|
||
'TT-WTO',
|
||
'TW-CHA',
|
||
'TW-CYQ',
|
||
'TW-HSQ',
|
||
'TW-HUA',
|
||
'TW-ILA',
|
||
'TW-KEE',
|
||
'TW-KHQ',
|
||
'TW-MIA',
|
||
'TW-NAN',
|
||
'TW-PEN',
|
||
'TW-PIF',
|
||
'TW-TAO',
|
||
'TW-TNQ',
|
||
'TW-TPQ',
|
||
'TW-TTT',
|
||
'TW-TXQ',
|
||
'TW-YUN',
|
||
'TZ-01',
|
||
'TZ-02',
|
||
'TZ-03',
|
||
'TZ-04',
|
||
'TZ-05',
|
||
'TZ-06',
|
||
'TZ-07',
|
||
'TZ-08',
|
||
'TZ-09',
|
||
'TZ-10',
|
||
'TZ-11',
|
||
'TZ-12',
|
||
'TZ-13',
|
||
'TZ-14',
|
||
'TZ-15',
|
||
'TZ-16',
|
||
'TZ-17',
|
||
'TZ-18',
|
||
'TZ-19',
|
||
'TZ-20',
|
||
'TZ-21',
|
||
'TZ-22',
|
||
'TZ-23',
|
||
'TZ-24',
|
||
'TZ-25',
|
||
'UA-05',
|
||
'UA-07',
|
||
'UA-09',
|
||
'UA-12',
|
||
'UA-14',
|
||
'UA-18',
|
||
'UA-21',
|
||
'UA-23',
|
||
'UA-26',
|
||
'UA-30',
|
||
'UA-32',
|
||
'UA-35',
|
||
'UA-40',
|
||
'UA-43',
|
||
'UA-46',
|
||
'UA-48',
|
||
'UA-51',
|
||
'UA-53',
|
||
'UA-56',
|
||
'UA-59',
|
||
'UA-61',
|
||
'UA-63',
|
||
'UA-65',
|
||
'UA-68',
|
||
'UA-71',
|
||
'UA-74',
|
||
'UA-77',
|
||
'UG-AJM',
|
||
'UG-APA',
|
||
'UG-ARU',
|
||
'UG-BUA',
|
||
'UG-BUG',
|
||
'UG-BUN',
|
||
'UG-BUS',
|
||
'UG-C',
|
||
'UG-E',
|
||
'UG-GUL',
|
||
'UG-HOI',
|
||
'UG-IGA',
|
||
'UG-JIN',
|
||
'UG-KAP',
|
||
'UG-KAS',
|
||
'UG-KAT',
|
||
'UG-KBL',
|
||
'UG-KBR',
|
||
'UG-KIB',
|
||
'UG-KIS',
|
||
'UG-KIT',
|
||
'UG-KLA',
|
||
'UG-KLE',
|
||
'UG-KLG',
|
||
'UG-KLI',
|
||
'UG-KOT',
|
||
'UG-KUM',
|
||
'UG-LIR',
|
||
'UG-LUW',
|
||
'UG-MBL',
|
||
'UG-MBR',
|
||
'UG-MOR',
|
||
'UG-MOY',
|
||
'UG-MPI',
|
||
'UG-MSI',
|
||
'UG-MSK',
|
||
'UG-MUB',
|
||
'UG-MUK',
|
||
'UG-N',
|
||
'UG-NAK',
|
||
'UG-NEB',
|
||
'UG-NTU',
|
||
'UG-PAL',
|
||
'UG-RAK',
|
||
'UG-RUK',
|
||
'UG-SEM',
|
||
'UG-SOR',
|
||
'UG-TOR',
|
||
'UG-W',
|
||
'UM-67',
|
||
'UM-71',
|
||
'UM-76',
|
||
'UM-79',
|
||
'UM-81',
|
||
'UM-84',
|
||
'UM-86',
|
||
'UM-89',
|
||
'UM-95',
|
||
'US-AK',
|
||
'US-AL',
|
||
'US-AR',
|
||
'US-AS',
|
||
'US-AZ',
|
||
'US-CA',
|
||
'US-CO',
|
||
'US-CT',
|
||
'US-DC',
|
||
'US-DE',
|
||
'US-FL',
|
||
'US-GA',
|
||
'US-GU',
|
||
'US-HI',
|
||
'US-IA',
|
||
'US-ID',
|
||
'US-IL',
|
||
'US-IN',
|
||
'US-KS',
|
||
'US-KY',
|
||
'US-LA',
|
||
'US-MA',
|
||
'US-MD',
|
||
'US-ME',
|
||
'US-MI',
|
||
'US-MN',
|
||
'US-MO',
|
||
'US-MP',
|
||
'US-MS',
|
||
'US-MT',
|
||
'US-NC',
|
||
'US-ND',
|
||
'US-NE',
|
||
'US-NH',
|
||
'US-NJ',
|
||
'US-NM',
|
||
'US-NV',
|
||
'US-NY',
|
||
'US-OH',
|
||
'US-OK',
|
||
'US-OR',
|
||
'US-PA',
|
||
'US-PR',
|
||
'US-RI',
|
||
'US-SC',
|
||
'US-SD',
|
||
'US-TN',
|
||
'US-TX',
|
||
'US-UM',
|
||
'US-UT',
|
||
'US-VA',
|
||
'US-VI',
|
||
'US-VT',
|
||
'US-WA',
|
||
'US-WI',
|
||
'US-WV',
|
||
'US-WY',
|
||
'UY-AR',
|
||
'UY-CA',
|
||
'UY-CL',
|
||
'UY-CO',
|
||
'UY-DU',
|
||
'UY-FD',
|
||
'UY-FS',
|
||
'UY-LA',
|
||
'UY-MA',
|
||
'UY-MO',
|
||
'UY-PA',
|
||
'UY-RN',
|
||
'UY-RO',
|
||
'UY-RV',
|
||
'UY-SA',
|
||
'UY-SJ',
|
||
'UY-SO',
|
||
'UY-TA',
|
||
'UY-TT',
|
||
'UZ-AN',
|
||
'UZ-BU',
|
||
'UZ-FA',
|
||
'UZ-JI',
|
||
'UZ-NG',
|
||
'UZ-NW',
|
||
'UZ-QA',
|
||
'UZ-QR',
|
||
'UZ-SA',
|
||
'UZ-SI',
|
||
'UZ-SU',
|
||
'UZ-TK',
|
||
'UZ-TO',
|
||
'UZ-XO',
|
||
'VE-A',
|
||
'VE-B',
|
||
'VE-C',
|
||
'VE-D',
|
||
'VE-E',
|
||
'VE-F',
|
||
'VE-G',
|
||
'VE-H',
|
||
'VE-I',
|
||
'VE-J',
|
||
'VE-K',
|
||
'VE-L',
|
||
'VE-M',
|
||
'VE-N',
|
||
'VE-O',
|
||
'VE-P',
|
||
'VE-R',
|
||
'VE-S',
|
||
'VE-T',
|
||
'VE-U',
|
||
'VE-V',
|
||
'VE-W',
|
||
'VE-X',
|
||
'VE-Y',
|
||
'VE-Z',
|
||
'VN-01',
|
||
'VN-02',
|
||
'VN-03',
|
||
'VN-04',
|
||
'VN-05',
|
||
'VN-06',
|
||
'VN-07',
|
||
'VN-09',
|
||
'VN-13',
|
||
'VN-14',
|
||
'VN-15',
|
||
'VN-18',
|
||
'VN-20',
|
||
'VN-21',
|
||
'VN-22',
|
||
'VN-23',
|
||
'VN-24',
|
||
'VN-25',
|
||
'VN-26',
|
||
'VN-27',
|
||
'VN-28',
|
||
'VN-29',
|
||
'VN-30',
|
||
'VN-31',
|
||
'VN-32',
|
||
'VN-33',
|
||
'VN-34',
|
||
'VN-35',
|
||
'VN-36',
|
||
'VN-37',
|
||
'VN-39',
|
||
'VN-40',
|
||
'VN-41',
|
||
'VN-43',
|
||
'VN-44',
|
||
'VN-45',
|
||
'VN-46',
|
||
'VN-47',
|
||
'VN-48',
|
||
'VN-49',
|
||
'VN-50',
|
||
'VN-51',
|
||
'VN-52',
|
||
'VN-53',
|
||
'VN-54',
|
||
'VN-55',
|
||
'VN-56',
|
||
'VN-57',
|
||
'VN-58',
|
||
'VN-59',
|
||
'VN-60',
|
||
'VN-61',
|
||
'VN-62',
|
||
'VN-63',
|
||
'VN-64',
|
||
'VN-65',
|
||
'VN-66',
|
||
'VN-67',
|
||
'VN-68',
|
||
'VN-69',
|
||
'VN-70',
|
||
'VU-MAP',
|
||
'VU-PAM',
|
||
'VU-SAM',
|
||
'VU-SEE',
|
||
'VU-TAE',
|
||
'VU-TOB',
|
||
'WS-AA',
|
||
'WS-AL',
|
||
'WS-AT',
|
||
'WS-FA',
|
||
'WS-GE',
|
||
'WS-GI',
|
||
'WS-PA',
|
||
'WS-SA',
|
||
'WS-TU',
|
||
'WS-VF',
|
||
'WS-VS',
|
||
'YE-AB',
|
||
'YE-AD',
|
||
'YE-AM',
|
||
'YE-BA',
|
||
'YE-DA',
|
||
'YE-DH',
|
||
'YE-HD',
|
||
'YE-HJ',
|
||
'YE-HU',
|
||
'YE-IB',
|
||
'YE-JA',
|
||
'YE-LA',
|
||
'YE-MA',
|
||
'YE-MR',
|
||
'YE-MW',
|
||
'YE-SD',
|
||
'YE-SH',
|
||
'YE-SN',
|
||
'YE-TA',
|
||
'YU-CG',
|
||
'YU-KM',
|
||
'YU-SR',
|
||
'YU-VO',
|
||
'ZA-EC',
|
||
'ZA-FS',
|
||
'ZA-GT',
|
||
'ZA-MP',
|
||
'ZA-NC',
|
||
'ZA-NL',
|
||
'ZA-NP',
|
||
'ZA-NW',
|
||
'ZA-WC',
|
||
'ZM-01',
|
||
'ZM-02',
|
||
'ZM-03',
|
||
'ZM-04',
|
||
'ZM-05',
|
||
'ZM-06',
|
||
'ZM-07',
|
||
'ZM-08',
|
||
'ZM-09',
|
||
'ZW-BU',
|
||
'ZW-HA',
|
||
'ZW-MA',
|
||
'ZW-MC',
|
||
'ZW-ME',
|
||
'ZW-MI',
|
||
'ZW-MN',
|
||
'ZW-MS',
|
||
'ZW-MV',
|
||
'ZW-MW',
|
||
name='subdivision',
|
||
),
|
||
nullable=False,
|
||
),
|
||
sa.Column('city', sa.Unicode(length=32), nullable=False),
|
||
sa.Column('city_confidence', sa.SmallInteger(), nullable=False),
|
||
sa.Column('isp', sa.Unicode(length=32), nullable=False),
|
||
sa.Column('organization', sa.Unicode(length=32), nullable=True),
|
||
sa.Column('organization_type', sa.Unicode(length=32), nullable=True),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Rate table
|
||
op.create_table(
|
||
'rate',
|
||
sa.Column(
|
||
'rating',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment='The rating for the content.',
|
||
),
|
||
sa.Column(
|
||
'version',
|
||
teal.db.StrictVersionType(),
|
||
nullable=True,
|
||
comment='The version of the software.',
|
||
),
|
||
sa.Column(
|
||
'appearance',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment='Subjective value representing aesthetic aspects.',
|
||
),
|
||
sa.Column(
|
||
'functionality',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment='Subjective value representing usage aspects.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Snapshot table
|
||
op.create_table(
|
||
'snapshot',
|
||
sa.Column('uuid', postgresql.UUID(as_uuid=True), nullable=True),
|
||
sa.Column('version', teal.db.StrictVersionType(length=32), nullable=False),
|
||
sa.Column(
|
||
'software',
|
||
sa.Enum(
|
||
'Workbench',
|
||
'WorkbenchAndroid',
|
||
'AndroidApp',
|
||
'Web',
|
||
'DesktopApp',
|
||
name='snapshotsoftware',
|
||
),
|
||
nullable=False,
|
||
),
|
||
sa.Column(
|
||
'elapsed',
|
||
sa.Interval(),
|
||
nullable=True,
|
||
comment='For Snapshots made with Workbench, the total amount \n of time it took to complete.\n ',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
sa.UniqueConstraint('uuid'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Test table
|
||
op.create_table(
|
||
'test',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# BenchmarkDataStorage table
|
||
op.create_table(
|
||
'benchmark_data_storage',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('read_speed', sa.Float(decimal_return_scale=2), nullable=False),
|
||
sa.Column('write_speed', sa.Float(decimal_return_scale=2), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.benchmark.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# BenchmarkWithRate table
|
||
op.create_table(
|
||
'benchmark_with_rate',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('rate', sa.Float(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.benchmark.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# MeasureBattery table
|
||
op.create_table(
|
||
'measure_battery',
|
||
sa.Column(
|
||
'size',
|
||
sa.Integer(),
|
||
nullable=False,
|
||
comment='Maximum battery capacity, in mAh.',
|
||
),
|
||
sa.Column(
|
||
'voltage',
|
||
sa.Integer(),
|
||
nullable=False,
|
||
comment='The actual voltage of the battery, in mV.',
|
||
),
|
||
sa.Column(
|
||
'cycle_count',
|
||
sa.Integer(),
|
||
nullable=True,
|
||
comment='The number of full charges – discharges \n cycles.\n ',
|
||
),
|
||
sa.Column(
|
||
'health',
|
||
sa.Enum(
|
||
'Cold',
|
||
'Dead',
|
||
'Good',
|
||
'Overheat',
|
||
'OverVoltage',
|
||
'UnspecifiedValue',
|
||
name='batteryhealth',
|
||
),
|
||
nullable=True,
|
||
comment='The health of the Battery. \n Only reported in Android.\n ',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Price table
|
||
op.create_table(
|
||
'price',
|
||
sa.Column(
|
||
'currency',
|
||
sa.Enum(
|
||
'AFN',
|
||
'ARS',
|
||
'AWG',
|
||
'AUD',
|
||
'AZN',
|
||
'BSD',
|
||
'BBD',
|
||
'BDT',
|
||
'BYR',
|
||
'BZD',
|
||
'BMD',
|
||
'BOB',
|
||
'BAM',
|
||
'BWP',
|
||
'BGN',
|
||
'BRL',
|
||
'BND',
|
||
'KHR',
|
||
'CAD',
|
||
'KYD',
|
||
'CLP',
|
||
'CNY',
|
||
'COP',
|
||
'CRC',
|
||
'HRK',
|
||
'CUP',
|
||
'CZK',
|
||
'DKK',
|
||
'DOP',
|
||
'XCD',
|
||
'EGP',
|
||
'SVC',
|
||
'EEK',
|
||
'EUR',
|
||
'FKP',
|
||
'FJD',
|
||
'GHC',
|
||
'GIP',
|
||
'GTQ',
|
||
'GGP',
|
||
'GYD',
|
||
'HNL',
|
||
'HKD',
|
||
'HUF',
|
||
'ISK',
|
||
'INR',
|
||
'IDR',
|
||
'IRR',
|
||
'IMP',
|
||
'ILS',
|
||
'JMD',
|
||
'JPY',
|
||
'JEP',
|
||
'KZT',
|
||
'KPW',
|
||
'KRW',
|
||
'KGS',
|
||
'LAK',
|
||
'LVL',
|
||
'LBP',
|
||
'LRD',
|
||
'LTL',
|
||
'MKD',
|
||
'MYR',
|
||
'MUR',
|
||
'MXN',
|
||
'MNT',
|
||
'MZN',
|
||
'NAD',
|
||
'NPR',
|
||
'ANG',
|
||
'NZD',
|
||
'NIO',
|
||
'NGN',
|
||
'NOK',
|
||
'OMR',
|
||
'PKR',
|
||
'PAB',
|
||
'PYG',
|
||
'PEN',
|
||
'PHP',
|
||
'PLN',
|
||
'QAR',
|
||
'RON',
|
||
'RUB',
|
||
'SHP',
|
||
'SAR',
|
||
'RSD',
|
||
'SCR',
|
||
'SGD',
|
||
'SBD',
|
||
'SOS',
|
||
'ZAR',
|
||
'LKR',
|
||
'SEK',
|
||
'CHF',
|
||
'SRD',
|
||
'SYP',
|
||
'TWD',
|
||
'THB',
|
||
'TTD',
|
||
'TRY',
|
||
'TRL',
|
||
'TVD',
|
||
'UAH',
|
||
'GBP',
|
||
'USD',
|
||
'UYU',
|
||
'UZS',
|
||
'VEF',
|
||
'VND',
|
||
'YER',
|
||
'ZWD',
|
||
name='currency',
|
||
),
|
||
nullable=False,
|
||
comment='The currency of this price as for ISO 4217.',
|
||
),
|
||
sa.Column(
|
||
'price',
|
||
sa.Numeric(precision=19, scale=4),
|
||
nullable=False,
|
||
comment='The value.',
|
||
),
|
||
sa.Column(
|
||
'software',
|
||
sa.Enum('Ereuse', name='pricesoftware'),
|
||
nullable=True,
|
||
comment='The software used to compute this price,\n if the price was computed automatically. This field is None\n if the price has been manually set.\n ',
|
||
),
|
||
sa.Column(
|
||
'version',
|
||
teal.db.StrictVersionType(),
|
||
nullable=True,
|
||
comment='The version of the software, or None.',
|
||
),
|
||
sa.Column(
|
||
'rating_id',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=True,
|
||
comment='The Rate used to auto-compute\n this price, if it has not been set manually.\n ',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action_with_one_device.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['rating_id'],
|
||
[f'{get_inv()}.rate.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# ProofDataWipe table
|
||
op.create_table(
|
||
'proof_data_wipe',
|
||
sa.Column('date', sa.DateTime(), nullable=False),
|
||
sa.Column(
|
||
'result',
|
||
sa.Boolean(),
|
||
nullable=False,
|
||
comment='Identifies proof datawipe as a result.',
|
||
),
|
||
sa.Column('proof_author_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('erasure_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['erasure_id'],
|
||
[f'{get_inv()}.erase_basic.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.proof.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['proof_author_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# PRoofFuntion
|
||
op.create_table(
|
||
'proof_function',
|
||
sa.Column('disk_usage', sa.Integer(), nullable=True),
|
||
sa.Column('proof_author_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('rate_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.proof.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['proof_author_id'],
|
||
['common.user.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['rate_id'],
|
||
[f'{get_inv()}.rate.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# RateComputer table
|
||
op.create_table(
|
||
'rate_computer',
|
||
sa.Column(
|
||
'processor',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment='The rate of the Processor.',
|
||
),
|
||
sa.Column(
|
||
'ram',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment='The rate of the RAM.',
|
||
),
|
||
sa.Column(
|
||
'data_storage',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment="'Data storage rate, like HHD, SSD.'",
|
||
),
|
||
sa.Column(
|
||
'graphic_card',
|
||
sa.Float(decimal_return_scale=2),
|
||
nullable=True,
|
||
comment='Graphic card rate.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.rate.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# SnapshotRequest table
|
||
op.create_table(
|
||
'snapshot_request',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('request', sa.JSON(), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.snapshot.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Step table
|
||
op.create_table(
|
||
'step',
|
||
sa.Column('erasure_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column('type', sa.Unicode(length=32), nullable=False),
|
||
sa.Column('num', sa.SmallInteger(), nullable=False),
|
||
sa.Column('severity', teal.db.IntEnum(Severity), nullable=False),
|
||
sa.Column(
|
||
'start_time',
|
||
sa.TIMESTAMP(timezone=True),
|
||
nullable=False,
|
||
comment='When the action starts. For some actions like\n reservations the time when they are available, for others like renting\n when the renting starts.\n ',
|
||
),
|
||
sa.Column(
|
||
'end_time',
|
||
sa.TIMESTAMP(timezone=True),
|
||
nullable=False,
|
||
comment='When the action ends. For some actions like reservations\n the time when they expire, for others like renting\n the time the end rents. For punctual actions it is the time \n they are performed; it differs with ``created`` in which\n created is the where the system received the action.\n ',
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['erasure_id'], [f'{get_inv()}.erase_basic.id'], ondelete='CASCADE'
|
||
),
|
||
sa.PrimaryKeyConstraint('erasure_id', 'num'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'stress_test',
|
||
sa.Column('elapsed', sa.Interval(), nullable=False),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'test_audio',
|
||
sa.Column(
|
||
'speaker',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='Whether the speaker works as expected.',
|
||
),
|
||
sa.Column(
|
||
'microphone',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='Whether the microphone works as expected.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'test_bios',
|
||
sa.Column(
|
||
'beeps_power_on',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='Whether there are no beeps or error\n codes when booting up.\n \n Reference: R2 provision 6 page 23.\n ',
|
||
),
|
||
sa.Column(
|
||
'access_range',
|
||
sa.Enum('A', 'B', 'C', 'D', 'E', name='biosaccessrange'),
|
||
nullable=True,
|
||
comment='Difficulty to modify the boot menu.\n \n This is used as an usability measure for accessing and modifying\n a bios, specially as something as important as modifying the boot\n menu.\n ',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'test_camera',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'test_connectivity',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
op.create_table(
|
||
'test_data_storage',
|
||
sa.Column(
|
||
'length',
|
||
sa.Enum('Short', 'Extended', name='testdatastoragelength'),
|
||
nullable=False,
|
||
),
|
||
sa.Column('status', sa.Unicode(), nullable=False),
|
||
sa.Column('lifetime', sa.Interval(), nullable=True),
|
||
sa.Column('assessment', sa.Boolean(), nullable=True),
|
||
sa.Column('reallocated_sector_count', sa.SmallInteger(), nullable=True),
|
||
sa.Column('power_cycle_count', sa.SmallInteger(), nullable=True),
|
||
sa.Column('reported_uncorrectable_errors', sa.Integer(), nullable=True),
|
||
sa.Column('command_timeout', sa.Integer(), nullable=True),
|
||
sa.Column('current_pending_sector_count', sa.SmallInteger(), nullable=True),
|
||
sa.Column('offline_uncorrectable', sa.SmallInteger(), nullable=True),
|
||
sa.Column('remaining_lifetime_percentage', sa.SmallInteger(), nullable=True),
|
||
sa.Column('elapsed', sa.Interval(), nullable=False),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# TestDisplayHinge table
|
||
op.create_table(
|
||
'test_display_hinge',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# TestKeyboard table
|
||
op.create_table(
|
||
'test_keyboard',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# TestPowerAdapter table
|
||
op.create_table(
|
||
'test_power_adapter',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# TestTrackpad table
|
||
op.create_table(
|
||
'test_trackpad',
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# VisualTest table
|
||
op.create_table(
|
||
'visual_test',
|
||
sa.Column(
|
||
'appearance_range',
|
||
sa.Enum('Z', 'A', 'B', 'C', 'D', 'E', name='appearancerange'),
|
||
nullable=True,
|
||
comment='Grades the imperfections that aesthetically affect the device, but not its usage.',
|
||
),
|
||
sa.Column(
|
||
'functionality_range',
|
||
sa.Enum('A', 'B', 'C', 'D', name='functionalityrange'),
|
||
nullable=True,
|
||
comment='Grades the defects of a device that affect its usage.',
|
||
),
|
||
sa.Column(
|
||
'labelling',
|
||
sa.Boolean(),
|
||
nullable=True,
|
||
comment='Whether there are tags to be removed.',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.test.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
|
||
# Trade table
|
||
op.create_table(
|
||
'trade',
|
||
sa.Column(
|
||
'shipping_date',
|
||
sa.TIMESTAMP(timezone=True),
|
||
nullable=True,
|
||
comment='When are the devices going to be ready \n for shipping?\n ',
|
||
),
|
||
sa.Column(
|
||
'invoice_number',
|
||
citext.CIText(),
|
||
nullable=True,
|
||
comment='The id of the invoice so they can be linked.',
|
||
),
|
||
sa.Column(
|
||
'price_id',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=True,
|
||
comment='The price set for this trade. \n If no price is set it is supposed that the trade was\n not payed, usual in donations.\n ',
|
||
),
|
||
sa.Column('to_id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.Column(
|
||
'confirms_id',
|
||
postgresql.UUID(as_uuid=True),
|
||
nullable=True,
|
||
comment='An organize action that this association confirms. \n \n For example, a ``Sell`` or ``Rent``\n can confirm a ``Reserve`` action.\n ',
|
||
),
|
||
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
|
||
sa.ForeignKeyConstraint(
|
||
['confirms_id'],
|
||
[f'{get_inv()}.organize.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['id'],
|
||
[f'{get_inv()}.action.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['price_id'],
|
||
[f'{get_inv()}.price.id'],
|
||
),
|
||
sa.ForeignKeyConstraint(
|
||
['to_id'],
|
||
[f'{get_inv()}.agent.id'],
|
||
),
|
||
sa.PrimaryKeyConstraint('id'),
|
||
schema=f'{get_inv()}',
|
||
)
|
||
# ### end Alembic commands ###
|
||
|
||
|
||
def downgrade():
|
||
# Drop table, indexes in inventory schema
|
||
op.drop_table('trade', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('visual_test', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_trackpad', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_power_adapter', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_keyboard', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_display_hinge', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_data_storage', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_connectivity', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_camera', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_bios', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test_audio', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('stress_test', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('step', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('snapshot_request', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('rate_computer', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('proof_function', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('proof_data_wipe', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('price', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('measure_battery', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('benchmark_with_rate', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('benchmark_data_storage', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('test', schema=f'{get_inv()}')
|
||
|
||
op.drop_constraint(
|
||
"snapshot_actions", "action", type_="foreignkey", schema=f'{get_inv()}'
|
||
)
|
||
op.drop_table('snapshot', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('rate', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('live', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('install', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('erase_basic', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('benchmark', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('sound_card', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('receive', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('ram_module', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('processor', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('organize', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('network_adapter', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('motherboard', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('migrate', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(
|
||
op.f('ix_membership_updated'), table_name='membership', schema=f'{get_inv()}'
|
||
)
|
||
op.drop_index(
|
||
op.f('ix_membership_created'), table_name='membership', schema=f'{get_inv()}'
|
||
)
|
||
op.drop_table('membership', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('graphic_card', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('display', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('deallocate', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('data_storage', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('battery', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('allocate', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(
|
||
'action_one_device_id_index',
|
||
table_name='action_with_one_device',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.drop_table('action_with_one_device', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('action_device', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('action_component', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(op.f('ix_tag_updated'), table_name='tag', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_tag_secondary'), table_name='tag', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_tag_created'), table_name='tag', schema=f'{get_inv()}')
|
||
op.drop_index('device_id_index', table_name='tag', schema=f'{get_inv()}')
|
||
op.drop_table('tag', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('proof_transfer', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('proof_reuse', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('proof_recycling', schema=f'{get_inv()}')
|
||
|
||
op.drop_index('path_gist', table_name='path', schema=f'{get_inv()}')
|
||
op.drop_index('path_btree', table_name='path', schema=f'{get_inv()}')
|
||
op.drop_index('lot_id_index', table_name='path', schema=f'{get_inv()}')
|
||
|
||
op.execute(f"DROP VIEW {get_inv()}.lot_device_descendants")
|
||
op.execute(f"DROP VIEW {get_inv()}.lot_parent")
|
||
|
||
op.drop_table('path', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('lot_device', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('individual', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(
|
||
op.f('ix_deliverynote_updated'),
|
||
table_name='deliverynote',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.drop_index(
|
||
op.f('ix_deliverynote_created'),
|
||
table_name='deliverynote',
|
||
schema=f'{get_inv()}',
|
||
)
|
||
op.drop_table('deliverynote', schema=f'{get_inv()}')
|
||
|
||
op.drop_index('parent_index', table_name='component', schema=f'{get_inv()}')
|
||
op.drop_table('component', schema=f'{get_inv()}')
|
||
|
||
op.drop_index('ix_type', table_name='action', schema=f'{get_inv()}')
|
||
op.drop_index('ix_parent_id', table_name='action', schema=f'{get_inv()}')
|
||
op.drop_index('ix_id', table_name='action', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_action_updated'), table_name='action', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_action_created'), table_name='action', schema=f'{get_inv()}')
|
||
op.drop_table('action', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(op.f('ix_proof_updated'), table_name='proof', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_proof_created'), table_name='proof', schema=f'{get_inv()}')
|
||
op.drop_table('proof', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('printer', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('organization', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('networking', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('monitor', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('mobile', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(op.f('ix_lot_updated'), table_name='lot', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_lot_created'), table_name='lot', schema=f'{get_inv()}')
|
||
op.drop_table('lot', schema=f'{get_inv()}')
|
||
|
||
op.drop_index('tags gist', table_name='device_search', schema=f'{get_inv()}')
|
||
op.drop_index('properties gist', table_name='device_search', schema=f'{get_inv()}')
|
||
op.drop_table('device_search', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('computer_accessory', schema=f'{get_inv()}')
|
||
|
||
op.drop_table('computer', schema=f'{get_inv()}')
|
||
|
||
op.drop_index('type_index', table_name='device', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_device_updated'), table_name='device', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_device_created'), table_name='device', schema=f'{get_inv()}')
|
||
op.drop_index('device_id', table_name='device', schema=f'{get_inv()}')
|
||
op.drop_table('device', schema=f'{get_inv()}')
|
||
|
||
op.drop_index(op.f('ix_agent_updated'), table_name='agent', schema=f'{get_inv()}')
|
||
op.drop_index(op.f('ix_agent_created'), table_name='agent', schema=f'{get_inv()}')
|
||
op.drop_index('agent_type', table_name='agent', schema=f'{get_inv()}')
|
||
op.drop_table('agent', schema=f'{get_inv()}')
|
||
|
||
# Drop table, indexes in common schema
|
||
op.drop_table('user_inventory', schema='common')
|
||
|
||
op.drop_index(op.f('ix_common_user_updated'), table_name='user', schema='common')
|
||
op.drop_index(op.f('ix_common_user_created'), table_name='user', schema='common')
|
||
op.drop_table('user', schema='common')
|
||
|
||
op.drop_table('manufacturer', schema='common')
|
||
|
||
op.drop_index(
|
||
op.f('ix_common_inventory_updated'), table_name='inventory', schema='common'
|
||
)
|
||
op.drop_index(
|
||
op.f('ix_common_inventory_created'), table_name='inventory', schema='common'
|
||
)
|
||
op.drop_index('id_hash', table_name='inventory', schema='common')
|
||
op.drop_table('inventory', schema='common')
|
||
|
||
# Drop sequences
|
||
op.execute(f"DROP SEQUENCE {get_inv()}.device_seq;")
|
||
|
||
# Drop functions
|
||
op.execute(f"DROP FUNCTION IF EXISTS {get_inv()}.add_edge")
|
||
op.execute(f"DROP FUNCTION IF EXISTS {get_inv()}.delete_edge")
|
||
|
||
# Drop Create Common schema
|
||
op.execute("drop schema common")
|
||
op.execute(f"drop schema {get_inv()}")
|