Projekt

Obecné

Profil

Stáhnout (1.77 KB) Statistiky
| Větev: | Tag: | Revize:
1
import logging
2
import os
3
import time
4

    
5
from aswi2021vochomurka.model.Message import Message
6
from typing import TextIO
7

    
8
trans = str.maketrans({
9
    "/": "_",
10
    "\\": "_",
11
    ":": "_",
12
    "\"": "_",
13
    "$": "_",
14
    "*": "_",
15
    ".": "_"})
16

    
17

    
18
def create_filename(message: Message) -> str:
19
    """
20
    Create file name based on message data
21
    :param message: message
22
    :return: filename
23
    """
24
    name = "data/" + message.topic.translate(trans) + "/" + message.date + "_" + message.time + ".csv"
25
    return name
26

    
27

    
28
class FileManager:
29
    """
30
    Helper class for writing incoming message to files
31
    Each topic has created own instance of this class
32
    """
33
    topic: str
34
    lastUpdate: float
35
    file: TextIO
36

    
37
    def __init__(self, topic: str, message: Message):
38
        """
39
        Constructing new FileManager will create new file and write first message
40
        :param topic: topic
41
        :param message: message
42
        :except when creating new file fails
43
        """
44
        self.topic = topic
45
        logging.debug('opening file ' + self.topic)
46

    
47
        try:
48
            filename = create_filename(message)
49
            os.makedirs(os.path.dirname(filename), exist_ok=True)
50
            self.file = open(filename, "w+")
51
        except Exception as error:
52
            logging.warning(error)
53
            raise error
54
        self.write(message)
55

    
56
    def write(self, message: Message):
57
        """
58
        Append message to file
59
        :param message: message
60
        """
61
        self.file.write(message.date + ";" + message.time + ";" + str(message.index) + ";" + str(message.value) + "\n")
62
        self.lastUpdate = time.time()
63

    
64
    def close(self):
65
        """
66
        Close file
67
        """
68
        logging.debug('closing file ' + self.topic)
69
        self.file.flush()
70
        self.file.close()
(2-2/6)