4.0 Alpha (Build 20016)
13
.idea/GeneratorCSV 3.1.iml
generated
@@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="PYTHON_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/modules" isTestSource="false" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
<component name="TestRunnerService">
|
|
||||||
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<settings>
|
|
||||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
|
||||||
<version value="1.0" />
|
|
||||||
</settings>
|
|
||||||
</component>
|
|
||||||
7
.idea/misc.xml
generated
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="JavaScriptSettings">
|
|
||||||
<option name="languageLevel" value="ES6" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (Zadanie 4)" project-jdk-type="Python SDK" />
|
|
||||||
</project>
|
|
||||||
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/GeneratorCSV 3.1.iml" filepath="$PROJECT_DIR$/.idea/GeneratorCSV 3.1.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
114
.idea/workspace.xml
generated
@@ -1,114 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ChangeListManager">
|
|
||||||
<list default="true" id="a4251987-c37e-4856-aaee-adde546bed78" name="Default Changelist" comment="" />
|
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
|
||||||
</component>
|
|
||||||
<component name="FileTemplateManagerImpl">
|
|
||||||
<option name="RECENT_TEMPLATES">
|
|
||||||
<list>
|
|
||||||
<option value="Python Script" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="Git.Settings">
|
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectId" id="1ULHfQb5VkZDNLqAqiV5YEYWfmE" />
|
|
||||||
<component name="PropertiesComponent">
|
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
|
||||||
<property name="settings.editor.selected.configurable" value="preferences.lookFeel" />
|
|
||||||
</component>
|
|
||||||
<component name="RunDashboard">
|
|
||||||
<option name="ruleStates">
|
|
||||||
<list>
|
|
||||||
<RuleState>
|
|
||||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
|
||||||
</RuleState>
|
|
||||||
<RuleState>
|
|
||||||
<option name="name" value="StatusDashboardGroupingRule" />
|
|
||||||
</RuleState>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="RunManager">
|
|
||||||
<configuration name="generator" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
|
||||||
<module name="GeneratorCSV 3.1" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="PARENT_ENVS" value="true" />
|
|
||||||
<envs>
|
|
||||||
<env name="PYTHONUNBUFFERED" value="1" />
|
|
||||||
</envs>
|
|
||||||
<option name="SDK_HOME" value="" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="IS_MODULE_SDK" value="true" />
|
|
||||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
|
||||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
|
||||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
||||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/generator.py" />
|
|
||||||
<option name="PARAMETERS" value="" />
|
|
||||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
|
||||||
<option name="EMULATE_TERMINAL" value="false" />
|
|
||||||
<option name="MODULE_MODE" value="false" />
|
|
||||||
<option name="REDIRECT_INPUT" value="false" />
|
|
||||||
<option name="INPUT_FILE" value="" />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
<recent_temporary>
|
|
||||||
<list>
|
|
||||||
<item itemvalue="Python.generator" />
|
|
||||||
</list>
|
|
||||||
</recent_temporary>
|
|
||||||
</component>
|
|
||||||
<component name="SvnConfiguration">
|
|
||||||
<configuration />
|
|
||||||
</component>
|
|
||||||
<component name="TaskManager">
|
|
||||||
<task active="true" id="Default" summary="Default task">
|
|
||||||
<changelist id="a4251987-c37e-4856-aaee-adde546bed78" name="Default Changelist" comment="" />
|
|
||||||
<created>1575129057993</created>
|
|
||||||
<option name="number" value="Default" />
|
|
||||||
<option name="presentableId" value="Default" />
|
|
||||||
<updated>1575129057993</updated>
|
|
||||||
<workItem from="1575129059395" duration="10526000" />
|
|
||||||
<workItem from="1575190894436" duration="18504000" />
|
|
||||||
<workItem from="1575210569237" duration="2431000" />
|
|
||||||
<workItem from="1575490006287" duration="48000" />
|
|
||||||
<workItem from="1576401956701" duration="4897000" />
|
|
||||||
<workItem from="1576407152914" duration="5325000" />
|
|
||||||
<workItem from="1576412749235" duration="7110000" />
|
|
||||||
<workItem from="1576512214017" duration="18989000" />
|
|
||||||
<workItem from="1576602751700" duration="601000" />
|
|
||||||
<workItem from="1576774425640" duration="14534000" />
|
|
||||||
<workItem from="1576793801825" duration="187000" />
|
|
||||||
<workItem from="1576880469699" duration="1987000" />
|
|
||||||
<workItem from="1576916355983" duration="4227000" />
|
|
||||||
</task>
|
|
||||||
<servers />
|
|
||||||
</component>
|
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
|
||||||
<option name="version" value="1" />
|
|
||||||
</component>
|
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
|
||||||
<option name="TAB_STATES">
|
|
||||||
<map>
|
|
||||||
<entry key="MAIN">
|
|
||||||
<value>
|
|
||||||
<State>
|
|
||||||
<option name="COLUMN_ORDER" />
|
|
||||||
</State>
|
|
||||||
</value>
|
|
||||||
</entry>
|
|
||||||
</map>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
|
||||||
<SUITE FILE_PATH="coverage/GeneratorCSV_3_1$generator.coverage" NAME="generator Coverage Results" MODIFIED="1575142941417" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
|
||||||
<SUITE FILE_PATH="coverage/Wersja_Under_Construction$generator.coverage" NAME="generator Coverage Results" MODIFIED="1575214162661" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
|
||||||
<SUITE FILE_PATH="coverage/Generator_CSV$generator.coverage" NAME="generator Coverage Results" MODIFIED="1576923552814" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
BIN
assets/icon.ico
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
assets/other_images/icon.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
assets/tab_icons/generate.png
Normal file
|
After Width: | Height: | Size: 623 B |
BIN
assets/tab_icons/icon.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
assets/tab_icons/info.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/tab_icons/link.png
Normal file
|
After Width: | Height: | Size: 631 B |
BIN
assets/tab_icons/merge.png
Normal file
|
After Width: | Height: | Size: 882 B |
BIN
assets/tab_icons/settings.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
@@ -52,3 +52,10 @@
|
|||||||
- Naprawienie przycisków filedialog
|
- Naprawienie przycisków filedialog
|
||||||
- Zmiana zmiennej treści błędu na string
|
- Zmiana zmiennej treści błędu na string
|
||||||
- Ulepszona obsługa wyjątków dla ładowania pliku konfiguracyjnego, formatu i 'readme.txt'
|
- Ulepszona obsługa wyjątków dla ładowania pliku konfiguracyjnego, formatu i 'readme.txt'
|
||||||
|
|
||||||
|
4.0 Alpha (Build 20016)
|
||||||
|
- Całkowite przeprojektowanie interfejsu
|
||||||
|
- Całkowite przeprojektowanie struktury plików programu
|
||||||
|
- Przywrócenie systemu crashlogów
|
||||||
|
- Ukończenie karty 'informacje'
|
||||||
|
- Użycie skryptu instalującego automatycznie bibliotekę PIL
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
Ciemny motyw(0/1): 1
|
|
||||||
Kodowanie wyjsciowe: utf-8
|
|
||||||
Domena: losobolew.pl
|
|
||||||
Quota: 500
|
|
||||||
Kraj: Rzeczypospolita Polska
|
|
||||||
Dlugosc liceum: 4
|
|
||||||
Dlugosc branzowej: 3
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
K O N, I X L X
|
|
||||||
Q
|
|
||||||
<separator>
|
|
||||||
N, I X L X
|
|
||||||
Q
|
|
||||||
1032
generator.py
@@ -1,105 +0,0 @@
|
|||||||
"""
|
|
||||||
# GeneratorCSV
|
|
||||||
# Wersja 4.0 Experimental
|
|
||||||
# by Mateusz Skoczek
|
|
||||||
# luty 2019 - grudzień 2019
|
|
||||||
# dla ZSP Sobolew
|
|
||||||
|
|
||||||
#
|
|
||||||
# Moduł wywołujący okna dialogowe
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------- # Kody dialogowe # ------------------------------------------------- #
|
|
||||||
|
|
||||||
E = [] # Błędy
|
|
||||||
E.append(["Nie znaleziono pliku konfiguracyjnego (config.cfg).\nPrzywróć plik. (E01x0001)", True]) #0
|
|
||||||
E.append(["Błąd pliku konfiguracyjnego (config.cfg).\nNiepoprawna ilość wierszy w pliku\nPrzywróć plik. (E01x0011)", True]) #1
|
|
||||||
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 1\nPrzywróć plik. (E01x0021)", True]) #2
|
|
||||||
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 2\nPrzywróć plik. (E01x0022)", True]) #3
|
|
||||||
E.append(["Nie znaleziono pliku składowego (readme.txt)\nPrzywróć plik. (E03x0011)", False]) #4
|
|
||||||
E.append(["Nie znaleziono pliku formatu (format.fmt).\nPrzywróć plik (E02x0000)", True]) #5
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników klasy w formacie uczniów nie jest równa 1 (E02x0102)", False]) #6
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników oddziału w formacie uczniów nie jest równa 1 (E02x0103)", False]) #7
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników nazwiska w formacie uczniów nie jest równa 1 (E02x0104)", False]) #8
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników imienia w formacie uczniów nie jest równa 1 (E02x0105)", False]) #9
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie uczniów.\nIlość znaczników loginu w formacie uczniów nie jest równa 1 (E02x0106)", False]) #10
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nPusty wiersz w formacie uczniów (E02x0101).", False]) #11
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nPusty wiersz w formacie nauczycieli (E02x0111).", False]) #12
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie nauczycieli.\nIlość znaczników nazwiska w formacie nauczycieli nie jest równa 1 (E02x0112)", False]) #13
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie nauczycieli.\nIlość znaczników imienia w formacie nauczycieli nie jest równa 1 (E02x0113)", False]) #14
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNie poprawne dane w formacie nauczycieli.\nIlość znaczników loginu w formacie nauczycieli nie jest równa 1 (E02x0114)", False]) #15
|
|
||||||
E.append(["Błąd pliku formatu (format.fmt).\nNiedozwolone znaki w formacie. (E02x0120).", False]) #16
|
|
||||||
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 4\nPrzywróć plik. (E01x0023)", True]) #17
|
|
||||||
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 6\nPrzywróć plik. (E01x0024)", True]) #18
|
|
||||||
E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 7\nPrzywróć plik. (E01x0025)", True]) #19
|
|
||||||
E.append(["Nieznany błąd podczas ładowania pliku konfiguracyjnego (config.cfg). (E01x0000)", True]) #20
|
|
||||||
E.append(["Nieznany błąd podczas ładowania pliku formatu (format.fmt)). (E02x0000)", True]) #21
|
|
||||||
E.append(["Nieznany błąd podczas ładowania pliku składowego (readme.txt) (E03x0011)", False]) #22
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
I = [] # Informacje
|
|
||||||
I.append(["Pomyślnie zapisano!\nDla niektórych zmian może być wymagane ponowne uruchomienie programu", False]) #0 (I0001)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
A = [] # Zapytania
|
|
||||||
A.append("Czy na pewno chcesz rozpocząć generowanie?") #0 (A0001)
|
|
||||||
A.append("Czy chcesz zapisać ustawienia?") #1 (A0002)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ #
|
|
||||||
|
|
||||||
# Biblioteki zewnętrzne
|
|
||||||
import sys as SS
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Biblioteki zewnętrzne interfejsu graficznego
|
|
||||||
from tkinter import messagebox as TKmsb
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------- # Funkcje # ---------------------------------------------------- #
|
|
||||||
|
|
||||||
# Okno dialogowe błędu
|
|
||||||
def err(ErrorIndex):
|
|
||||||
Message = 'Wystąpił błąd!\n' + E[ErrorIndex][0]
|
|
||||||
TKmsb.showerror('Błąd', Message)
|
|
||||||
if E[ErrorIndex][1]:
|
|
||||||
SS.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Okno dialogowe informacyjne
|
|
||||||
def inf(InfoIndex):
|
|
||||||
TKmsb.showinfo('Informacja', I[InfoIndex][0])
|
|
||||||
if I[InfoIndex][1]:
|
|
||||||
SS.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Okno dialogowe zapytania
|
|
||||||
def ask(AskIndex):
|
|
||||||
if TKmsb.askokcancel('Pytanie', A[AskIndex]):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
"""
|
|
||||||
# GeneratorCSV
|
|
||||||
# Wersja 4.0 Experimental
|
|
||||||
# by Mateusz Skoczek
|
|
||||||
# luty 2019 - grudzień 2019
|
|
||||||
# dla ZSP Sobolew
|
|
||||||
|
|
||||||
#
|
|
||||||
# Moduł zarządzający plikiem konfiguracyjnym
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ #
|
|
||||||
|
|
||||||
# Biblioteki zewnętrzne
|
|
||||||
import sys as SS
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Moduły składowe programu
|
|
||||||
try:
|
|
||||||
from modules import dialog as MDdlg
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
print('Wystąpił krytyczny błąd!')
|
|
||||||
print('Nie znaleziono jednego z modułów programu (dialog.py). Nie można załadować programu')
|
|
||||||
print('Kod błędu: E00x0011')
|
|
||||||
wait = input('Naciśnij ENTER aby wyjść')
|
|
||||||
SS.exit(0)
|
|
||||||
except Exception as exc:
|
|
||||||
print('Wystąpił krytyczny błąd!')
|
|
||||||
print('Nieznany błąd podczas ładowania jednego z modułów programu (dialog.py). Nie można załadować programu.')
|
|
||||||
print('Treść błędu: ' + str(exc))
|
|
||||||
print('Kod błędu: E00x0010')
|
|
||||||
wait = input('Naciśnij ENTER aby wyjść')
|
|
||||||
SS.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------- # Funkcje # ---------------------------------------------------- #
|
|
||||||
|
|
||||||
# Wewnętrzna funkcja sprawdzająca błędy pliku konfiguracyjnego
|
|
||||||
def CheckConfig(settings):
|
|
||||||
# Ilość wierszy
|
|
||||||
try:
|
|
||||||
if len(settings) != 7:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(1)
|
|
||||||
|
|
||||||
# Linia 1 (0/1)
|
|
||||||
try:
|
|
||||||
check = int(settings[0])
|
|
||||||
if 0 > check > 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(2)
|
|
||||||
# Linia 2 (utf-8)
|
|
||||||
|
|
||||||
DostepneKodowanieWyjsciowe = ['utf-8']
|
|
||||||
try:
|
|
||||||
if settings[1] not in DostepneKodowanieWyjsciowe:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(3)
|
|
||||||
|
|
||||||
# Linia 4 (int)
|
|
||||||
try:
|
|
||||||
x = int(settings[3])
|
|
||||||
except:
|
|
||||||
MDdlg.err(17)
|
|
||||||
|
|
||||||
# Linia 6 (int)
|
|
||||||
try:
|
|
||||||
x = int(settings[5])
|
|
||||||
except:
|
|
||||||
MDdlg.err(18)
|
|
||||||
|
|
||||||
# Linia 7 (int)
|
|
||||||
try:
|
|
||||||
x = int(settings[6])
|
|
||||||
except:
|
|
||||||
MDdlg.err(19)
|
|
||||||
|
|
||||||
|
|
||||||
# Odczytywanie ustawień z pliku konfiguracyjnego
|
|
||||||
def read():
|
|
||||||
try:
|
|
||||||
check = open('.\config.cfg')
|
|
||||||
except FileNotFoundError:
|
|
||||||
MDdlg.err(0)
|
|
||||||
except:
|
|
||||||
MDdlg.err(20)
|
|
||||||
else:
|
|
||||||
with open('.\config.cfg', 'r') as cfg:
|
|
||||||
config = cfg.read().split('\n')
|
|
||||||
settings = []
|
|
||||||
for x in config:
|
|
||||||
settings.append(x.split(': ')[1])
|
|
||||||
CheckConfig(settings)
|
|
||||||
return settings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Zapis ustawień do pliku konfiguracyjnego
|
|
||||||
def edit(settings):
|
|
||||||
CheckConfig(settings)
|
|
||||||
try:
|
|
||||||
check = open('.\config.cfg')
|
|
||||||
except FileNotFoundError:
|
|
||||||
MDdlg.err(0)
|
|
||||||
except:
|
|
||||||
MDdlg.err(20)
|
|
||||||
else:
|
|
||||||
SettingsToSave = []
|
|
||||||
SettingsToSave.append('Ciemny motyw(0/1): ' + str(settings[0]) + '\n')
|
|
||||||
SettingsToSave.append('Kodowanie wyjsciowe: ' + str(settings[1]) + '\n')
|
|
||||||
SettingsToSave.append('Domena: ' + str(settings[2]) + '\n')
|
|
||||||
SettingsToSave.append('Quota: ' + str(settings[3]) + '\n')
|
|
||||||
SettingsToSave.append('Kraj: ' + str(settings[4]) + '\n')
|
|
||||||
SettingsToSave.append('Dlugosc liceum: ' + str(settings[5]) + '\n')
|
|
||||||
SettingsToSave.append('Dlugosc branzowej: ' + str(settings[6]))
|
|
||||||
with open('.\config.cfg', 'w') as cfg:
|
|
||||||
for x in SettingsToSave:
|
|
||||||
cfg.write(x)
|
|
||||||
@@ -1,249 +0,0 @@
|
|||||||
"""
|
|
||||||
# GeneratorCSV
|
|
||||||
# Wersja 4.0 Experimental
|
|
||||||
# by Mateusz Skoczek
|
|
||||||
# luty 2019 - grudzień 2019
|
|
||||||
# dla ZSP Sobolew
|
|
||||||
|
|
||||||
#
|
|
||||||
# Moduł zarządzający plikiem formatu
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ #
|
|
||||||
|
|
||||||
# Biblioteki zewnętrzne
|
|
||||||
import sys as SS
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Moduły składowe programu
|
|
||||||
try:
|
|
||||||
from modules import dialog as MDdlg
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
print('Wystąpił krytyczny błąd!')
|
|
||||||
print('Nie znaleziono jednego z modułów programu (dialog.py). Nie można załadować programu')
|
|
||||||
print('Kod błędu: E00x0011')
|
|
||||||
wait = input('Naciśnij ENTER aby wyjść')
|
|
||||||
SS.exit(0)
|
|
||||||
except Exception as exc:
|
|
||||||
print('Wystąpił krytyczny błąd!')
|
|
||||||
print('Nieznany błąd podczas ładowania jednego z modułów programu (dialog.py). Nie można załadować programu.')
|
|
||||||
print('Treść błędu: ' + str(exc))
|
|
||||||
print('Kod błędu: E00x0010')
|
|
||||||
wait = input('Naciśnij ENTER aby wyjść')
|
|
||||||
SS.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------- # Funkcje # ---------------------------------------------------- #
|
|
||||||
|
|
||||||
# Wewnętrzna funkcja sprawdzająca błędy pliku formatu
|
|
||||||
def CheckFormat(Read, format):
|
|
||||||
poprawne = True
|
|
||||||
check = True
|
|
||||||
while check:
|
|
||||||
# Uczniowie
|
|
||||||
uczniowiefmt = ''
|
|
||||||
for x in format[0]:
|
|
||||||
uczniowiefmt += x
|
|
||||||
|
|
||||||
# Sprawdzanie pustych linii
|
|
||||||
try:
|
|
||||||
if format[0].count('') > 0:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(11)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter K
|
|
||||||
try:
|
|
||||||
if uczniowiefmt.count('K') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(6)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter O
|
|
||||||
try:
|
|
||||||
if uczniowiefmt.count('O') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(7)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter N
|
|
||||||
try:
|
|
||||||
if uczniowiefmt.count('N') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(8)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter I
|
|
||||||
try:
|
|
||||||
if uczniowiefmt.count('I') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(9)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter L
|
|
||||||
try:
|
|
||||||
if uczniowiefmt.count('L') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(10)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
# Nauczyciele
|
|
||||||
nauczycielefmt = ''
|
|
||||||
for x in format[1]:
|
|
||||||
nauczycielefmt += x
|
|
||||||
|
|
||||||
# Sprawdzanie pustych linii
|
|
||||||
try:
|
|
||||||
if format[1].count('') > 0:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(12)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter N
|
|
||||||
try:
|
|
||||||
if nauczycielefmt.count('N') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(13)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter I
|
|
||||||
try:
|
|
||||||
if nauczycielefmt.count('I') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(14)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
# Sprawdzanie ilości liter L
|
|
||||||
try:
|
|
||||||
if nauczycielefmt.count('L') != 1:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(15)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
# Sprawdzanie poprawności znaków
|
|
||||||
NiedozwoloneZnaki = ['1','2','3','4','5','6','7','8','9','0','W','E','R','T','Y','U','P','A','S','D','F','G','H','J','Z','C','V','B','M']
|
|
||||||
try:
|
|
||||||
for x in NiedozwoloneZnaki:
|
|
||||||
if x in nauczycielefmt+uczniowiefmt:
|
|
||||||
error = int('x')
|
|
||||||
except:
|
|
||||||
MDdlg.err(16)
|
|
||||||
if Read:
|
|
||||||
SS.exit(0)
|
|
||||||
else:
|
|
||||||
poprawne = False
|
|
||||||
break
|
|
||||||
check = False
|
|
||||||
if not Read:
|
|
||||||
return poprawne
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Odczytywanie ustawień z pliku formatu
|
|
||||||
def read():
|
|
||||||
try:
|
|
||||||
check = open(r'.\format.fmt')
|
|
||||||
except FileNotFoundError:
|
|
||||||
MDdlg.err(5)
|
|
||||||
except:
|
|
||||||
MDdlg.err(21)
|
|
||||||
else:
|
|
||||||
with open(r'.\format.fmt', 'r') as fmt:
|
|
||||||
fmt = fmt.read().split('\n<separator>\n')
|
|
||||||
format = []
|
|
||||||
for x in fmt:
|
|
||||||
format.append(x.split('\n'))
|
|
||||||
CheckFormat(True, format)
|
|
||||||
return format
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Zapis ustawień do pliku formatu
|
|
||||||
def edit(format):
|
|
||||||
xformat = []
|
|
||||||
for x in format:
|
|
||||||
xformat.append(x.split('\n')[:-1])
|
|
||||||
if CheckFormat(False, xformat):
|
|
||||||
try:
|
|
||||||
check = open(r'.\format.fmt')
|
|
||||||
except FileNotFoundError:
|
|
||||||
MDdlg.err(5)
|
|
||||||
except:
|
|
||||||
MDdlg.err(21)
|
|
||||||
else:
|
|
||||||
FormatToSaveX = []
|
|
||||||
for x in xformat:
|
|
||||||
FormatToSaveX.append('\n'.join(x))
|
|
||||||
FormatToSave = FormatToSaveX[0] + '\n<separator>\n' + FormatToSaveX[1]
|
|
||||||
with open(r'.\format.fmt', 'w') as fmt:
|
|
||||||
fmt.write(FormatToSave)
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
107
readme.txt
@@ -1,107 +0,0 @@
|
|||||||
Program tworzy pliki .csv potrzebne do stworzenia kont uczniów i nauczycieli na szkolnej poczcie i Office 365.
|
|
||||||
Obecnie program obsługuje tylko 4 pliki z danymi. Program tworzy pliki 'email.csv' do eksportu dla szkolnej poczty oraz 'office.csv' do eksportu dla kont office.
|
|
||||||
Obecna wersja: 3.0
|
|
||||||
Autorzy: Mateusz Skoczek
|
|
||||||
dla ZSP Sobolew
|
|
||||||
luty 2019 - grudzień 2019
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Format domyślny plików z danymi:
|
|
||||||
|
|
||||||
Legenda:
|
|
||||||
X - Dane nieznaczące
|
|
||||||
Q - Pusta linia
|
|
||||||
|
|
||||||
Uczniowie:
|
|
||||||
# <Klasa> <Nazwisko>, <Imie> <X> <Login do librusa> <X>
|
|
||||||
# <Q>
|
|
||||||
|
|
||||||
# Przykład:
|
|
||||||
# 1a BS Nowak, Adam <NieznaczaceDane> 1234567u <NieznaczaceDane>
|
|
||||||
#
|
|
||||||
|
|
||||||
Nauczyciele:
|
|
||||||
# <Nazwisko>, <Imie> <X> <Login do Librusa> <X>
|
|
||||||
# <Q>
|
|
||||||
|
|
||||||
# Przykład:
|
|
||||||
# Nowak, Adam <NieznaczaceDane> 1234567 <NieznaczaceDane>
|
|
||||||
#
|
|
||||||
|
|
||||||
Format można edytować w pliku 'format.py'. Więcej info na dole.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Format domyślny pliku 'office.csv':
|
|
||||||
Uczniowie:
|
|
||||||
# <email>,<imie>,<nazwisko>,<imie nazwisko>,uczeń,<klasa>,,,,,,,,,Rzeczpospolita Polska
|
|
||||||
|
|
||||||
# Przykład:
|
|
||||||
# adam.nowak@losobolew.pl,Adam,Nowak,Adam Nowak,uczeń,1a BS,,,,,,,,,Rzeczpospolita Polska
|
|
||||||
|
|
||||||
Nauczyciele:
|
|
||||||
# <email>,<imie>,<nazwisko>,<imie nazwisko>,nauczyciel,,,,,,,,,,Rzeczpospolita Polska
|
|
||||||
|
|
||||||
# Przykład:
|
|
||||||
# adam.nowak@losobolew.pl,Adam,Nowak,Adam Nowak,nauczyciel,,,,,,,,,,Rzeczpospolita Polska
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Format domyślny pliku 'email.csv':
|
|
||||||
Uczniowie:
|
|
||||||
# <email>,<haslo>,500
|
|
||||||
|
|
|
||||||
v
|
|
||||||
# <imie>.<nazwisko><znacznikklasy:rokukonczeniaszkoly + literaklasy/bs>@losobolew.pl,<loginlibrusa>:<inicjaly>,500
|
|
||||||
|
|
||||||
# Przykład:
|
|
||||||
# adam.nowak2021bs@losobolew.pl,1234567u,500
|
|
||||||
|
|
||||||
Nauczyciele:
|
|
||||||
# <email>,<haslo>,500
|
|
||||||
|
|
|
||||||
v
|
|
||||||
# <imie>.<nazwisko>@losobolew.pl,<loginlibrusa>:<inicjaly>,500
|
|
||||||
|
|
||||||
# Przykład:
|
|
||||||
# adam.nowak@losobolew.pl,1234567,500
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Dalsze pojęcia:
|
|
||||||
błąd programu - błąd programu objawiający się komunikatem
|
|
||||||
krytyczny błąd programu - nieoczekiwany błąd programu nieobjawiający się komunikatem
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Pliki:
|
|
||||||
|
|
||||||
changelog.txt
|
|
||||||
Informacje o zmianach w poszczególnych wersjach programu.
|
|
||||||
|
|
||||||
generator.py
|
|
||||||
Główny plik programu. Jakiekolwiek naruszenie jego zawartości może spowodować krytyczny błąd programu.
|
|
||||||
|
|
||||||
instrukcja.txt
|
|
||||||
Plik z instrukcją użytkowania. Usunięcie tego pliku spowoduje błąd programu.
|
|
||||||
|
|
||||||
config.cfg
|
|
||||||
Plik zawiera ukryte ustawienia programu. Można go edytować, ale należy robić to z rozwagą. Usunięcie go spowoduje błąd programu.
|
|
||||||
1: Obsługiwane kodowania: 'utf-8', 'cp1252', 'iso-8859-1'
|
|
||||||
|
|
||||||
moduly.py
|
|
||||||
Plik zawierający moduły niezbędne do działania programu. Usunięcie pliku spowoduje błąd programu. Naruszenie jego zawartości może spowodować krytyczny błąd programu.
|
|
||||||
|
|
||||||
format.py
|
|
||||||
Plik ten jest skryptem przetwarzającym dane. W razie zmiany formatu pliku z danymi należy go edytować, lecz nie powinna tego robić osoba początkująca, gdyż błędny kod może spowodować krytyczny błąd programu lub niepożądane wyniki. Usunięcie pliku spowoduje błąd programu.
|
|
||||||
BIN
src/__pycache__/vars.cpython-38.pyc
Normal file
102
src/vars.py
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
"""
|
||||||
|
# Generator CSV
|
||||||
|
# 4.0 Experimental
|
||||||
|
# by Mateusz Skoczek
|
||||||
|
# styczeń 2019 - luty 2020
|
||||||
|
# dla ZSP Sobolew
|
||||||
|
|
||||||
|
#
|
||||||
|
# Zmienne
|
||||||
|
#
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------- # Informacje o programie # ------------------------ #
|
||||||
|
|
||||||
|
class prgInfo:
|
||||||
|
name = 'Generator CSV' # Nazwa programu
|
||||||
|
school = 'ZSP Sobolew' # Nazwa szkoły
|
||||||
|
version = '4.0 Experimental' # Wersja programu
|
||||||
|
years = '2019 - 2020' # Lata pracy na programem
|
||||||
|
authors = ['Mateusz Skoczek'] # Autorzy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------- # Zmienne środowiska graficznego # -------------------- #
|
||||||
|
|
||||||
|
class guiVars:
|
||||||
|
# Wymiary
|
||||||
|
class dimension:
|
||||||
|
# Karty
|
||||||
|
iconTab = 20 # Wielkość ikon w kartach
|
||||||
|
borderTab = 0 # Szerokość ramki kart
|
||||||
|
iconPaddingTab = 8 # Margines kart
|
||||||
|
tabWindowBorderWidth = 0 # Szerokość ramki okna kart
|
||||||
|
|
||||||
|
# Nagłówki kart
|
||||||
|
tabHeaderHeight = 8 # Wysokość nagłówka
|
||||||
|
tabHeaderWidth = 80 # Szerokość nagłówka
|
||||||
|
|
||||||
|
# Informacje
|
||||||
|
programIconInInfo = 100 # Szerokość/wysokość ikony
|
||||||
|
programIconInInfoPlace = 150 # Wysokość kontrolki zawierającej ikonę
|
||||||
|
separator1Height = 2 # Wysokość separator1
|
||||||
|
separator2Height = 1 # Wysokość separator2
|
||||||
|
separator3Height = 4 # Wysokość separator3
|
||||||
|
|
||||||
|
|
||||||
|
# Kolory
|
||||||
|
class color:
|
||||||
|
# Głowne
|
||||||
|
mainBG = '#21242D' # Głowne tło
|
||||||
|
|
||||||
|
# Karty
|
||||||
|
unselectedTabBG = '#21242D' # Niewybrana karta
|
||||||
|
selectedTabBG = '#333842' # Wybrana karta
|
||||||
|
|
||||||
|
# Nagłowki kart
|
||||||
|
headerBG = '#282C34' # Tło
|
||||||
|
headerText = '#C0C0C0' # Tekst
|
||||||
|
|
||||||
|
|
||||||
|
# Grafika
|
||||||
|
class image:
|
||||||
|
# Ikona programu
|
||||||
|
programIcon = 'assets/icon.ico'
|
||||||
|
programIconOther = 'assets/other_images/icon.png'
|
||||||
|
|
||||||
|
# Ikony kart
|
||||||
|
iconTab = 'assets/tab_icons/icon.png'
|
||||||
|
generateTab = 'assets/tab_icons/generate.png'
|
||||||
|
linkTab = 'assets/tab_icons/link.png'
|
||||||
|
mergeTab = 'assets/tab_icons/merge.png'
|
||||||
|
settingsTab = 'assets/tab_icons/settings.png'
|
||||||
|
infoTab = 'assets/tab_icons/info.png'
|
||||||
|
|
||||||
|
|
||||||
|
# Czcionki
|
||||||
|
class fonts:
|
||||||
|
# Główne
|
||||||
|
tabHeader = ['Segoe UI', 12] # Nagłowki
|
||||||
|
|
||||||
|
# Informacje
|
||||||
|
info1 = ['Segoe UI'] # Czcionka
|
||||||
|
info1.append(20) # Wielkość tekstu - Nazwa programu
|
||||||
|
info1.append(10) # Wielkość tekstu - Wersja programu
|
||||||
|
info1.append(8) # Wielkość tekstu - Copyright
|
||||||
|
info1.append(8) # Wielkość tekstu - Autorzy
|
||||||
|
|
||||||
|
|
||||||
|
# Inne
|
||||||
|
class other:
|
||||||
|
# Ustawienia okna
|
||||||
|
windowHeightResize = False # Rozszerzanie okna w pionie
|
||||||
|
windowWidthResize = False # Rozszerzanie okna w poziomie
|
||||||
|
|
||||||
|
# Ustawienia kart
|
||||||
|
tabPosition = 'wn' # Pozycja kart
|
||||||