Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 5678036c

Přidáno uživatelem David Friesecký před téměř 4 roky(ů)

Re #8880 - Edited config file (inserted RootDir)
- improved creating of logs and db directories

Zobrazit rozdíly:

app.py
14 14
    handle_generic_exception
15 15
from src.exceptions.database_exception import DatabaseException
16 16
from src.services.cryptography import CryptographyService, CryptographyException
17
from src.utils import logger
17 18
from src.utils.logger import Logger
18 19

  
19 20
app = Flask(__name__)
......
126 127
    FlaskInjector(app=application, modules=modules)
127 128

  
128 129
    config = injector.get(Configuration)
129
    configuration.configure_logging(config)
130
    logger.configure_logging(config)
130 131

  
131 132
    Logger.info(f"Using configuration file: {config.config_file}")
132 133

  
src/config/configuration.py
2 2

  
3 3
import configparser
4 4
import logging
5
from logging import handlers
6 5

  
7
from injector import singleton, inject
6
from injector import singleton
8 7

  
9
from src.constants import DEFAULT_CONNECTION_STRING, TEST_DATABASE_FILE, DEFAULT_SERVER_BASE_URL, LOG_NAME, \
10
    LOG_DIR, DEFAULT_LOG_LEVEL, LOG_FILENAME
11
from src.constants import LOG_FILE_LOCATION, LOG_FORMAT
12
from src.utils.logger import Logger
8
from src.constants import DEFAULT_CONNECTION_STRING, TEST_DATABASE_FILE, DEFAULT_SERVER_BASE_URL, \
9
    DEFAULT_LOG_LEVEL, DEFAULT_ROOT_DIR
