migrations and get_from_db
This commit is contained in:
parent
fac6380bcf
commit
756925d657
|
@ -0,0 +1,67 @@
|
||||||
|
"""add hash hid to device
|
||||||
|
|
||||||
|
Revision ID: 93daff872771
|
||||||
|
Revises: 564952310b17
|
||||||
|
Create Date: 2022-12-13 10:14:45.500087
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import context, op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
import citext
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '93daff872771'
|
||||||
|
down_revision = '564952310b17'
|
||||||
|
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_data():
|
||||||
|
con = op.get_bind()
|
||||||
|
sql = f"update {get_inv()}.computer set user_trusts='t';"
|
||||||
|
con.execute(sql)
|
||||||
|
|
||||||
|
dev_sql = f"select id, hid from {get_inv()}.device;"
|
||||||
|
for d in con.execute(dev_sql):
|
||||||
|
if not d.hid:
|
||||||
|
continue
|
||||||
|
dev_id = d.id
|
||||||
|
chid = hashlib.sha3_256(d.hid.encode('utf-8')).hexdigest()
|
||||||
|
sql = f"update {get_inv()}.device set chid={chid} where id={dev_id};"
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column(
|
||||||
|
'computer',
|
||||||
|
sa.Column('user_trusts', sa.Boolean(), default=True, nullable=True),
|
||||||
|
schema=f'{get_inv()}',
|
||||||
|
)
|
||||||
|
|
||||||
|
op.add_column(
|
||||||
|
'device',
|
||||||
|
sa.Column('chid', citext.CIText(), nullable=True),
|
||||||
|
schema=f'{get_inv()}',
|
||||||
|
)
|
||||||
|
|
||||||
|
upgrade_data()
|
||||||
|
|
||||||
|
op.alter_column(
|
||||||
|
'computer',
|
||||||
|
'user_trusts',
|
||||||
|
nullable=False,
|
||||||
|
schema=f'{get_inv()}'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column('computer', 'user_trusts', schema=f'{get_inv()}')
|
||||||
|
op.drop_column('device', 'chid', schema=f'{get_inv()}')
|
|
@ -1,6 +1,5 @@
|
||||||
import copy
|
import copy
|
||||||
import difflib
|
import difflib
|
||||||
from contextlib import suppress
|
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from typing import Iterable, Set
|
from typing import Iterable, Set
|
||||||
|
|
||||||
|
@ -16,13 +15,18 @@ from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.resources.action.models import Remove
|
from ereuse_devicehub.resources.action.models import Remove
|
||||||
from ereuse_devicehub.resources.device.models import (
|
from ereuse_devicehub.resources.device.models import (
|
||||||
Component,
|
Component,
|
||||||
Computer,
|
|
||||||
DataStorage,
|
DataStorage,
|
||||||
Device,
|
Device,
|
||||||
Placeholder,
|
Placeholder,
|
||||||
)
|
)
|
||||||
from ereuse_devicehub.resources.tag.model import Tag
|
from ereuse_devicehub.resources.tag.model import Tag
|
||||||
|
|
||||||
|
try:
|
||||||
|
from modules.device.models import Computer
|
||||||
|
except:
|
||||||
|
from ereuse_devicehub.resources.device.models import Computer
|
||||||
|
|
||||||
|
|
||||||
DEVICES_ALLOW_DUPLICITY = [
|
DEVICES_ALLOW_DUPLICITY = [
|
||||||
'RamModule',
|
'RamModule',
|
||||||
'Display',
|
'Display',
|
||||||
|
@ -200,22 +204,7 @@ class Sync:
|
||||||
assert all(
|
assert all(
|
||||||
inspect(tag).transient for tag in device.tags
|
inspect(tag).transient for tag in device.tags
|
||||||
), 'Tags cannot be synced from DB'
|
), 'Tags cannot be synced from DB'
|
||||||
db_device = None
|
db_device = device.get_from_db()
|
||||||
if isinstance(device, Computer):
|
|
||||||
# first search by uuid
|
|
||||||
if device.system_uuid:
|
|
||||||
with suppress(ResourceNotFound):
|
|
||||||
db_device = Computer.query.filter_by(
|
|
||||||
system_uuid=device.system_uuid,
|
|
||||||
owner_id=g.user.id,
|
|
||||||
active=True,
|
|
||||||
placeholder=None,
|
|
||||||
).one()
|
|
||||||
# if no there are any Computer by uuid search by hid
|
|
||||||
if not db_device:
|
|
||||||
db_device = device.get_from_db()
|
|
||||||
elif device.hid:
|
|
||||||
db_device = device.get_from_db()
|
|
||||||
|
|
||||||
if db_device and db_device.allocated:
|
if db_device and db_device.allocated:
|
||||||
raise ResourceNotFound('device is actually allocated {}'.format(device))
|
raise ResourceNotFound('device is actually allocated {}'.format(device))
|
||||||
|
|
Reference in a new issue