Files
lego-instructions-manager/migrate_add_parts_catalogue.py
T

53 lines
1.7 KiB
Python

"""
Migration: local parts catalogue and tape printing.
Creates part_catalog_categories, part_catalog_items and part_catalog_syncs.
Safe to run more than once - every step checks first.
python migrate_add_parts_catalogue.py
You do not strictly need this: app/services/schema_upgrade.py creates all
three at boot. It exists so you can make the database change deliberately,
and see what it did, before restarting the service.
It does NOT download the catalogue. Press "Update catalogue" on
/admin/labels/catalog once LIM is running - that fetches about 60,000 parts
from Rebrickable in the background.
Created by: Jess Rogerson (yelling commands at Claude.AI)
"""
import os
import sys
from sqlalchemy import inspect
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app import create_app, db # noqa: E402
from app.models.part_catalog_item import (CatalogSync, # noqa: E402
PartCatalogCategory,
PartCatalogItem)
def main():
app = create_app(os.environ.get('FLASK_CONFIG', 'default'))
with app.app_context():
existing = set(inspect(db.engine).get_table_names())
for model in (PartCatalogCategory, PartCatalogItem, CatalogSync):
if model.__tablename__ in existing:
print(f' = table {model.__tablename__} already present')
else:
model.__table__.create(db.engine, checkfirst=True)
print(f' + created table {model.__tablename__}')
print(f'\n catalogue rows: {PartCatalogItem.query.count():,}')
print('\nDone.')
print('Next: open /admin/labels/catalog and press "Update catalogue".')
if __name__ == '__main__':
main()