diff --git a/.gitea/config/gitversion.yml b/.gitea/config/gitversion.yml new file mode 100644 index 0000000..57caa9e --- /dev/null +++ b/.gitea/config/gitversion.yml @@ -0,0 +1,9 @@ +next-version: 1.0.0 +mode: ContinuousDeployment +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch + +branches: + main: + regex: ^main$ + increment: Patch \ No newline at end of file diff --git a/.gitea/readme/icon.png b/.gitea/readme/icon.png new file mode 100644 index 0000000..82b7840 Binary files /dev/null and b/.gitea/readme/icon.png differ diff --git a/.gitea/workflows/analyze.yml b/.gitea/workflows/analyze.yml new file mode 100644 index 0000000..43b0e26 --- /dev/null +++ b/.gitea/workflows/analyze.yml @@ -0,0 +1,34 @@ +name: Analyze code + +on: + push: + branches: + - "dev" + paths: + - "src**" + - "requirements.txt" + pull_request: + branches: + - "dev" + - "main" + paths: + - "src**" + - "requirements.txt" + +jobs: + analyze: + name: Analyze code + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pylint + - name: Analysing the code with pylint + run: pylint --exit-zero $(git ls-files 'src/*.py') \ No newline at end of file diff --git a/.gitea/workflows/analyze_and_publish.yml b/.gitea/workflows/analyze_and_publish.yml new file mode 100644 index 0000000..1f9de86 --- /dev/null +++ b/.gitea/workflows/analyze_and_publish.yml @@ -0,0 +1,77 @@ +name: Analyze code and publish app + +on: + push: + branches: + - "main" + paths: + - "src**" + - "requirements.txt" + +jobs: + analyze: + name: Analyze code + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.7" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pylint + - name: Analysing the code with pylint + run: pylint --exit-zero $(git ls-files 'src/*.py') + publish: + name: Publish script + needs: analyze + steps: + - name: Checkout + uses: actions/checkout@v6.0.2 + with: + fetch-depth: 0 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 10.0.x + - name: Setup GitVersion + uses: gittools/actions/gitversion/setup@v4.2.0 + with: + versionSpec: 6.4.x + - name: Determine version + uses: gittools/actions/gitversion/execute@v4.2.0 + id: gitversion + with: + configFilePath: ./.gitea/config/gitversion.yml + - name: Replace version + run: sed -i 's/WIP/${{steps.gitversion.outputs.SemVer}}/g' ./src/configs/config.cfg + - name: Create package root directory + run: | + mkdir package + mkdir package/generator_csv + cp -r src/* package/generator_csv/ + cp requirements.txt package/requirements.txt + - name: Create .TAR.GZ archive + uses: ksm2/archive-action@v1 + with: + format: "tar.gz" + name: generator_csv_${{steps.gitversion.outputs.SemVer}} + root-directory: "package" + - name: Create .ZIP archive + uses: ksm2/archive-action@v1 + with: + format: "zip" + name: generator_csv_${{steps.gitversion.outputs.SemVer}} + root-directory: "package" + - name: Create Release + uses: akkuman/gitea-release-action@v1 + with: + tag_name: ${{steps.gitversion.outputs.SemVer}} + name: ${{steps.gitversion.outputs.SemVer}} + files: |- + generator_csv_${{steps.gitversion.outputs.SemVer}}.tar.gz + generator_csv_${{steps.gitversion.outputs.SemVer}}.zip + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..68bc17f --- /dev/null +++ b/.gitignore @@ -0,0 +1,160 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..933a527 --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +MIT License + +Copyright (c) 2020 Mateusz Skoczek + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/documentation-page/about-program/icon.png b/assets/documentation-page/about-program/icon.png deleted file mode 100644 index e0314ab..0000000 Binary files a/assets/documentation-page/about-program/icon.png and /dev/null differ diff --git a/assets/documentation-page/description/format-danych.png b/assets/documentation-page/description/format-danych.png deleted file mode 100644 index d6b65f5..0000000 Binary files a/assets/documentation-page/description/format-danych.png and /dev/null differ diff --git a/assets/documentation-page/description/generator-csv.png b/assets/documentation-page/description/generator-csv.png deleted file mode 100644 index 0475cda..0000000 Binary files a/assets/documentation-page/description/generator-csv.png and /dev/null differ diff --git a/assets/documentation-page/description/o-programie.png b/assets/documentation-page/description/o-programie.png deleted file mode 100644 index 9285df6..0000000 Binary files a/assets/documentation-page/description/o-programie.png and /dev/null differ diff --git a/assets/documentation-page/description/ustawienia.png b/assets/documentation-page/description/ustawienia.png deleted file mode 100644 index 1c335c5..0000000 Binary files a/assets/documentation-page/description/ustawienia.png and /dev/null differ diff --git a/assets/documentation-page/icon.ico b/assets/documentation-page/icon.ico deleted file mode 100644 index 49f2657..0000000 Binary files a/assets/documentation-page/icon.ico and /dev/null differ diff --git a/assets/documentation-page/icon.png b/assets/documentation-page/icon.png deleted file mode 100644 index e0314ab..0000000 Binary files a/assets/documentation-page/icon.png and /dev/null differ diff --git a/assets/documentation-page/instruction/example-input-data.png b/assets/documentation-page/instruction/example-input-data.png deleted file mode 100644 index ad321b9..0000000 Binary files a/assets/documentation-page/instruction/example-input-data.png and /dev/null differ diff --git a/assets/documentation-page/instruction/generate-input-file-settings.png b/assets/documentation-page/instruction/generate-input-file-settings.png deleted file mode 100644 index cbd2c1c..0000000 Binary files a/assets/documentation-page/instruction/generate-input-file-settings.png and /dev/null differ diff --git a/assets/documentation-page/instruction/generate-output-file-settings.png b/assets/documentation-page/instruction/generate-output-file-settings.png deleted file mode 100644 index 0487107..0000000 Binary files a/assets/documentation-page/instruction/generate-output-file-settings.png and /dev/null differ diff --git a/assets/documentation-page/instruction/input-name.png b/assets/documentation-page/instruction/input-name.png deleted file mode 100644 index 94522b6..0000000 Binary files a/assets/documentation-page/instruction/input-name.png and /dev/null differ diff --git a/assets/icon.png b/assets/icon.png deleted file mode 100644 index e0314ab..0000000 Binary files a/assets/icon.png and /dev/null differ diff --git a/assets/tab-icons/icon.png b/assets/tab-icons/icon.png deleted file mode 100644 index e0314ab..0000000 Binary files a/assets/tab-icons/icon.png and /dev/null differ diff --git a/documentation/about_program.html b/documentation/about_program.html deleted file mode 100644 index 18375ee..0000000 --- a/documentation/about_program.html +++ /dev/null @@ -1,115 +0,0 @@ - - -
- - - -
-
-
-
-
-
-
-
-
-
-
- Wersja 4.0 (Build 20254) -
- -
-
- © styczeń 2019 - wrzesień 2020
-
- Mateusz Skoczek
-
- dla ZSP Sobolew
-
Wersja 1.0
-Wersja 2.0
-Wersja 3.0
-Wersja 3.0.1
-Wersja 4.0 (work in progress)
-Program "Generator CSV" służy do przetwarzania plików danymi uczniów/nauczycieli i generowania plików wyjściowych w formacie pozwalającym na import danych na stronie szkoły oraz portal.office.com
-



