From ace1b1ed852f2035c8356e0f471f6941bd787583 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Sat, 26 Jun 2021 10:51:39 +0200 Subject: [PATCH] seed entire profile --- README.md | 2 +- ki/actions/__init__.py | 1 + ki/actions/seed.py | 83 ++++++++++++++++++++++++++++++++ ki/commands.py | 41 +++------------- ki/test/test_login_endpoint.py | 10 ++-- ki/test/test_profile_endpoint.py | 29 +++-------- ki/test/test_skills_endpoint.py | 10 ++-- 7 files changed, 112 insertions(+), 64 deletions(-) create mode 100644 ki/actions/__init__.py create mode 100644 ki/actions/seed.py diff --git a/README.md b/README.md index 3e66ca0..4410caa 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ cp env.dev .env pipenv install --dev pipenv shell flask db upgrade -flask seed +flask seed --dev flask run ``` diff --git a/ki/actions/__init__.py b/ki/actions/__init__.py new file mode 100644 index 0000000..fb33903 --- /dev/null +++ b/ki/actions/__init__.py @@ -0,0 +1 @@ +from ki.actions.seed import seed # noqa diff --git a/ki/actions/seed.py b/ki/actions/seed.py new file mode 100644 index 0000000..8be1889 --- /dev/null +++ b/ki/actions/seed.py @@ -0,0 +1,83 @@ +import csv +import logging + +from app import app, db +from ki.models import Address, Contact, ContactType, Language, Skill, Profile, ProfileLanguage, ProfileSkill, User + + +def seed(dev: bool): + skill_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/skills.csv" + + logging.info("importing skills") + + with open(skill_seed_file_path) as skills_file: + skills_csv_reader = csv.DictReader(skills_file) + + for skill in skills_csv_reader: + id = int(skill["id"]) + db_skill = Skill.query.get(id) + + if db_skill is None: + db.session.add(Skill(id=int(skill["id"]), name=skill["name"])) + + logging.info("importing languages") + + iso_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/iso_639_1.csv" + + with open(iso_seed_file_path) as iso_file: + iso_csv_reader = csv.DictReader(iso_file) + + for iso in iso_csv_reader: + id = iso["639-1"] + db_language = Language.query.get(id) + + if db_language is None: + db.session.add(Language(id=iso["639-1"], name=iso["Sprache"])) + + if dev: + logging.info("seeding peter :)") + + peter = User(auth_id="peter") + db.session.add(peter) + + peters_profile = Profile(nickname="peternichtlustig", + pronouns="Herr Dr. Dr.", + volunteerwork="Gartenverein", + freetext="Ich mag Kaffee", + user=peter) + db.session.add(peters_profile) + + matrix_type = ContactType(name="Matrix") + db.session.add(matrix_type) + + matrix_contact = Contact(profile=peters_profile, + contacttype=matrix_type, + content="@peter:wtf-eg.de") + db.session.add(matrix_contact) + + peters_address = Address(name="Peter Nichtlustig", + street="Waldweg", + house_number="23i", + additional="Hinterhaus", + postcode="13337", + city="Bielefeld", + country="Deutschland", + profile=peters_profile) + db.session.add(peters_address) + + peters_python_skill = ProfileSkill(profile=peters_profile, + skill_id=3, + level=5) + db.session.add(peters_python_skill) + + peter_de = ProfileLanguage(profile=peters_profile, + language_id="de", + level=5) + db.session.add(peter_de) + + peter_fr = ProfileLanguage(profile=peters_profile, + language_id="fr", + level=3) + db.session.add(peter_fr) + + db.session.commit() diff --git a/ki/commands.py b/ki/commands.py index 3382708..c20c71e 100644 --- a/ki/commands.py +++ b/ki/commands.py @@ -1,39 +1,10 @@ -import csv +import click -from ki.models import Language, Skill -from app import app, db - - -def seed(): - skill_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/skills.csv" - - print("importing skills") - - with open(skill_seed_file_path) as skills_file: - skills_csv_reader = csv.DictReader(skills_file) - - for skill in skills_csv_reader: - id = int(skill["id"]) - db_skill = Skill.query.get(id) - - if db_skill is None: - db.session.add(Skill(id=int(skill["id"]), name=skill["name"])) - - iso_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/iso_639_1.csv" - - with open(iso_seed_file_path) as iso_file: - iso_csv_reader = csv.DictReader(iso_file) - - for iso in iso_csv_reader: - id = iso["639-1"] - db_language = Language.query.get(id) - - if db_language is None: - db.session.add(Language(id=iso["639-1"], name=iso["Sprache"])) - - db.session.commit() +from app import app +from ki.actions import seed @app.cli.command("seed") -def seed_command(): - seed() +@click.option("--dev", is_flag=True) +def seed_command(dev): + seed(dev) diff --git a/ki/test/test_login_endpoint.py b/ki/test/test_login_endpoint.py index 86c48c2..314de11 100644 --- a/ki/test/test_login_endpoint.py +++ b/ki/test/test_login_endpoint.py @@ -2,8 +2,8 @@ from alembic import command import json import unittest -from app import app, migrate -from ki.commands import seed +from app import app, db, migrate +from ki.actions import seed class TestLoginEndpoint(unittest.TestCase): @@ -16,7 +16,11 @@ class TestLoginEndpoint(unittest.TestCase): config = migrate.get_config() command.upgrade(config, "head") - seed() + seed(True) + + def tearDown(self): + db.drop_all() + db.engine.dispose() def test_login(self): response1_data = self.login() diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index 44ea8ed..2295116 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -3,8 +3,8 @@ import unittest import json from app import app, db, migrate -from ki.commands import seed -from ki.models import Profile, User +from ki.actions import seed +from ki.models import User class TestProfileEndpoint(unittest.TestCase): @@ -15,22 +15,16 @@ class TestProfileEndpoint(unittest.TestCase): self.client = app.test_client() with app.app_context(): - db.drop_all() - db.engine.dispose() config = migrate.get_config() command.upgrade(config, "head") - seed() + seed(True) def tearDown(self): db.drop_all() db.engine.dispose() def test_create_profile(self): - user = User(auth_id="peter") - db.session.add(user) - db.session.commit() - login_data = {"username": "peter", "password": "geheim"} login_response = self.client.post("/users/login", data=json.dumps(login_data), @@ -62,15 +56,6 @@ class TestProfileEndpoint(unittest.TestCase): self.assertEqual("Hallo", profile.freetext) def test_get_profile(self): - user = User(auth_id="peter") - db.session.add(user) - - profile = Profile(user=user) - profile.nickname = "Popeter" - db.session.add(profile) - - db.session.commit() - login_data = {"username": "peter", "password": "geheim"} login_response = self.client.post("/users/login", data=json.dumps(login_data), @@ -89,10 +74,10 @@ class TestProfileEndpoint(unittest.TestCase): self.assertEqual( response.json, { "profile": { - "freetext": "", - "nickname": "Popeter", - "pronouns": "", - "volunteerwork": "" + "freetext": "Ich mag Kaffee", + "nickname": "peternichtlustig", + "pronouns": "Herr Dr. Dr.", + "volunteerwork": "Gartenverein" } }) diff --git a/ki/test/test_skills_endpoint.py b/ki/test/test_skills_endpoint.py index 9287c65..57c9cb5 100644 --- a/ki/test/test_skills_endpoint.py +++ b/ki/test/test_skills_endpoint.py @@ -1,8 +1,8 @@ from alembic import command import unittest -from app import app, migrate -from ki.commands import seed +from app import app, db, migrate +from ki.actions import seed class TestSkillsEndpoint(unittest.TestCase): @@ -15,7 +15,11 @@ class TestSkillsEndpoint(unittest.TestCase): config = migrate.get_config() command.upgrade(config, "head") - seed() + seed(True) + + def tearDown(self): + db.drop_all() + db.engine.dispose() def test_skills_options(self): response = self.client.options("/skills")