13 10

  
14 11
DATABASE_SECTION = "Database"
15 12
DATABASE_CONNECTION_STRING = "ConnectionString"
......
17 14
SERVER_SECTION = "Server"
18 15
SERVER_BASE_URL = "ServerBaseURL"
19 16
SERVER_LOG_LEVEL = "LogLevel"
17
SERVER_ROOT_DIR = "RootDir"
20 18

  
21 19
LOG_LEVEL_MAPPING = {
22 20
    "DEBUG": logging.DEBUG,
......
42 40
        self.connection_string = DEFAULT_CONNECTION_STRING
43 41
        self.base_server_url = DEFAULT_SERVER_BASE_URL
44 42
        self.log_level = DEFAULT_LOG_LEVEL
43
        self.root_dir = DEFAULT_ROOT_DIR
45 44

  
46 45

  
47 46
def test_configuration():
......
79 78
            app_configuration.base_server_url = server_config.get(SERVER_BASE_URL,
80 79
                                                                  DEFAULT_SERVER_BASE_URL)
81 80
            app_configuration.log_level = server_config.get(SERVER_LOG_LEVEL, DEFAULT_LOG_LEVEL)
81
            app_configuration.root_dir = server_config.get(SERVER_ROOT_DIR, DEFAULT_ROOT_DIR)
82 82

  
83 83
    binder.bind(Configuration, to=app_configuration, scope=singleton)
84

  
85

  
86
def configure_logging(config: Configuration):
87
    if not os.path.exists(LOG_DIR):
88
        os.makedirs(LOG_DIR)
89

  
90
    handler = logging.handlers.TimedRotatingFileHandler(
91
        os.path.join(LOG_DIR, LOG_FILENAME),
92
        when='H', interval=1)
93
    formatter = logging.Formatter(LOG_FORMAT)
94
    handler.setFormatter(formatter)
95

  
96
    # set log level based on config file
97
    app_logger = logging.getLogger(LOG_NAME)
98
    app_logger.setLevel(LOG_LEVEL_MAPPING.get(config.log_level, logging.DEBUG))
99

  
100
    app_logger.addHandler(handler)
101

  
102
    # TODO check is 'valid'
103
    log = logging.getLogger('werkzeug')
104
    log.disabled = True
src/config/connection_provider.py
5 5
from injector import Module, provider, singleton
6 6

  
7 7
from src.config.configuration import Configuration
8
from src.constants import DB_DIR
8
from src.constants import DB_DIR, TEST_DATABASE_FILE
9 9
from src.db.init_queries import DEFAULT_VALUES_SQL, CHECK_SCHEMA_SQL
10
from src.db.setup_database import setup_database
10
from src.utils.file_anchor import FileAnchor
11 11
from src.utils.logger import Logger
12 12

  
13 13

  
......
28 28
        Logger.debug(f"Creating a database connection [{configuration.connection_string}].")
29 29

  
30 30
        try:
31
            if not os.path.exists(DB_DIR):
32
                os.makedirs(DB_DIR)
31
            if not os.path.exists(FileAnchor(configuration.root_dir, DB_DIR).shortest_relative_path()) and \
32
                    configuration.connection_string != TEST_DATABASE_FILE:
33
                os.makedirs(FileAnchor(configuration.root_dir, DB_DIR).shortest_relative_path())
33 34

  
34 35
            co = sqlite3.connect(database=configuration.connection_string, check_same_thread=False)
35 36
            cu = co.cursor()
src/constants.py
1
from src.utils.file_anchor import FileAnchor
2

  
1
# Database
3 2
INMEMORY_DATABASE_FILE = ":memory:"
4 3
TEST_DATABASE_FILE = INMEMORY_DATABASE_FILE
5 4
DB_DIR = "db"
6
DATABASE_FILE = f"{DB_DIR}/database_sqlite.db"
7
DATABASE_FILE_LOCATION = FileAnchor("aswi2021jmsd", DATABASE_FILE)
8 5
DATETIME_FORMAT = "%d.%m.%Y %H:%M:%S"
9 6

  
7
# Logging
10 8
LOG_DIR = "logs"
11 9
LOG_FILENAME = "application.log"
12
LOG_FILE = f"{LOG_DIR}/{LOG_FILENAME}"
13
LOG_FILE_LOCATION = FileAnchor("aswi2021jmsd", LOG_FILE)
14 10
LOG_FORMAT = "%(levelname)-8s %(asctime)s - %(message)s"
15 11
LOG_NAME = "app_logger"
16 12

  
......
69 65
DEFAULT_CONNECTION_STRING = "db/database_sqlite.db"
70 66
DEFAULT_SERVER_BASE_URL = "http://localhost"
71 67
DEFAULT_LOG_LEVEL = "DEBUG"
68
DEFAULT_ROOT_DIR = "aswi2021jmsd"
72 69

  
73 70
# available certificate states and revocation reasons
74 71
CERTIFICATE_STATES = {"valid", "revoked"}
src/db/setup_database.py
1
import os
2
import sqlite3
3
from pathlib import Path
4

  
5
from src.constants import DATABASE_FILE_LOCATION, DB_DIR
6
from src.db.init_queries import SCHEMA_SQL, DEFAULT_VALUES_SQL
7
from src.utils.logger import Logger
8

  
9

  
10
def setup_database():
11
    Logger.debug(f"Database is setting.")
12

  
13
    try:
14
        # TODO improve creating DB dir
15
        if not os.path.exists(DB_DIR):
16
            os.makedirs("../../" + DB_DIR)
17

  
18
        # TODO improve creating DB file (now via FileAnchor)
19
        co = sqlite3.connect(DATABASE_FILE_LOCATION.shortest_relative_path())
20
        cu = co.cursor()
21
        cu.executescript(SCHEMA_SQL)
22
        cu.executescript(DEFAULT_VALUES_SQL)
23
    except sqlite3.Error as e:
24
        Logger.error(f"Unknown error during database setting.")
25
        raise e
26

  
27
    return co
28

  
29

  
30
if __name__ == '__main__':
31
    setup_database()
src/utils/logger.py
1 1
import inspect
2 2
import logging
3
from logging import handlers
4
import os
3 5
from pathlib import Path
4 6

  
5
from src.constants import LOG_NAME
7
from src.config.configuration import Configuration, LOG_LEVEL_MAPPING
8
from src.constants import LOG_NAME, LOG_DIR, LOG_FILENAME, LOG_FORMAT
9
from src.utils.file_anchor import FileAnchor
10

  
11

  
12
def configure_logging(config: Configuration):
13
    if not os.path.exists(FileAnchor(config.root_dir, LOG_DIR).shortest_relative_path()):
14
        os.makedirs(FileAnchor(config.root_dir, LOG_DIR).shortest_relative_path())
15

  
16
    handler = logging.handlers.TimedRotatingFileHandler(
17
        os.path.join(FileAnchor(config.root_dir, LOG_DIR).shortest_relative_path(), LOG_FILENAME),
18
        when='H', interval=1)
19
    formatter = logging.Formatter(LOG_FORMAT)
20
    handler.setFormatter(formatter)
21

  
22
    # set log level based on config file
23
    app_logger = logging.getLogger(LOG_NAME)
24
    app_logger.setLevel(LOG_LEVEL_MAPPING.get(config.log_level, logging.DEBUG))
25

  
26
    app_logger.addHandler(handler)
27

  
28
    log = logging.getLogger('werkzeug')
29
    log.disabled = True
6 30

  
7 31

  
8 32
class Logger:
test_server.cfg
4 4
[Server]
5 5
ServerBaseURL=http://78.128.250.101
6 6
LogLevel=DEBUG
7
RootDir=app

Také k dispozici: Unified diff