-
Notifications
You must be signed in to change notification settings - Fork 0
Dokumentacja techniczna kodu aplikacji
plik pełni rolę punktu wejścia do aplikacji. Jest odpowiedzialny za inicjalizację wszystkich niezbędnych komponentów, zarządzanie danymi oraz uruchamianie interfejsu użytkownika.
- Importy: MessagingService.senders i MessagingService.readers: Moduły obsługujące wysyłanie i odbieranie wiadomości. UserInfo.LoginService: Moduł do zarządzania procesem logowania. group_controller: Kontroler grup, który odpowiada za operacje na grupach użytkowników. models: Moduł zawierający definicje modeli danych, takich jak szablony, załączniki, kontakty, wiadomości, grupy itp. Triggers.triggers: Moduł definiujący wyzwalacze, które uruchamiają określone akcje w aplikacji. interface: Interfejs użytkownika, który umożliwia interakcję z aplikacją. DataSources.dataSources: Moduł odpowiedzialny za obsługę źródeł danych, w tym połączenie z bazą danych. additionalTableSetup: Dodatkowe konfiguracje tabel w bazie danych.
- Zmienne globalne: dbname: Nazwa pliku bazy danych SQLite, w którym przechowywane są dane aplikacji. dbURL: Ścieżka do bazy danych w formacie URL. tables: Lista klas modeli danych, które mapowane są na tabele w bazie danych. db: Obiekt interfejsu do zarządzania bazą danych.
- Funkcje: populateInterface: Funkcja, która przydziela odpowiednie funkcje interfejsu użytkownika dla poszczególnych klas modeli danych, umożliwiając wyświetlanie tych danych w interfejsie. pushQueuedInstances: Funkcja odpowiedzialna za zapisanie oczekujących instancji modeli danych do bazy danych.
- Główna część programu: Tworzenie obiektu DatabaseHandler do obsługi bazy danych SQLite. Ustawienie obiektu DatabaseHandler w kontrolerze grup, umożliwiając mu dostęp do bazy danych. Inicjalizacja interfejsu użytkownika. Sprawdzenie integralności bazy danych. Ładowanie zapisanego stanu aplikacji z bazy danych. Wypełnienie interfejsu użytkownika danymi z bazy danych. Dodanie zadania okresowego do interfejsu użytkownika, które wywołuje funkcję pushQueuedInstances co 5000 milisekund. Uruchomienie interfejsu użytkownika, umożliwiając interakcję z aplikacją.
Plik models.py definiuje różne modele danych wykorzystywane w aplikacji. Zawiera klasy reprezentujące szablony wiadomości, załączniki, kontakty, użytkowników, wiadomości oraz grupy.
- Klasa IModel Jest to klasa która jest podstawą dla wszystkich modeli danych. Zawiera metodę queueSave(), która umożliwia kolejkowanie instancji do zapisu.
- Klasa Template Klasa reprezentująca szablony wiadomości. Zawiera pola takie jak identyfikator, nazwa i treść szablonu. Posiada również metody do zarządzania tymi polami oraz kolejki do zapisu.
- Klasa Attachment Klasa reprezentująca załączniki do wiadomości. Przechowuje informacje takie jak nazwa pliku, ścieżka do pliku i typ załącznika.
- Klasa Contact Klasa reprezentująca kontakt. Przechowuje imię, nazwisko i adres email kontaktu. Posiada metody do zarządzania tymi informacjami oraz do weryfikacji poprawności adresu email.
- Klasa User Klasa reprezentująca użytkownika. Składa się z obiektu klasy Contact oraz hasła.
- Klasa Message Klasa reprezentująca wiadomość email. Rozszerza klasę MIMEMultipart, co pozwala na tworzenie wieloczęściowych wiadomości email. Przechowuje informacje o odbiorcy oraz ewentualnych załącznikach.
- Klasa Group Klasa reprezentująca grupę kontaktów. Przechowuje identyfikator, nazwę oraz listę kontaktów należących do tej grupy. Posiada metody do zarządzania tymi informacjami.
Plik dataSources.py zawiera definicje klas odpowiedzialnych za obsługę różnych źródeł danych w aplikacji MailBuddy. Jego główne zadanie to dostarczenie interfejsu IDataSource oraz konkretnych implementacji tego interfejsu dla obsługi bazy danych, plików XLSX oraz plików CSV. Ten plik jest kluczowy dla funkcjonowania aplikacji, ponieważ definiuje sposób, w jaki aplikacja będzie pobierała dane z różnych źródeł do dalszego przetwarzania i wysyłania spersonalizowanych wiadomości e-mail.
- Klasa abstrakcyjna IDataSource jest interfejsem, który definiuje podstawową metodę GetData, odpowiedzialną za pobieranie danych z różnych źródeł. Jest to ogólny szkielet, który będzie wykorzystywany do obsługi różnych typów danych.
- Klasa DatabaseHandler jest klasą reprezentującą obsługę bazy danych jako źródła danych. Nie wymaga konstruktora, ponieważ obsługa bazy danych nie wymaga dodatkowych parametrów. Implementuje metodę GetData, jednakże nie wykonuje żadnych operacji w jej ciele, gdyż to konkretne źródło danych nie jest jeszcze obsługiwane.
- Klasa XLSXHandler odpowiada za obsługę plików XLSX jako źródła danych. Posiada konstruktor, który przyjmuje ścieżkę do pliku XLSX. Metoda GetData tej klasy otwiera i wczytuje dane z pliku XLSX za pomocą biblioteki pandas. W przypadku wystąpienia błędu podczas wczytywania pliku, zwraca None i wyświetla komunikat o błędzie.
- Klasa CSVXHandler reprezentuje obsługę plików CSV jako źródła danych. Posiada konstruktor przyjmujący ścieżkę do pliku CSV. Metoda GetData tej klasy otwiera i wczytuje dane z pliku CSV za pomocą biblioteki pandas. Podobnie jak w przypadku klasy obsługującej pliki XLSX, w przypadku wystąpienia błędu podczas wczytywania pliku, zwraca None i wyświetla komunikat o błędzie.
- Te klasy tworzą podstawę dla obsługi różnych typów źródeł danych w aplikacji MailBuddy. Dzięki zastosowaniu abstrakcji, możliwe jest łatwe dodawanie nowych źródeł danych poprzez implementację nowych klas obsługujących te źródła.
Plik group_controller.py definiuje kontroler do zarządzania grupami i kontaktami w aplikacji. Kluczową klasą w tym pliku jest GroupController, która wykorzystuje źródło danych IDataSource do przechowywania i manipulowania informacjami o grupach i kontaktach.
Klasa GroupController
-
Atrybut dbh: Klasa posiada statyczny atrybut dbh typu IDataSource, który jest używany do interakcji z bazą danych.
-
Metoda setDbHandler: Ta metoda ustawia źródło danych dla kontrolera. Przyjmuje jako argument obiekt implementujący interfejs IDataSource.
-
Metoda add_contact: Ta metoda dodaje kontakt do grupy. Jeśli kontakt zostanie pomyślnie dodany do grupy, tworzy nowy wpis w tabeli GroupContacts i zapisuje go w bazie danych.
-
Metoda delete_connection: Ta metoda usuwa powiązanie między grupą a kontaktem. Pobiera wszystkie wpisy GroupContacts pasujące do danej grupy i kontaktu, a następnie usuwa je z bazy danych.
-
Metoda get_contacts: Ta metoda pobiera wszystkie kontakty należące do danej grupy. Korzysta z tabeli GroupContacts do znalezienia wszystkich powiązanych kontaktów, a następnie pobiera szczegóły każdego kontaktu z bazy danych.
Folder interface zawiera kod interfejsu użytkownika aplikacji MailBuddy napisanej w Tkinterze. Folder ten zawiera interfejs użytkownika aplikacji MailBuddy, umożliwiając użytkownikowi manipulowanie grupami mailowymi, tworzenie szablonów wiadomości oraz wysyłanie wiadomości e-mail. Interfejs został zaimplementowany w bibliotece Tkinter dla języka Python.
AddContactWindow.py jest odpowiedzialny za tworzenie okna dialogowego do dodawania nowych kontaktów w aplikacji. Główną klasą w tym pliku jest AddContactWindow, która dziedziczy po klasie Toplevel z biblioteki tkinter, co pozwala na otwarcie nowego okna dialogowego w kontekście nadrzędnego okna aplikacji.
-
Konstruktor klasy AddContactWindow inicjalizuje nowe okno dialogowe i przyjmuje jako argument parent, który jest instancją nadrzędnego okna. Konstruktor wywołuje metodę init klasy bazowej Toplevel oraz ustawia referencję do okna nadrzędnego.
-
Klasa AddContactWindow zawiera metodę prepareInterface, która jest odpowiedzialna za przygotowanie interfejsu użytkownika okna dialogowego. Metoda ta ustawia tytuł okna i tworzy elementy interfejsu, takie jak etykiety, pola tekstowe oraz przycisk. Etykiety i pola tekstowe umożliwiają użytkownikowi wprowadzenie adresu e-mail, imienia i nazwiska nowego kontaktu. Przycisk "Dodaj kontakt" wywołuje metodę add_manual_contact.
-
Metoda add_manual_contact jest odpowiedzialna za pobieranie danych wprowadzonych przez użytkownika w pola tekstowe, tworzenie nowego obiektu kontaktu i aktualizowanie nadrzędnego okna. Jeśli użytkownik nie wprowadzi adresu e-mail, wyświetlany jest komunikat błędu.
AppUI.py odpowiada za główny interfejs użytkownika programu MailBuddy. Kluczową klasą w tym pliku jest AppUI, która zarządza całym GUI aplikacji, w tym tworzeniem, aktualizacją i interakcją z różnymi elementami interfejsu użytkownika.
-
W klasie AppUI konstruktor init inicjalizuje główne okno aplikacji oraz tworzy listy do przechowywania grup i szablonów, jak również inicjalizuje zmienną do przechowywania okna edycji szablonów. Metoda prepareInterface ustawia podstawowe właściwości okna, takie jak tytuł, kolor tła, minimalne wymiary oraz sposób reagowania na zamknięcie okna. Następnie wywołuje metody odpowiedzialne za tworzenie menu, paneli grup mailingowych, szablonów oraz wejściowego panelu maili.
-
Metoda populateInterface jest używana do aktualizacji interfejsu użytkownika na podstawie bieżących danych, wywołując metody update_templates i update_groups, które odświeżają zawartość listboxów odpowiednio dla szablonów i grup. Metody setSender, setUser i setDb pozwalają na ustawienie obiektów odpowiedzialnych za wysyłanie maili, bieżącego użytkownika oraz bazy danych.
-
Metoda run uruchamia główną pętlę aplikacji, umożliwiając interakcję użytkownika z GUI. Funkcja errorHandler definiuje sposób obsługi wyjątków i błędów, wyświetlając komunikaty o błędach w oknie dialogowym.
Interfejs użytkownika jest podzielony na kilka paneli:
- Panel grup mailingowych (__create_mailing_group_pane), który zawiera listbox do wyświetlania grup, etykietę oraz przycisk do wybierania grupy.
- Panel szablonów (__create_template_pane), który zawiera listbox do wyświetlania szablonów, etykietę oraz przycisk do wybierania szablonu.
- Panel wejściowy maili (__create_mail_input_pane), który zawiera pole do wprowadzania adresów e-mail, etykietę oraz element HTMLLabel do wyświetlania zawartości wybranego szablonu.
ContactList.py odpowiada za zarządzanie oknem listy kontaktów w aplikacji MailBuddy. Kluczową klasą w tym pliku jest ContactList, która dziedziczy po klasie Toplevel z tkintera, umożliwiając tworzenie nowego okna podrzędnego.
-
Klasa ContactList jest inicjalizowana z odniesieniem do rodzica oraz opcjonalnie grupy , do której mogą być dodawane kontakty. Konstruktor ustawia te wartości i inicjalizuje okno podrzędne.
-
Metoda prepareInterface przygotowuje interfejs użytkownika dla okna listy kontaktów. Ustawia tytuł okna, rozmiar i położenie. Następnie tworzy główny kontener contact_frame, w którym umieszcza elementy interfejsu takie jak: pole wyszukiwania, przyciski do przewijania listy kontaktów oraz wewnętrzną ramkę do przechowywania kontaktów.
-
populateWindow wypełnia okno listą wszystkich kontaktów. Jeśli okno jest otwarte dla konkretnej grupy, oznacza kontakty, które już są dodane do grupy. Każdy kontakt jest reprezentowany przez wiersz zawierający etykiety z informacjami o kontakcie oraz pole wyboru (Checkbutton), które umożliwia dodanie lub usunięcie kontaktu z grupy.
-
create_contact_widget tworzy pojedynczy wiersz dla kontaktu, zawierający etykiety i pole wyboru (Checkbutton). Jeśli pole wyboru jest zaznaczone, kontakt jest dodawany do grupy, w przeciwnym razie jest usuwany z grupy.
-
add_contact_to_group dodaje kontakt do grupy za pomocą GroupController.add_contact i aktualizuje interfejs rodzica. Obsługuje także wyjątek IntegrityError, który może wystąpić przy próbie dodania już istniejącego kontaktu do grupy.
-
remove_contact_from_group usuwa kontakt z grupy za pomocą GroupController.delete_connection i aktualizuje interfejs rodzica.
-
search_contact umożliwia wyszukiwanie kontaktów na podstawie wprowadzonego kryterium (imienia, nazwiska lub adresu e-mail). Po wprowadzeniu kryterium, metoda czyści obecnie wyświetlaną listę i wyświetla tylko te kontakty, które spełniają kryteria wyszukiwania.
-
add_manual_contact_window otwiera nowe okno dialogowe (AddContactWindow) pozwalające na ręczne dodanie nowego kontaktu.
ExternalSourceImportWindow.py zawiera kod odpowiedzialny za okno importu danych z zewnętrznych źródeł (plików Excel) do aplikacji MailBuddy. Kluczową klasą jest ExternalSourceImportWindow, która dziedziczy po klasie Toplevel z tkintera, umożliwiając tworzenie nowego okna podrzędnego.
-
init - Inicjalizuje okno, ustawiając rodzica (parent), główne okno (master) oraz szablon (template). Następnie wywołuje metodę prepareInterface do przygotowania interfejsu użytkownika. Inicjalizuje także zmienną file_path na None.
-
prepareInterface Konfiguruje interfejs użytkownika, ustawiając tytuł okna oraz rozkład siatki. Tworzy i rozmieszcza widżety, takie jak etykiety, przyciski, pole kombi (Combobox), drzewo (Treeview) oraz pasek przewijania (Scrollbar). Etykieta label oraz przycisk select_button umożliwiają wybór pliku. Etykieta combobox_label oraz pole combobox służą do wyboru arkusza z wybranego pliku Excel. Drzewo treeview wyświetla podgląd zawartości wybranego arkusza. Przycisk add_button pozwala na dodanie danych z wybranego arkusza.
-
browse_file Otwiera okno dialogowe do wyboru pliku Excel, a następnie wywołuje metodę load_worksheets do załadowania dostępnych arkuszy z wybranego pliku.
-
load_worksheets Ładuje arkusze z wybranego pliku Excel i aktualizuje pole (Combobox) wartościami nazw arkuszy. Ustawia domyślnie pierwszy arkusz jako wybrany i wywołuje update_preview, aby zaktualizować podgląd danych.
-
update_preview Aktualizuje podgląd danych na podstawie wybranego arkusza. Usuwa poprzednie dane z drzewa (Treeview) i dodaje nowe wiersze. Sprawdza, czy w pierwszym wierszu arkusza znajduje się kolumna Email, aby umożliwić późniejsze połączenie danych.
-
Metoda add_data Tworzy obiekt DataImport z wybraną ścieżką pliku i ustawia go jako dane importowane do szablonu (template). Następnie aktualizuje interfejs rodzica i zamyka okno.
GroupEditor.py zawiera kod odpowiedzialny za edytowanie grup kontaktów w aplikacji
- init - Inicjalizuje okno, ustawiając rodzica (parent) oraz grupę (edited). Jeśli grupa nie została przekazana, tworzy nową grupę.
- prepareInterface Konfiguruje interfejs użytkownika, ustawiając tytuł okna oraz rozmieszczenie widżetów. Tworzy i rozmieszcza etykiety, pola tekstowe, przyciski oraz definiuje ich akcje. Ustawia siatkę, aby umożliwić dynamiczne rozmieszczanie widżetów.
- Widżety:
- name_label i name_entry - Etykieta i pole tekstowe do wprowadzania nazwy grupy.
- email_label i email_text - Etykieta i pole tekstowe do wyświetlania i edycji adresów email.
- btn_add_list_contact - Przycisk do otwarcia okna listy kontaktów.
- btn_save - Przycisk do zapisania grupy.
- btn_import - Przycisk do importu adresów email z pliku Excel.
- btn_export - Przycisk do eksportu adresów email do pliku Excel.
- update Aktualizuje interfejs użytkownika na podstawie aktualnej grupy. Jeśli grupa jest edytowana, ustawia tytuł okna i wypełnia pola tekstowe odpowiednimi danymi. Jeśli tworzona jest nowa grupa, ustawia odpowiedni tytuł.
- add_contact Dodaje adres email kontaktu do pola tekstowego.
- dd_contact_from_list_window Otwiera okno listy kontaktów (ContactList), umożliwiając dodanie kontaktów z listy.
- __save_group_clicked Zapisuje grupę, aktualizując nazwę grupy na podstawie wprowadzonego tekstu w name_entry. Wywołuje metodę update rodzica i zamyka okno edytora grupy.
- import_emails Otwiera okno dialogowe do wyboru pliku Excel, wczytuje adresy email z wybranego pliku i dodaje je do pola tekstowego.
- export_emails Otwiera okno dialogowe do zapisania pliku Excel, zbiera adresy email z pola tekstowego i zapisuje je do pliku Excel.
Settings.py zawiera kod odpowiedzialny za zarządzanie ustawieniami użytkownika w aplikacji
-
init - Inicjalizuje okno ustawień, ustawiając rodzica (parent) oraz konfiguruje wygląd okna.
-
prepareInterface Konfiguruje interfejs użytkownika, ustawiając tytuł okna oraz rozmieszczenie widżetów. Tworzy i rozmieszcza etykiety, pola tekstowe, przyciski oraz definiuje ich akcje.
-
Widżety:
- label - Etykieta z tytułem "MailBuddy".
- email_combobox - Pole wyboru adresu email.
- password_entry - Pole tekstowe do wprowadzania hasła.
- connect_button - Przycisk do połączenia z wybranym adresem email.
- change_email_button - Przycisk do dodania nowego adresu email.
- close_button - Przycisk do zamknięcia okna ustawień.
- pdateCombobox Aktualizuje zawartość pola wyboru adresu email na podstawie instancji klasy User.
- getUser Pobiera wybrany adres email i hasło, a następnie wyszukuje odpowiedniego użytkownika w liście instancji klasy User. Jeśli użytkownik nie istnieje, tworzy nowego użytkownika.
- connect Pobiera użytkownika za pomocą getUser, odkrywa ustawienia email i wyświetla odpowiednie informacje o połączeniu.
- change_email Otwiera okno dialogowe do wprowadzenia nowego adresu email, a następnie dodaje go do listy użytkowników.
- close Zamyka okno ustawień.
TemplateEditor.py zawiera kod odpowiedzialny za edytor szablonów w aplikacji MailBuddy. Główna klasa TemplateEditor, dziedziczy po klasie Toplevel z tkintera, co pozwala na tworzenie nowego okna podrzędnego do edycji szablonów.
- placeholder_text - Tekst, który jest używany jako miejsce wstawienia dynamicznego wypełnienia w szablonie.
- init - Inicjalizuje okno edytora szablonów, ustawiając rodzica (parent) oraz przygotowując interfejs użytkownika. Inicjalizuje obiekt Template i jeśli istnieje powiązany DataImport, tworzy instancję GapFillSource.
- prepareInterface Konfiguruje interfejs użytkownika, ustawiając tytuł okna oraz rozmieszczenie widżetów. Tworzy i rozmieszcza etykiety, pola tekstowe, przyciski oraz definiuje ich akcje.
- Widżety:
- name_label - Etykieta dla nazwy szablonu.
- name_entry - Pole tekstowe do wprowadzania nazwy szablonu.
- template_text - Pole tekstowe do wprowadzania zawartości szablonu z obsługą HTML.
- template_preview - Widżet do wyświetlania podglądu HTML szablonu.
- btn_save - Przycisk do zapisywania szablonu.
- btn_insert_placeholder - Przycisk do wstawiania miejsca wypełnienia.
- btn_add_external_source - Przycisk do dodawania zewnętrznego źródła danych.
- update_combo_values Aktualizuje wartości listy rozwijanej dla miejsc wypełnienia na podstawie instancji GapFillSource
- __add_external_source_clicked Otwiera okno ExternalSourceImportWindow do dodawania zewnętrznego źródła danych.
- update Aktualizuje dane szablonu, tworząc nowe instancje GapFillSource.
- __on_html_key_clicked Obsługuje zdarzenia klawiatury, generując zdarzenie <> przy zmianie tekstu.
- _on_text_changed Aktualizuje podgląd HTML na podstawie zawartości template_text. Zamienia miejsca wypełnienia na podgląd dynamicznego tekstu.
- __save_template_clicked Zapisuje szablon, ustawiając jego nazwę i zawartość na podstawie wprowadzonych danych, a następnie zamyka okno edytora.
- hide_combobox Ukrywa listę rozwijaną z miejscami wypełnienia.
- __template_window_insert_placeholder Wstawia miejsce wypełnienia do template_text i konfiguruje jego styl.
- __show_placeholder_menu Wyświetla menu z listą rozwijaną do wyboru miejsca wypełnienia.
- __on_placeholder_selection Obsługuje wybór miejsca wypełnienia z listy rozwijanej, zamieniając zaznaczony tekst na wybrane miejsce wypełnienia.
Plik accountInfo.py zawiera funkcje pomocnicze do zarządzania ustawieniami konta e-mail, w tym do odkrywania ustawień serwera pocztowego na podstawie domeny e-mail. Funkcje w tym pliku obejmują uzyskiwanie rekordów MX, ustawień autodiscover oraz testowanie połączeń IMAP i SMTP.
- Funkcje get_domain i get_mx_records: Wyodrębniają domenę z adresu e-mail i uzyskują rekordy MX dla tej domeny.
- Funkcja get_autodiscover_settings: Pobiera ustawienia autodiscover z serwera.
- Funkcja parse_email_settings: Przetwarza ustawienia serwera pocztowego z formatu XML.
- Funkcje test_imap_connection i test_smtp_connection: Testują połączenia z serwerami IMAP i SMTP.
- Funkcja discover_email_settings: Łączy powyższe funkcje, aby odkryć i przetestować ustawienia serwera pocztowego dla danego adresu e-mail.
Plik ethereal_demo.py zawiera skrypt do wysyłania wiadomości e-mail za pomocą serwera SMTP Ethereal. Skrypt używa biblioteki smtplib do nawiązania połączenia z serwerem SMTP i wysyłania e-maili.
- Funkcja send_email: Konstruktuje i wysyła wiadomość e-mail z określonym nadawcą, odbiorcą, tematem i treścią, korzystając z serwera SMTP Ethereal.
Plik readers.py definiuje abstrakcyjną klasę bazową IReader oraz klasy IMAPReader i MockIMAPReader, które implementują interfejs do odczytywania wiadomości e-mail z serwerów IMAP.
- Klasa IReader: Abstrakcyjna klasa bazowa z metodą ReadAll.
- Klasa IMAPReader: Implementuje IReader i rozszerza IMAP4_SSL, umożliwiając logowanie się przy użyciu OAuth2.
- Klasa MockIMAPReader: Prosta implementacja IReader do testowania.
Plik senders.py definiuje abstrakcyjną klasę bazową ISender oraz klasę SMTPSender, która implementuje interfejs do wysyłania wiadomości e-mail za pomocą SMTP.
- Klasa ISender: Abstrakcyjna klasa bazowa z metodą Send.
- Klasa SMTPSender: Implementuje ISender i wykorzystuje smtplib do wysyłania e-maili do grupy kontaktów na podstawie szablonu i użytkownika.
Plik smtp_data.py definiuje globalne zmienne konfiguracyjne dla połączenia SMTP, takie jak host, port, metoda zabezpieczeń, e-mail i hasło.
cfgExporter.py zawiera klasę ConfigExporter, która umożliwia eksportowanie konfiguracji aplikacji do bazy danych lub pliku JSON. Klasa wykorzystuje enumerację ExportLocation do określenia miejsca docelowego eksportu. Metody klasowe ToDatabase i ToJSON tworzą odpowiednie instancje eksportera. Metoda Export realizuje eksport w zależności od wybranego miejsca docelowego, zapisując je w odpowiednim formacie.
LoginService.py zawiera funkcję loginPrompt, która pobiera od użytkownika dane logowania (email, hasło, imię, nazwisko) za pomocą interfejsu wiersza poleceń. Funkcja zwraca zebrane dane jako krotkę, umożliwiając ich dalsze przetwarzanie w aplikacji.
Plik ConfigExporter_test.py zawiera zestaw testów jednostkowych napisanych w frameworku pytest dla klasy ConfigExporter oraz związanych funkcji. Testy te sprawdzają różne aspekty zachowania klasy ConfigExporter oraz jej metod.
-
test_to_database: Jest to test sprawdzający, czy obiekt ConfigExporter utworzony za pomocą metody ToDatabase posiada oczekiwane właściwości, takie jak odpowiedni typ oraz czy właściwość export i location są ustawione odpowiednio.
-
test_json_exporter_factory: Ten test sprawdza poprawność działania metody fabrycznej ToJSON w klasie ConfigExporter. Sprawdzane jest, czy obiekt ConfigExporter utworzony za pomocą tej metody posiada właściwe atrybuty oraz czy typ eksportu oraz lokalizacja są ustawione poprawnie.
-
test_export_to_database: Ten test ma na celu przetestowanie eksportu konfiguracji do bazy danych. Zawiera zakomentowany kod, który sugeruje wykorzystanie ConfigExporter do eksportu danych do bazy danych.
-
test_export_to_json: Ten test sprawdza poprawność eksportu konfiguracji do pliku JSON. Tworzony jest plik tymczasowy, a następnie sprawdzane jest czy plik został utworzony oraz czy jego zawartość jest poprawna (jest typu string).
Plik SQLite_operations_test.py zawiera zestaw testów jednostkowych napisanych w frameworku pytest dla operacji na bazie danych SQLite. Testy te sprawdzają poprawność działania operacji wstawiania danych do bazy danych SQLite oraz inne aspekty związane z manipulacją danymi.
-
contact1: Jest to fixture, która zwraca przykładowy obiekt typu Contact. Fixture ta może być wykorzystywana w testach do przygotowania danych testowych.
-
sqliteConnection: Fixture ta tworzy i zwraca połączenie do bazy danych SQLite. Jest to użyteczne w celu testowania operacji na bazie danych.
-
dropDatabase: Jest to fixture, która usuwa plik bazy danych SQLite jeśli istnieje.
-
createDatabase: Ta fixture tworzy nową bazę danych SQLite oraz tabelę Contacts w tej bazie danych.
-
recreateDatabase: Jest to fixture, która wykorzystuje wcześniejsze fixtury dropDatabase i createDatabase do ponownego utworzenia bazy danych przed wykonaniem testów.
-
test_contact_sqlite_insertable: Jest to test sprawdzający, czy dane mogą być poprawnie wstawiane do bazy danych SQLite. Test ten wykonuje operację wstawiania danych do bazy danych, a następnie sprawdza czy dane zostały poprawnie wstawione poprzez wykonanie zapytania SQL i porównanie wyników z oczekiwaniami.
Plik test_samples.py zawiera testy jednostkowe napisane z użyciem frameworka Pytest.
- os: Moduł Pythona zapewniający funkcje do interakcji z systemem operacyjnym, w tym manipulację ścieżkami i innymi operacjami na plikach.
- sqlite3: Moduł Pythona, który pozwala na interakcję z bazami danych SQLite, w tym wykonywanie poleceń SQL i zarządzanie transakcjami.
- testSamplesPath: Ścieżka do katalogu z przykładowymi danymi testowymi.
- getTemplate: Funkcja w formie fixture, która zwraca obiekt Template na podstawie parametrów zdefiniowanych w pliku testowym.
- test_samples_exist(getTemplate): Sprawdza, czy każdy plik szablonu istnieje i czy nie jest pusty.
- test_template_sqlite_insertable(recreateDatabase, sqliteConnection, getTemplate): Testuje, czy szablony można wstawić do bazy danych SQLite. Wstawia dane do bazy, pobiera wstawione dane
- test_template_sqlite_insertable(recreateDatabase, sqliteConnection, getTemplate): Testuje, czy szablony można wstawić do bazy danych SQLite. Wstawia dane do bazy, pobiera wstawione dane i sprawdza, czy są zgodne z oczekiwanymi. Używa fixture createDatabase do utworzenia struktury bazy danych i getTemplate do uzyskania danych testowych.
Plik zawiera testy jednostkowe dla funkcji zapisu i odczytu obiektów klasy Template do oraz z bazy danych SQLite.
- Fixture: getTemplate Ta fixture przygotowuje obiekty klasy Template z plików HTML znajdujących się w katalogu testowym. Dla każdego szablonu w katalogu testowym jest tworzony obiekt Template, gdzie klucz to nazwa szablonu, a wartość to ścieżka do pliku z szablonem.
- Test: test_template_sqlite_insertable Test ten sprawdza funkcjonalność zapisu i pobierania obiektów Template do/z bazy danych SQLite. Usuwa i tworzy nową bazę danych. Zapisuje obiekt Template do bazy danych. Pobiera ten obiekt z bazy danych i porównuje go z oryginalnym obiektem Template. Test ten sprawdza poprawność zapisu i odczytu obiektów Template do oraz z bazy danych.
Plik imapLogin_test.py zawiera testy jednostkowe dla modułu obsługującego logowanie do serwera IMAP, szczególnie dla usługi Gmail.
- Importy: pytest: Biblioteka do uruchamiania testów. MessagingService.readers.IMAPReader: Moduł zawierający klasę IMAPReader, która obsługuje odczyt wiadomości z protokołu IMAP. personalSecrets: Moduł zawierający poufne informacje, takie jak hasła do kont pocztowych. Jest on importowany w trybie try/except, aby umożliwić testowanie w przypadku, gdy te dane są dostępne. dataGenerators.getGmailOAuth2Secret: Funkcja generująca tajne informacje uwierzytelniające dla konta Gmail.
- Fixture: createImapReaderGmail: Fixture tworząca obiekt IMAPReader skonfigurowany dla konta Gmail. Jest to funkcja wywoływana przed każdym testem, która zwraca obiekt IMAPReader dla konta Gmail.
- Testy: test_createImapReaderGmail: Test sprawdzający, czy obiekt IMAPReader dla konta Gmail został poprawnie utworzony i skonfigurowany. Sprawdzane są atrybuty takie jak oauth2_access_token, host i port. test_loginInGmail: Test sprawdzający poprawność procesu logowania do konta Gmail za pomocą obiektu IMAPReader. Test jest pomijany (@pytest.mark.skipif) w przypadku braku dostępnych poufnych informacji (secrets).