GENERATOR CSV
-Dane dla przykładu:
-
W praktyce układ danych wygląda tak (* - nieznaczące dla programu dane):
-[imię] [nazwisko]
[klasa] [szkoła]
[login], [haslo*]
Uruchom program i otwórz zakładkę FORMAT DANYCH. W pierwszej kolejności należy nadać nazwę presetowi formatu w polu zaznaczonym poniżej lub wybrać preset już istniejący z listy rozwijanej
-
Aby przejśc do edycji presetu należy wcisnąć przycisk WCZYTAJ
-Wybierz odpowiednią opcję w zależności od tego jakich osób dane znajdują się w pliku wejściowym
-W tym polu należy wpisać znaki, które oddzielają zbiór danych pojeńczych osób. Jeżeli zbiór danych odziela znak końca wiersza (wciśnięcie ENTER) należy wpisać <enter> (ilość zależna od ilości znaków końca wiersza). Niedozwolone znaki to litery, cyfry oraz * i \. Dla przykładowych danych będzie to "<enter><enter>"
-W tym polu należy wpisać znaki, które oddzielają wiersze. Zazwyczaj jest to jeden znak końca wiersza. Jeżeli wiersze odziela znak końca wiersza (wciśnięcie ENTER) należy wpisać <enter> (ilość zależna od ilości znaków końca wiersza). Niedozwolone znaki to litery, cyfry oraz * i \. Dla przykładowych danych będzie to "<enter>"
-W tym polu należy wpisać znaki, które oddzielają pojedyńcze dane. Każdy kolejny separator musi być zapisany w następnej linijce. Jeżeli dane odziela znak końca wiersza (wciśnięcie ENTER) należy wpisać <enter> (ilość zależna od ilości znaków końca wiersza). Niedozwolone znaki to litery, cyfry oraz * i \. Dla przykładowych danych będzie to (znaki są podkreślone aby je wyróżnić):
"""
,
"""
W tej sekcji należy dla każdego typu danych ustawić jego położenie w zbiorze. Typy SZKOŁA i KLASA nie są istotne jeżeli w sekcji TYP OSOBY zosła zaznaczona opcja Nauczyciele. Dla przykładowych danych uczniów bedzie to:
-| - | Wiersz | -Pozycja w wierszu |
-
|---|---|---|
| Login | -3 | -1 | -
| Imię | -1 | -1 | -
| Nazwisko | -1 | -2 | -
| Szkoła | -2 | -2 | -
| Klasa | -2 | -1 | -
W tym polu należy wybrać kodowanie pliku wejściowego.
-Aby zapisać preset należy wcisnąć przycisk ZAPISZ. Aby anulować tworzenie należy wcisnąć przycisk Anuluj
-Uruchom program i przejdź do zakładki USTAWIENIA.
-W tym polu należy wybrać kodowanie, w jakim ma być zapisany plik csv z danymi uczniów do importu w panelu administracyjnym serwisu szkoły
-W tym polu należy wybrać kodowanie, w jakim ma być zapisany plik csv z danymi uczniów do importu w panelu administracyjnym serwisu portal.office.com
-W tym polu należy wpisać domenę serwisu szkoły. Będzie ona używana w mailu każdego uzytkownika. Przykład: jan.kowalski2023a@losobolew.pl
-W tym polu należy wpisać ilość miejsca (w megabajtach) przeznaczoną dla każdego użytkownika na przechowywanie maili. Te dane są używane w pliku wyjściowym poczty. Przykład: jan.kowalski2023a@losobolew.pl,1234567u:JK,500
-W tym polu należy wpisać nazwę kraju zamieszkania użytkowników. Będzie ona wykorzystywana w pliku wyjściowym office oraz widoczna w profilu użytkownika w serwisie office. Przykład: jan.kowalski2023a@losobolew.pl,Jan,Kowalski,Jan Kowalski,uczeń,1b LO,,,,,,,,,Rzeczpospolita Polska
-Jeżeli chcesz aby w pierwszej linii pliku wyjściowego dla poczty znajdował się nagłowek, zaznacz opcję "Umieść w pliku". Zawartość nagłówka można edytować w polu tekstowym po lewej.
-Jeżeli chcesz aby w pierwszej linii pliku wyjściowego dla office znajdował się nagłowek, zaznacz opcję "Umieść w pliku". Zawartość nagłówka można edytować w polu tekstowym po lewej.
-W tych polach należy wpisać datę rozpoczęcia roku szkolnego (z reguły). W pierwszym polu (po lewo) należy wpisać dzień, a w drugim (po prawo) miesiąc. Te dane są używane do obliczania roku w znaczniku klasy (przykłądowy znacznik klasy: 2023a). W przypadku generowania plików na nowy rok szkolny przed jego rozpoczęciem, należy wprowadzić datę dzisiejszą lub wcześniejszą.
-W tym polu należy wprowadzić dane każdej szkoły w zespole szkół (po jednej szkole w linijce). Wymagane są trzy "kolumny danych". Są one odzielone znakami " | ".
W pierwszej kolumnie należy wpisać oznaczenie szkoły (dowolne bez spacji, najlepiej jak najkrótsze). Te dane będą używane w znaczniku klasy, jeżeli w trzeciej kolumnie została wybrana opcja "1".
W drugiej kolmnie należy wpisać liczbę klas w danej szkole. Te dane używane są do obliczenia roku w znaczniku klasy.
W trzeciej kolumnie można wybrać opcję "1" lub "0" (Prawda/Fałsz). Wybierz "1" jeżeli chcesz, aby w znaczniku klasy znajdowało się oznaczenie szkoły (przykład: 2023bs). Wybierz "0" jeżeli chcesz, aby w znaczniku klasy znajdowała się litera klasy (przykład: 2023a).
Aby zapisać ustawienia należy wcisnąć przycisk ZAPISZ. Aby anulować zmiany wciśnij przycisk Anuluj
-W pierwszej kolejności należy przygotować pliki wejściowe oraz stworzyć presety formatu dla tych plików, według instrukcji w sekcji "Tworzenie/edytowanie format presetu dla danego pliku źródłowego" (jednego presetu formatu można używac do kilku plików jeżeli pliki mają ten sam format i to samo kodowanie)
-Przejdź do zakładki GENERATOR CSV. Możesz przetworzyć naraz 4 pliki wejściowe. Dla każdego pliku należy wybrać jego lokalizację (wpisać ją w polu, oznaczonym kolorem czerwonym na poniższym zdjęciu, lub otworzyć okno wyboru lokalizacji za pomocą przycisku "Przeglądaj" i tam wybrać plik. Następnie należy wybrać preset formatu, odpowiedni dla pliku wejściowego, w polu oznaczonym kolorem zielonym na poniższym zdjęciu.
-
Wybierz lokalizację zapisu pliku wyjściowego dla serwisu szkoły, wpisując lokalizację wraz z nazwą pliku w polu, oznaczonym kolorem czerwonym na poniższym zdjęciu, lub otwierając okno wyboru lokalizacji za pomocą przycisku "Przeglądaj" obok tego pola i tam wybierając plik.
Wybierz lokalizację zapisu pliku wyjściowego dla serwisu portal.office.com, wpisując lokalizację wraz z nazwą pliku w polu, oznaczonym kolorem zielonym na poniższym zdjęciu, lub otwierając okno wyboru lokalizacji za pomocą przycisku "Przeglądaj" obok tego pola i tam wybierając plik.

Aby rozpocząć generowanie wciśnij przycisk START i potwierdź komunikat. Pliki wyjściowe zostaną zapisane w wybranych lokalizacjach. Przed importem upewnij się że w plikach nie występują błędy.
-Uruchom program i przejdź do zakładki USTAWIENIA.
-Naciśnij przycisk "Zarządzaj presetami formatu".
-Zaznacz presety formatu które chcesz usunąć.
-Naciśnij przycisk "Usuń zaznaczone"
-Uruchom program i przejdź do zakładki USTAWIENIA.
-Naciśnij przycisk "Przywróć domyślne ustawienia ogólne". Po potwierdzeniu i ponownym uruchomieniu programu, ustawienia zostaną przywrócone do ustawień fabrycznych.
-Uruchom program i przejdź do zakładki USTAWIENIA.
-Naciśnij przycisk "Przywróć domyślne ustawienia wyglądu". Po potwierdzeniu i ponownym uruchomieniu programu, wygląd zostanie przywrócony do ustawień fabrycznych.
-Otwórz menu start i wpisz "%appdata%"
-Przejdź do folderu "Generator CSV"
-Za ustawienia programu odpowiedzialny jest plik "config.cfg", a za wygląd plik "style.cfg". Użyj dowolnego edytora plików tekstowych, do edycji tych plików. Więcej informacji o tych plikach znajduje się w Dokumentacji technicznej.
Aby przywrócić te pliki do stanu fabrycznego wykonaj kroki z sekcji odpowiednio "Przywracanie domyślnych ustawień ogólnych programu" lub "Przywracanie domyślnego wyglądu programu"
Aby móc uruchomić aplikację w wersji developerskiej należy pobrać Pythona (wersja zalecana: 3.8.5) oraz wymagane biblioteki (wymienione w sekcji 'generator.pyw - Import bibliotek')
-
- Biblioteki główne
-
- W tej sekcji importowane są wszystkie biblioteki niezwiązane z interfejsem graficznych
-
-
- Biblioteki interfejsu graficznego
-
- W tej sekcji importowane są wszystkie biblioteki związane z interfejsem graficznym
-
-
- Informacje o programie
-
- programName - Zmienna definująca nazwę programu
- programVersion - Zmienna definiująca główną wersję programu
- programVersionStage - Zmienna definiująca etap rozwoju programu. Wersja stabilna definiowana jest przez pusty string
- programVersionBuild - Zmienna definiująca numer buildu programu. Zapisany jest on w formacie '[ostatnie dwie cyfry roku][numer dnia w roku]'
- programCustomer - Zmienna definiująca nazwę organizacji zlecającej stworzenie programu
- programAuthors - Lista zawierająca nazwy osób rozwijających program.
- programToW - Lista zawierająca informacje na temat czasu rozwoju programu. Format: ['miesiąc rozpoczęcia prac', 'rok rozpoczęcia prac', 'aktualny dla rozwoju danej wersji miesiąc', 'aktualny dla rozwoju danej wersji rok']
-
-
- Dozwolone kodowanie plików
-
- allowedCoding - Lista zawierająca wspierane kodowania plików. Są one wyświetlane w rozwijanych listach wyboru kodowania pliku.
-
-
- Dozwolone znaki
-
- allowedCharactersInSeparator - Lista zawierająca znaki które można wpisać w pola dotyczące separatorów osób, linii i danych
-
-
- Katalog APPDATA
-
- appdataPath - zmienna definiująca ścieżkę do folderu %appdata%
-
- Lista komunikatów
-
- Słownik MSGlist zawiera listę komunikatów. Format: '[kod dialogowy]' : '[komunikat]'. Kod dialogowy składa się z [jednoznakowego znacznika rodzaju okna dialogowego][czterocyfrowego numeru komunikatu]
-
-
- Rodzaje okien dialogowych:
-
-
- Funkcja odpowiedzialna za wywoływanie komunikatów dialogowych
-
- Wywoływanie funkcji: MSG([kod dialogowy],[True - Zakończ działanie programu po zamknięciu okna dialogowego/False - Kontynuuj działanie programu po zamknięciu okna dialogowego],[dodatkowe informacje wyświetlane w komunikacie - opcjonalnie])
-
-
- try:
- Sprawdza czy zostały wpisane 'dodatkowe informacje wyświetlane w komunikacie' i jeżeli nie, definiuje listę, w której znajduje się pusty string (ma to na celu uniknięcia błędu podczas próby wywołania dodatkowych informacji przez dalszą część funkcji)
- optionalInfo[0]
- except:
- optionalInfo = ['']
-
-
-
- if code[0] == 'E/I/W':[tytuł komunikatu]
- TKmsb.showerror/showinfo/showwarning('', '%s\n%s' % (MSGlist[code], optionalInfo[0]))
- Wywoływanie danego rodzaju komunikatu na podstawie jednoznakowego znacznika rodzaju okna dialogowego.
-
-
-
- if terminate:
- Zakończenie działania programu po zamknięciu okna dialogowego, jeżeli została ustawiona opdowiednia opcja.
- SS.exit(0)
-
-
-
- elif code[0] == 'A':
- Funkcja zwraca wartość boolean w przypadku wywołania komunikatu zapytania
-
- if TKmsb.askokcancel('Pytanie', '%s\n%s' % (MSGlist[code], optionalInfo[0])):
- return True
- else:
- return False
-
- Klasa checkAppdata odpowiedzialna jest za sprawdzenie poprawności i, w razie potrzeby, doprowadzenie go do stanu poprawności.
-
-
- Główna funkcja programu
-
- 1. Czy w folderze %appdata% istnieje folder programu (Generator CSV)?
- Jeżeli nie istnieje, uruchamiana jest funckja __buildAppdata (odpowiedzialna za zbudowanie całości katalogu programu).
- 2. Czy w folderze programu istnieje plik 'version' (przechowuje on numer buildu programu, w którym został zbudowany katalog programu)?
- Jeżeli nie istnieje, uruchamiane jest okno dialogowe zapytania z pytaniem czy pozwolić na zresetowanie katalogu programu i kontynuować ładowanie programu
- 3. Czy numer buildu programu w pliku 'version' jest zgodny z numerem buildu zawartym w zmiennej VAR.programVersionBuild
- Jeżeli nie, uruchamiane jest okno dialogowe zapytania z pytaniem czy pozwolić na zresetowanie katalogu programu i kontynuować ładowanie programu
- Jeżeli tak, sprawdzane są poszczególne pliki i foldery które powinny być zawarte w folderze, i jeżeli któryś plik/folder nie znajduje się w folderze, wywołuje się funkcje mające na celu przywrócenie/utworzenie tych plików/folderów (odpowiednio: __restoreCFG dla plików konfiguracyjnych, __createFormatPresetsDir dla folderu przechowującego format presety)
-
-
- Budowanie katalogu programu (__buildAppdata)
-
- Funkcja ta, jest odpowiedzialna za zbudowanie całości katalogu programu w folderze %appdata%.
- 1. Tworzenie katalogu 'Generator CSV'
- 2. Tworzenie pliku 'version' i zapisanie w nim numeru buildu.
- 3. Inicjacja funkcji __restoreCFG (w celu skopiowania pliku 'config.cfg' z głównego katalogu programu do katalogu 'Generator CSV' w folderze %appdata%).
- 4. Inicjacja funkcji __restoreCFG (w celu skopiowania pliku 'style.cfg' z głównego katalogu programu do katalogu 'Generator CSV' w folderze %appdata%).
- 5. Inicjacja funkcji __createFormatPresetsDir (w celu stworzenia folderu 'format-presets' przechowującego format presety)
-
-
- Resetowanie katalogu programu (__resetAppdata)
-
- Funkcja ta, jest odpowiedzialna za przywrócenie katalogu programu w folderze %appdata% do stanu podstawowego oraz stworzenie kopii zapasowej starego katalogu.
- 1. W przypadku gdy w katalogu istnieje jeszcze starsza kopia zapasowa folderu, kopia ta jest usuwana.
- 2. Nazwa katalogu programu jest zmieniana na taką z dopiskiem '_old'.
- 3. Inicjacja funkcji __buildAppdata w celu zbudowania nowego katalogu programu
- 4. Skopiowanie katalogu 'Generator CSV_old' do nowego katalogu 'Generator CSV'
-
-
- Przywracanie plików konfiguracyjnych (__restoreCFG)
-
- Funkcja ta, jest odpowiedzialna za skopiowanie pliku konfiguracyjnego (.cfg) o danej nazwie z głównego katalogu programu do katalogu programu w folderze %appdata%
-
-
- Tworzenie katalogu przechowującego format presety (__createFormatPresetsDir)
-
- Funkcja ta, jest odpowiedzialna za utworzenie folderu 'format-presets', przechowującego format presety, w katalogu programu w folderze %appdata%
-
- Klasa CFG odpowiedzialna jest za zarządzanie plikiem konfiguracyjnym 'config.cfg'
-
-
- Odczytywanie pojedyńczej zmiennej z pliku (R)
-
- Funkcja ta, jest odpowiedzialna za odczytanie zawartości danego recordu i sprawdzenie jego poprawności
- 1. Inicjacja funkcji __checkIfFileExist w celu sprawdzenia czy plik 'config.cfg' istnieje
- 2. Zczytanie i zapisanie wszystkich danych z pliku 'config.cfg' do słownika content w formacie: 'nazwa zmiennej' : ['zmienna', 'typ zmiennej']
- 3. Inicjacja funckji __checkIfRecordExist w celu sprawdzenia czy w słowniku content znajduje się żądany record
- 4. Inicjacja, odpowiedniej dla typu zmiennej, funkcji mającej na celu sprawdzenie jej poprawności i jej przetworzenie
- 5. Funkcja zwraca wartość zmiennej.
-
-
- Zapisywanie zmian w pliku (W)
-
- Funkcja ta jest odpowiedzialna za sprawdzenie, przetworzenie i zapisanie zmian w pliku konfiguracyjnych.
- 1. Inicjacja funkcji __checkIfFileExist w celu sprawdzenia czy plik 'config.cfg' istnieje
- 2. Zczytanie i zapisanie wszystkich danych z pliku 'config.cfg' do słownika content w formacie: 'nazwa zmiennej' : ['zmienna', 'typ zmiennej']
- 3. Inicjacja, odpowiedniej dla typu zmiennej, funkcji mającej na celu sprawdzenie jej poprawności i jej przetworzenie, dla każdego recordu ze słownika changes
- 4. Nadpisanie zmiennej ze słownika content, wartością var.
- 5. Zapisanie zawartości słownika content w pliku 'config.cfg'
- 6. Funkcja zwraca True jeżeli operacja została wykonana pomyślnie lub False jeżeli wystąpił błąd
-
-
- Funkcje sprawdzające istnienie
-
- __checkIfFileExist - funkcja sprawdza czy plik istnieje i możliwe jest jego nadpisanie (w przypadku zapisu)
- __checkIfRecordExist - funkcja sprawdza czy record istnieje w słowniku content
-
-
- Funkcje sprawdzające poprawność recordu
-
- Funkcje te odpowiadają za sprawdzenie poprawności zmiennej i w razie potrzeby przetwarzają ją na pożądaną formę.
-
- Klasa GUI odpowiedzialna jest za zarządzanie plikiem konfiguracyjnym 'style.cfg'
-
-
- Odczytywanie pojedyńczej zmiennej z pliku (R)
-
- Funkcja ta, jest odpowiedzialna za odczytanie zawartości danego recordu i sprawdzenie jego poprawności
- 1. Inicjacja funkcji __checkIfFileExist w celu sprawdzenia czy plik 'style.cfg' istnieje
- 2. Zczytanie i zapisanie wszystkich danych z pliku 'style.cfg' do słownika content w formacie: 'nazwa zmiennej' : ['zmienna', 'typ zmiennej']
- 3. Inicjacja funkcji __checkIfRecordExist w celu sprawdzenia czy w słowniku content znajduje się żądany record
- 4. Inicjacja, odpowiedniej dla typu zmiennej, funkcji mającej na celu sprawdzenie jej poprawności i jej przetworzenie
- Funkcja zwraca wartość zmiennej.
-
-
- Funkcje sprawdzające istnienie
-
- __checkIfFileExist - funkcja sprawdza czy plik istnieje
- __checkIfRecordExist - funkcja sprawdza czy record istnieje w słowniku content
-
-
- Funkcje sprawdzające poprawność recordu
-
- Funkcje te odpowiadają za sprawdzenie poprawności zmiennej i w razie potrzeby przetwarzają ją na pożądaną formę.
-
- Klasa FMT odpowiedzialna jest za zarządzanie plikami formatu (.fmt)
-
-
- Odczytywanie pojedyńczej zmiennej z pliku (R)
-
- Funkcja ta, jest odpowiedzialna za odczytanie zawartości danego recordu i sprawdzenie jego poprawności
- 1. Inicjacja funkcji __checkIfFolderExist w celu sprawdzenia czy folder 'format-presets' istnieje
- 2. Sprawdzenie czy podany plik formatu (preset) znajduje się w folderze 'format-presets' (funkcja getList zwraca listę plików formatu w folderze 'format-presets')
- Jeżeli nie, wartość zmiennej jest wybierana ze słownika content (zawierającego podstawowe wartości zmiennych)
- Jeżeli tak:
- 3. Zczytanie i zapisanie wszystkich danych z wybranego pliku formatu do słownika content w formacie: 'nazwa zmiennej' : ['zmienna', 'typ zmiennej']
- 4. Inicjacja funkcji __checkIfRecordExist w celu sprawdzenia czy w słowniku content znajduje się żądany record
- 5. Inicjacja, odpowiedniej dla typu zmiennej, funkcji mającej na celu sprawdzenie jej poprawności i jej przetworzenie
- Funkcja zwraca wartość zmiennej.
-
-
- Zapisywanie zmian w pliku (W)
-
- Funkcja ta jest odpowiedzialna za sprawdzenie, przetworzenie i zapisanie zmian w pliku konfiguracyjnych.
- 1. Inicjacja funkcji __checkIfFolderExist w celu sprawdzenia czy folder 'format-presets' istnieje
- 2. Sprawdzenie czy podany plik formatu (preset) znajduje się w folderze 'format-presets' (funkcja getList zwraca listę plików formatu w folderze 'format-presets')
- Jeżeli nie, tworzony jest słownik content z zawartością podstawową
- Jeżeli tak: Zczytanie i zapisanie wszystkich danych z wybranego pliku formatu do słownika content w formacie: 'nazwa zmiennej' : ['zmienna', 'typ zmiennej']
- 3. Inicjacja, odpowiedniej dla typu zmiennej, funkcji mającej na celu sprawdzenie jej poprawności i jej przetworzenie, dla każdego recordu ze słownika changes
- 4. Nadpisanie zmiennej ze słownika content, wartością var.
- 5. Zapisanie zawartości słownika content w pliku 'config.cfg'
- 6. Funkcja zwraca True jeżeli operacja została wykonana pomyślnie lub False jeżeli wystąpił błąd
-
-
- Funkcja zwracająca listę presetów (getList)
-
- Funkcja ta odpowiedzialna jest za stworzenie listy plików .fmt w folderze 'format-presets' oraz za jej zwrócenie.
-
-
- Funkcje sprawdzające istnienie
-
- __checkIfFolderExist - funkcja sprawdza czy folder 'format-presets' istnieje (inicjuje checkAppdata)
- __checkIfRecordExist - funkcja sprawdza czy record istnieje w słowniku content
-
-
- Funkcje sprawdzające poprawność recordu
-
- Funkcje te odpowiadają za sprawdzenie poprawności zmiennej i w razie potrzeby przetwarzają ją na pożądaną formę.
-
- Klasa dataProcess odpowiedzialna za przetwarzanie plików wejściowych i generowanie plików wyjściowych
-
-
- Główna funkcja klasy (start)
-
- Funkcja ta odpowiedzialna za zainicjowanie kolejnych funkcji w odpowiedniej kolejności oraz zwrócenie informacji o błędach lub pomyślnym wykonaniu polecenia
- 1. Inicjacja funkcji __checkIfAtLeastOneInputFileIsFilled w celu sprawdzenia czy przynajmniej jedno pole plików wejściowych zostało wypełnione
- 2. Inicjacja funkcji __checkIfInputFilesIsReadable w celu sprawdzenia czy pliki wejściowe, do których ścieżki zostały podane, są możliwe do odczytania
- 3. Inicjacja funkcji __checkIfInputFilesFormatPresetsExist w celu sprawdzenia czy format presety, które zostały wybrane, istnieją
- 4. Inicjacja funkcji __getData w celu zebrania danych z plików wejściowych
- 5. Dla każdego zbioru danych - for x in data (dla każdej osoby), inicjacja funkcji __checkLogin, __checkFname, __checkLname, oraz dla uczniów __checkSchool, __checkClass, w celu sprawdzenia poprawności danych
- 6. Inicjacja funkcji __processData w celu przetworzenia danych w linie gotowe do zapisania w plikach wyjściowych
- 7. Inicjacja funkcji __checkIfCreatingOutputFilesIsPossible w celu sprawdzenia czy możliwe jest utworzenie plików wyjściowych
- 8. Inicjacja funkcji __saveData w celu zapisania danych w plikach wyjściowych
- Funkcja zwraca listę zawierającą zmienne boolean potwierdzające w którym momencie zakończyło się wykonywanie funkcji (z powodu błędu lub pomyślnego ukończenia operacji)
-
-
- Funkcje sprawdzające istnienie
-
- __checkIfAtLeastOneInputFileIsFilled - sprawdza czy przynajmniej jedno pole plików wejściowych zostało wypełnione oraz zwraca dane z wypełnionych pól
- __checkIfInputFilesIsReadable - sprawdza czy pliki wejściowe są możliwe do odczytania
- __checkIfInputFilesFormatPresetsExist - sprawdza czy wybrane format presety istnieją
- __checkIfCreatingOutputFilesIsPossible - sprawdza czy utworzenie plików wyjściowych jest możliwe
-
-
- Funkcje sprawdzające poprawność
-
- Funkcje te sprawdzają poprawność określonych typów danych.
-
-
- Wyodrębnienie danych z plików (__getData)
-
- Funkcja odpowiedzialna jest za wyodrębnienie danych z pliku (path) na podstawie określonego format presetu (format)
- Dla każdego zbioru ścieżek plików wejściowych i format presetów (for x in input):
- 1. Pobranie danych z pliku formatu (za pomocą funkcji FMT.R)
- 2. Pobranie zawartości z pliku wyjściowego i podzielenie ich na zbiory danych pojedyńczych osób (.split(personseparator))
- Dla każdego zbioru danych pojedyńczych osób (for x in file):
- 3. Dzielenie zbioru danych na linie (x.split(linesSeparator))
- 4. Dla każdej linii: dzielenie danych na pojedyńcze segmenty separatorami z listy dataSeparators
- 5. Wyodrębnienie wymaganych danych ze zbioru
- 6. Dodanie danych pojedyńczej osoby do listy data
-
-
- Przetworzenie danych (__processData)
-
- Funkcja odpowiedzialna jest za przetworzenie danych w linie gotowe do zapisania w plikach wyjściowych
- Funkcja zwraca listę [mailData, officeData]
-
-
- Zapisanie danych (__saveData)
-
- Funkcja odpowiedzialna jest za zapisanie danych w plikach wyjściowych dla poczty i dla office
-
- Klasa GUI odpowiada za interfejs programu
-
-
- 1. Główna funkcja programu
-
- - Stworzenie okna
- - Inicjacja styli kontrolek
- - Kontrolki
-
-
- Akcje przycisków
-
- Funkcje inicjowane przez naciśnięcie przycisków
-