diff --git a/README.md b/README.md index 05a6ef40..a9ba2b7b 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ export provider=vbox/vmware ### Backend 1. Установка необходимых пакетов: ```bash -pyhton -m venv .venv +python -m venv .venv source .venv/bin/activate pip install -r back/requirements.txt ``` diff --git a/front/src/miminet_model.py b/front/src/miminet_model.py index 1b59d313..2cb2869b 100644 --- a/front/src/miminet_model.py +++ b/front/src/miminet_model.py @@ -1,4 +1,7 @@ from os import urandom +import random +import json +from datetime import datetime from flask_login import UserMixin from flask_sqlalchemy import SQLAlchemy @@ -10,6 +13,25 @@ import psycopg2 +def generate_cosmic_name(): + """Generates unique cosmic object name with timestamp""" + try: + with open("static/cosmic_names.json", "r", encoding="utf-8") as f: + config = json.load(f) + except (FileNotFoundError, json.JSONDecodeError, KeyError): + config = { + "cosmic_objects": ["Звезда", "Галактика", "Планета"], + "prefixes": ["", "XB-", "NGC-"], + } + + timestamp = datetime.now().strftime("%d%m%y") + random_num = random.randint(100, 999) + cosmic_type = random.choice(config["cosmic_objects"]) + prefix = random.choice(config["prefixes"]) + + return f"{cosmic_type} {prefix}{timestamp}{random_num}" + + convention = { "ix": "ix_%(column_0_label)s", "uq": "uq_%(table_name)s_%(column_0_name)s", @@ -44,7 +66,7 @@ class Network(db.Model): # type:ignore[name-defined] author_id = db.Column(BigInteger, ForeignKey("user.id"), nullable=False) guid = db.Column(Text, nullable=False, unique=True) - title = db.Column(Text, default="Новая сеть", nullable=False) + title = db.Column(Text, default=lambda: generate_cosmic_name(), nullable=False) description = db.Column(Text, default="", nullable=True) diff --git a/front/src/static/cosmic_names.json b/front/src/static/cosmic_names.json new file mode 100644 index 00000000..6c78d5c8 --- /dev/null +++ b/front/src/static/cosmic_names.json @@ -0,0 +1,29 @@ +{ + "cosmic_objects": [ + "Комета", + "Звезда", + "Галактика", + "Туманность", + "Спутник", + "Вселенная", + "Астероид", + "Планета", + "Метеорит", + "Квазар", + "Пульсар", + "Чёрная дыра", + "Суперновая", + "Созвездие", + "Космодром", + "Телескоп", + "Ракета", + "Орбита", + "Экзопланета", + "Космический корабль", + "Межзвёздный объект", + "Космическая станция", + "Темная материя", + "Космический зонд" + ], + "prefixes": ["", "XB-", "NGC-", "HD-", "M-", "IC-", "PG-", "PSR-"] +} diff --git a/front/tests/test_network_menu.py b/front/tests/test_network_menu.py index 1f3119b6..92b03d69 100644 --- a/front/tests/test_network_menu.py +++ b/front/tests/test_network_menu.py @@ -25,13 +25,15 @@ def test_my_networks_button_press(self, selenium: Chrome): assert selenium.current_url == HOME_PAGE def test_new_network_existence(self, selenium: MiminetTester, empty_network: str): - """Checks if the created network exists""" + """Checks if the created network exists and has a unique generated name""" selenium.get(empty_network) # open new network by URL network_name = selenium.find_element( By.CSS_SELECTOR, Location.Network.TITLE_LABEL.selector ).text - assert network_name == "Новая сеть" + assert network_name != "" + assert network_name != "Новая сеть" + assert len(network_name.split()) >= 1 def test_new_network_open(self, selenium: MiminetTester, empty_network: str): """Checks is it possible to open new network via home menu"""