diff options
| -rw-r--r-- | initialize_database.py | 150 | 
1 files changed, 150 insertions, 0 deletions
| diff --git a/initialize_database.py b/initialize_database.py new file mode 100644 index 0000000..3fad767 --- /dev/null +++ b/initialize_database.py @@ -0,0 +1,150 @@ +# -*- mode: python; -*- + +import os +from datetime import datetime +import app.models as model +from app import create_app, db + + +app = create_app() +db_name = "test.db" +app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + db_name +db_path = f"app/{db_name}" + + +if os.path.exists(db_path): +    os.remove(db_path) +    print(f"Existing database {db_path} has been deleted successfully.\n") +else: +    print(f"Database {db_path} does not exist yet, creating now.\n") + +with app.app_context(): +    db.create_all() + + +modules = [ +    { +        "name": "calculator", +        "description": "Determine fertilizer recipes based on your farm model and desired crops for the season.", +    }, +    { +        "name": "creator", +        "description": "Create a model of your farm and get an idea of baseline water usage.", +    }, +    { +        "name": "customers", +        "description": "View and add customers.", +    }, +    { +        "name": "ferti", +        "description": "Record all your measurements and plot trends.", +    }, +    { +        "name": "invoices", +        "description": "Create invoices populated with customer and order informations.", +    }, +    { +        "name": "orders", +        "description": "Log and filter orders and their payment status.", +    }, +    { +        "name": "products", +        "description": "View and add products made by the farm.", +    }, +    { +        "name": "stock", +        "description": "Keep track of your inventory.", +    }, +] + + +users = [ +    { +        # "primary_key": +        "username": "dingles", +        "hashed_password": "foo", +        "name_first": "Dingles", +        "name_last": "Dingleberry", +        "email": "dingleberryd@example.com", +        "phone_mobile": 888_420_8888, +        "phone_alternative": 694_206_9420, +    }, +    { +        # "primary_key": +        "username": "dingles", +        "hashed_password": "foo", +        "name_first": "Dingles", +        "name_last": "Dingleberry", +        "email": "dingleberryd@example.com", +        "phone_mobile": 888_420_8888, +        "phone_alternative": 694_206_9420, +    }, +    { +        # "primary_key": +        "username": "dingles", +        "hashed_password": "foo", +        "name_first": "Dingles", +        "name_last": "Dingleberry", +        "email": "dingleberryd@example.com", +        "phone_mobile": 888_420_8888, +        "phone_alternative": 694_206_9420, +    }, +    { +        # "primary_key": +        "username": "dingles", +        "hashed_password": "foo", +        "name_first": "Dingles", +        "name_last": "Dingleberry", +        "email": "dingleberryd@example.com", +        "phone_mobile": 888_420_8888, +        "phone_alternative": 694_206_9420, +    }, +    { +        # "primary_key": +        "username": "dingles", +        "hashed_password": "foo", +        "name_first": "Dingles", +        "name_last": "Dingleberry", +        "email": "dingleberryd@example.com", +        "phone_mobile": 888_420_8888, +        "phone_alternative": 694_206_9420, +    }, +] + +customers = 5 * [ +    { +        "name": "Intermarché", +        "name_alternative": "Le grand magasin", +        "code_customer": "101010", +        "code_accounting": "foobar200", +        "address": "123 rue du Marché", +        "postal_code": "01630", +        "city": "Challex", +        "country": "France", +        "phone": 888_000_8888, +        "website": "lesupermarché@example.com", +        "email": "lesupermarché@example.com", +        "professional_id_1": "1", +        "professional_id_2": "2", +        "tax_id": "IMPOTS", +        "payment_terms": "immédiatement", +    } +] + + +def populate_table(table, items): +    """The table is a class inheriting from db.Model. The items are a +    list of dictionaries each representing an entry.""" +    for item in items: +        new_record = table(**item) +        print(f"Adding {item}") +        db.session.add(new_record) +        db.session.commit() + +    print(f"Successfully committed all items to {table.__tablename__}.\n") + + +with app.app_context(): +    populate_table(model.Module, modules) +    populate_table(model.User, users) +    populate_table(model.Customer, customers) | 
