from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent.parent DATA_DIR = BASE_DIR / "data" TABLE_PARTICIPANTS = "participants" TABLE_TOPICS = "topics" TABLE_MESSAGES = "messages" PARTICIPANTS_FILE = DATA_DIR / "participants.txt" TOPICS_FILE = DATA_DIR / "topics.txt" MESSAGES_FILE = DATA_DIR / "messages.txt" PARTICIPANT_SEPARATOR = "|" PARTICIPANT_EXPECTED_PARTS = 6 TOPIC_SEPARATOR = "|" TOPIC_EXPECTED_PARTS = 6 TOPIC_LIST_SEPARATOR = ";" TOPIC_INNER_SEPARATOR = "," TOPIC_MESSAGE_PART_SEPARATOR = "^" MESSAGE_SEPARATOR = "|" MESSAGE_EXPECTED_PARTS = 6 ENCODING_UTF8 = "utf-8" ENCODING_ASCII = "ascii" NEWLINE = "\n" ALPHABET = ( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ """ ) NAME_MIN_LENGTH = 1 NAME_MAX_LENGTH = 100 RATING_MIN_VALUE = 0 TOPIC_TITLE_MIN_LENGTH = 1 TOPIC_TITLE_MAX_LENGTH = 200 TOPIC_DESCRIPTION_MIN_LENGTH = 1 TOPIC_DESCRIPTION_MAX_LENGTH = 1000 TOPIC_MESSAGE_MIN_LENGTH = 1 TOPIC_MESSAGE_MAX_LENGTH = 2000 PARTICIPANT_PARSE_EMPTY_ERROR = "Cannot parse empty participant line" PARTICIPANT_PARSE_INVALID_ERROR = "Invalid participant line format" TOPIC_PARSE_EMPTY_ERROR = "Cannot parse empty topic line" TOPIC_PARSE_INVALID_ERROR = "Invalid topic line format" MESSAGE_PARSE_EMPTY_ERROR = "Cannot parse empty message line" MESSAGE_PARSE_INVALID_ERROR = "Invalid message line format" PARTICIPANT_NOT_FOUND_MESSAGE = "Participant not found" TOPIC_NOT_FOUND_MESSAGE = "Topic not found" MESSAGE_NOT_FOUND_MESSAGE = "Message not found" UNKNOWN_PARTICIPANT_NAME = "Unknown participant" UNKNOWN_TOPIC_TITLE = "Unknown topic" APP_TITLE = "Forum Storage API" PARTICIPANTS_ROUTE_PREFIX = "/participants" TOPICS_ROUTE_PREFIX = "/topics" MESSAGES_ROUTE_PREFIX = "/messages" PARTICIPANTS_TAG = "participants" TOPICS_TAG = "topics" MESSAGES_TAG = "messages" HTTP_STATUS_CREATED = 201 FORBIDDEN_WORDS = ["spam", "hate", "violence", "abuse", "illegal"] FORBIDDEN_WORDS_MESSAGE = "Message contains forbidden words" DATA_DIR.mkdir(parents=True, exist_ok=True) PARTICIPANTS_FILE.touch(exist_ok=True) TOPICS_FILE.touch(exist_ok=True) MESSAGES_FILE.touch(exist_ok=True)