W QFakturach od wersji 0.6.2 dodano obsługę skryptów pythona. Podstawową zaletą pythona jest możliwość współpracy z Qt a co za tym idzie łatwość tworzenia interfejsu. Dlatego też skrypty mogą nie tylko wykonywać zdefiniowane w nich funkcje ale także mogą komunikować się z użytkownikiem. Ten artykuł opisuje jak stworzyć skrypt PyQt4, który zarchiwizuje dane programu QFaktury w podanym przez użytkownika folderze.
QFaktury + python Program QFaktury podczas ładowania przeszukuje folder ~/elinux/plugins w poszukiwaniu plików *.py. Jeśli takowe znajdzie czyta dwie pierwsze linie z takiego pliku. Pierwsza ignoruje gdyż powinno tu być: #!/usr/bin/python. Drugą natomiast dodaje do menu Dodatki w programie QFaktury. Tak więc program QFaktury ma możliwość wykonania dowolnego skryptu *.py z katalogu ~/elinux/plugins
PyQt4 Aby można było używać skryptów pythona należy oczywiście mieć pythona zainstalowanego. Nie spotkałem jeszcze dystrybucji Linuksa wydanej po 2005, w której pythona by nie było. Tak więc najprawdopodobniej wszystko jest na miejscu. Aby móc wykonać skrypty PyQt4 (skupimy się na Qt4 gdyż Qt3 nie jest już rozwijane) musimy mieć zainstalowany binding PyQt4. Aby to zainstalować wystarczy na fedorze:
yum install PyQt4
a na debianie:
apt-get install python-qt4 python-qt4-common
W innych dystrybucjach też z pewnością są paczki do PyQt4.
Python archiwizacja danych Na początku tworzenia skryptu damy mu możliwość podłączenia do QFaktur poprzez nagłówek:
#!/usr/bin/python
# Archiwizacja danych
W tym przypadku „Archiwizacja danych” pojawi się w menu dodatki.
Python moduly Do wykonania skutecznej archiwizacji będziemy potrzebować poniższych modułow:
import os
import tarfile
import time
os – da nam możliwość do poruszania się po systemie plików tarfile – stworzy archiwum time – zostanie użyty przy tworzeniu nazwy pliku archiwum
Archiwizacja Cala archiwizacja będzie polegała na pobraniu katalogu domowego, utworzeniu timestamp czyli daty z dokładnością co do sekundy, która zostanie użyta jako nazwa pliku archiwum oraz stworzeniu pliku tar ze zarchiwizowanymi danymi.
PyQt4 W powyższym skrypcie brakuje dwóch podstawowych rzeczy. Po pierwsze użytkownik nie ma możliwości wybrania katalogu na archiwum. Po drugie nie wiadomo czy uruchomienie skryptu zakończyło się sukcesem czy porażka. Taką funkcjonalność dodamy przy użyciu PyQt4.
Na początku musimy zaimportować odpowiednie moduły:
import sys
from PyQt4 import QtGui
Następnie użyjemy QFileDialog żeby pobrać nazwę katalogu:
# Pobierz nazwe katalog, w ktorym beda zapisane dane
app = QtGui.QApplication(sys.argv)
fd = QtGui.QFileDialog()
directory = str(fd.getExistingDirectory(None, "Wskaz katalog na archiwum", "/home"))
Wyświetlanie wiadomości o sukcesie QMessageBox
# Wyswietl informacje o sukcesie
QtGui.QMessageBox.information(None, "QFaktury", "Utworzono archiwum: " + archname )
Całość skryptu:
#!/usr/bin/python
# Archiwizacja danych
import os
import tarfile
import time
import sys
from PyQt4 import QtGui
# Pobierz nazwe katalog, w ktorym beda zapisane dane
app = QtGui.QApplication(sys.argv)
fd = QtGui.QFileDialog()
directory = str(fd.getExistingDirectory(None, "Wskaz katalog na archiwum", "/home"))
# Pobierz katalog domowy
homedir = os.path.expanduser('~')
os.chdir(homedir)
# Stworz timestamp
ltime = time.localtime()
timestamp = str(ltime.tm_year) + str(ltime.tm_mon) + str(ltime.tm_mday) + str(ltime.tm_hour) + str(ltime.tm_min) + str(ltime.tm_sec)
archname = directory + "archive_" + timestamp + ".tar.gz"
# Stworz archiwum tar
tar = tarfile.open(archname, "w:gz")
tar.add("elinux/")
tar.close
# Wyswietl informacje o sukcesie
QtGui.QMessageBox.information(None, "QFaktury", "Utworzono archiwum: " + archname )
Ten jak i wszystkie inne skrypty dostępne są tutaj, mozżna je też przeglądać przez svn