summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2015-09-01 22:56:09 +0200
committeremkael <emkael@tlen.pl>2015-09-01 22:56:09 +0200
commitfdb3aa6c1302f2bbb7c4ee384998088799193470 (patch)
treecfb159c095d8ea75a09ed46bfed6e799526351cf
parent337b6234d66a3e374ab33584c2927bce0a2c4692 (diff)
* build tools and environment
-rw-r--r--.gitignore1
-rw-r--r--BUILD.md96
-rw-r--r--README.md19
-rw-r--r--dist/virtual_table.exebin0 -> 6033276 bytes
-rw-r--r--src/.gitignore1
-rw-r--r--src/icon.icobin0 -> 67118 bytes
-rw-r--r--src/icon.xcfbin0 -> 9812 bytes
-rw-r--r--src/version39
-rw-r--r--src/virtual_table.py (renamed from virtual_table.py)0
-rw-r--r--virtual_table.spec17
10 files changed, 170 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 0d20b64..e69de29 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +0,0 @@
-*.pyc
diff --git a/BUILD.md b/BUILD.md
new file mode 100644
index 0000000..cb5a972
--- /dev/null
+++ b/BUILD.md
@@ -0,0 +1,96 @@
+
+JFR Pary - wirtualne stoliki: Informacje dla programistów
+=========================================================
+
+Struktura repozytorium kodu
+---------------------------
+
+Katalog [`src`](src) zawiera komponenty źródłowe programu:
+
+* [kod skryptu Pythona](src/virtual_table.py), który wykonuje całą robotę
+* [ikonę programu](src/icon.ico) wraz ze [źródłami](src/icon.xcf)
+* [metadane programu](src/version) dla PyInstallera
+
+Katalogi `dist` i `build` są domyślnie puste i są katalogami roboczymi
+PyInstallera.
+
+W katalogu głównym znajdują się rozmaite README oraz skrypty budujące program.
+
+Od zera do bohatera - proces budowania programu
+-----------------------------------------------
+
+Jedynym wymaganym do działania narzędzia elementem repozytorium jest źródłowy
+skrypt [`virtual_table.py`](src/virtual_table.py). Cała reszta to tylko
+fajerwerki i opakowanie w plik wykonywalny.
+
+Skrypt można uruchomić w dowolnym środowisku, w którym działa Python, a jego
+wymagania wymienione są poniżej. `virtual_table.py` przyjmuje parametry
+identycznie do wynikowego pliku wykonywalnego.
+
+---
+
+Pliku źródłowego można użyć jako modułu, jeśli kogoś to kręci, importując go
+do swojej aplikacji poprzez:
+```
+from virtual_table import JFRVirtualTable
+```
+
+---
+
+Skrypt można samodzielnie skompilować do pliku wykonywalnego, używając do tego
+PyInstallera. Można to zrobić z pomocą dołączonego pliku [`virtual_table.spec`](virtual_table.spec):
+```
+pyinstaller virtual_table.spec
+```
+lub samodzielnie, podając odpowiednie parametry do PyInstallera:
+```
+pyinstaller --onefile --version-file=src\version --icon=src\icon.ico src\virtual_table.py
+```
+Zarówno metadane z pliku `src/version`, jak i ikona programu są w 100% opcjonalne.
+
+Wynik działania PyInstallera (pojedynczy plik wykonywalny) znajdzie się w katalogu `dist`.
+
+Wymagania systemowe
+-------------------
+
+Skrypt [`virtual_table.py`](src/virtual_table.py):
+
+* python 2.x (testowane i tworzone w wersji 2.7.10)
+* BeautifulSoup4
+* lxml (jako parser dla BS4)
+* argparse
+
+Kompilacja do EXE:
+
+* [PyInstaller](http://pythonhosted.org/PyInstaller/)
+* PyWin32
+
+Kod żródłowy
+------------
+
+Kod źródłowy stara się, z grubsza:
+
+* zgadzać ze standardami [PEP8](https://www.python.org/dev/peps/pep-0008/)
+* nie robić [głupich rzeczy](http://stackoverflow.com/a/1732454)
+* nie psuć raz przekształconej strony przy próbie ponownego przekształcenia
+* komentować rzeczy nieoczywiste
+
+Operacje na stronach JFR
+------------------------
+
+Ramowy algorytm działania programu:
+
+0. Jeśli na wejściu nie podano konkretnych numerów "wirtualnych" par,
+skanowane są nagłówki plików historii (H-[PREFIKS]-[PARA].html). Puste
+nazwiska przyjmowane są jako pary z wirtualnych stolików.
+1. Z wyników ([PREFIKS]WYN.txt), pełnych wyników (W-[PREFIKS].html)
+oraz zbiorówek (jeśli istnieją, [PREFIKS]zbior.html) usuwane są wiersze,
+w których występują pary wirtualne.
+2. Z listy historii (H-[PREFIKS]-lista.html) usuwane są linki do historii
+par wirtualnych, a cała tabelka jest magicznie układana z powrotem w rządki.
+3. Z protokołów usuwane są zapisy par wirtualnych, poza jednym, który dostaje
+schludny nagłówek i przesuwany jest w dół protokołu.
+
+---
+
+`It will end no other way.`
diff --git a/README.md b/README.md
index 3c9de7f..eda71ae 100644
--- a/README.md
+++ b/README.md
@@ -20,23 +20,38 @@ Przykładowe efekty działania:
Wymagania systemowe
-------------------
+* system operacyjny MS Windows (testowane na Win7 i Win8.1)
+* sterownik ODBC dla plików MS Access (zwykle obecny domyślnie z Windows,
+weryfikowalny w Panelu Sterowania -> Narzędziach Administracyjnych ->
+Żródła danych ODBC)
+
+LUB
+
* python 2.x (testowane i tworzone w wersji 2.7.10)
* BeautifulSoup4
* lxml (jako parser dla BS4)
* argparse
+Kompilacja i praca z kodem narzędzia
+------------------------------------
+
+Patrz: [`BUILD.md`](BUILD.md)
+
Instalacja
----------
-Ściągnij zawartość tego repozytorium.
+Ściągnij plik wykonywalny z katalogu [`dist`](dist) tego repozytorium.
Już, gotowe.
+Na nie-Windowsach wystarczy w analogiczny sposób ściągnąć skrypt źródłowy
+Python: [`virtual_table.py`](src/virtual_table.py).
+
Użycie
------
```
-python virtual_table.py [-t OPIS_STOLIKA] PLIK_TURNIEJU.html [NR_PARY NR_PARY ...]
+virtual_table.exe [-t OPIS_STOLIKA] PLIK_TURNIEJU.html [NR_PARY NR_PARY ...]
```
Parametry wejściowe:
diff --git a/dist/virtual_table.exe b/dist/virtual_table.exe
new file mode 100644
index 0000000..071b4fd
--- /dev/null
+++ b/dist/virtual_table.exe
Binary files differ
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 0000000..0d20b64
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1 @@
+*.pyc
diff --git a/src/icon.ico b/src/icon.ico
new file mode 100644
index 0000000..4554f6f
--- /dev/null
+++ b/src/icon.ico
Binary files differ
diff --git a/src/icon.xcf b/src/icon.xcf
new file mode 100644
index 0000000..46d7416
--- /dev/null
+++ b/src/icon.xcf
Binary files differ
diff --git a/src/version b/src/version
new file mode 100644
index 0000000..d72eb36
--- /dev/null
+++ b/src/version
@@ -0,0 +1,39 @@
+# UTF-8
+VSVersionInfo(
+ ffi=FixedFileInfo(
+ filevers=(1, 0, 0, 0),
+ prodvers=(1, 0, 0, 0),
+ # Contains a bitmask that specifies the valid bits 'flags'
+ mask=0x3f,
+ # Contains a bitmask that specifies the Boolean attributes of the file.
+ flags=0x0,
+ # The operating system for which this file was designed.
+ # 0x4 - NT and there is no need to change it.
+ OS=0x4,
+ # The general type of file.
+ # 0x1 - the file is an application.
+ fileType=0x1,
+ # The function of the file.
+ # 0x0 - the function is not defined for this fileType
+ subtype=0x0,
+ # Creation date and time stamp.
+ date=(0, 0)
+ ),
+ kids=[
+ StringFileInfo(
+ [
+ StringTable(
+ u'040904b0', # 0x0409 = 1033 = English, 0x04b0 = 1200 = UTF-8
+ [StringStruct(u'CompanyName', u'emkael.info'),
+ StringStruct(u'ProductName', u'virtual_table'),
+ StringStruct(u'ProductVersion', u'1, 0, 0, 0'),
+ StringStruct(u'InternalName', u'virtual_table'),
+ StringStruct(u'OriginalFilename', u'virtual_table.exe'),
+ StringStruct(u'FileVersion', u'1, 0, 0, 0'),
+ StringStruct(u'FileDescription', u'Virtual table display for JFR Pary result pages'),
+ StringStruct(u'LegalCopyright', u'© 2015 mkl (Michał Klichowicz)'),
+ StringStruct(u'LegalTrademarks', u''),])
+ ]),
+ VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
+ ]
+)
diff --git a/virtual_table.py b/src/virtual_table.py
index 74a99b6..74a99b6 100644
--- a/virtual_table.py
+++ b/src/virtual_table.py
diff --git a/virtual_table.spec b/virtual_table.spec
new file mode 100644
index 0000000..bca9843
--- /dev/null
+++ b/virtual_table.spec
@@ -0,0 +1,17 @@
+import os
+a = Analysis(['src\\virtual_table.py'],
+ pathex=[os.path.abspath('.')],
+ hiddenimports=[],
+ hookspath=None,
+ runtime_hooks=None)
+pyz = PYZ(a.pure)
+exe = EXE(pyz,
+ a.scripts,
+ a.binaries,
+ a.zipfiles,
+ a.datas,
+ name='virtual_table.exe',
+ debug=False,
+ strip=None,
+ upx=True,
+ console=True , version='src\\version', icon='src\\icon.ico')