forked from berhsi/rechnung
installation von rechnung.sty hinzugefügt
This commit is contained in:
parent
17ddeb8df8
commit
dbf8c5db6d
128
rechnung.py
128
rechnung.py
|
@ -15,13 +15,11 @@ import subprocess
|
|||
from datetime import date, timedelta
|
||||
|
||||
|
||||
# Diverse Variablen
|
||||
# -----------------
|
||||
|
||||
|
||||
|
||||
class DISPLAY():
|
||||
'''
|
||||
Die Klasse für die Ausgabe von Logmeldungen im Terminal. Schaut, ob und
|
||||
worauf die Environment Variable "COLORTERM" gesetzt ist, und gibt
|
||||
entsprechend dem Ergebnis farbige Ausgabem.
|
||||
'''
|
||||
def __init__(self):
|
||||
self.red = '\x1B[31m'
|
||||
|
@ -68,7 +66,7 @@ class DISPLAY():
|
|||
param 2: string
|
||||
'''
|
||||
if self.colorify == True:
|
||||
print(f"{self.green}[+]{self.reset} {msg}", end=end)
|
||||
print(f"{self.green}[+]{self.reset} {msg}", end=end, flush=True)
|
||||
else: print(f"[+] {msg}", end=end)
|
||||
|
||||
def WARN(self, msg, end='\n'):
|
||||
|
@ -90,6 +88,8 @@ class DISPLAY():
|
|||
|
||||
class KUNDE():
|
||||
'''
|
||||
Die Klasse dient lediglich zum Halten der Informationen zu einem
|
||||
Rechnungskunden.
|
||||
'''
|
||||
def __init__(self):
|
||||
self.kunde = ""
|
||||
|
@ -111,6 +111,7 @@ class RECHNUNG():
|
|||
self.programm_version = "0.0.1"
|
||||
self.rechnungsfile = "rechnung.ini"
|
||||
self.templatefile = "template.ltx"
|
||||
self.texhome = "/".join((os.environ["HOME"], "texmf"))
|
||||
self.compiler = ""
|
||||
|
||||
self.D = DISPLAY()
|
||||
|
@ -130,7 +131,7 @@ class RECHNUNG():
|
|||
'''
|
||||
param 1: string
|
||||
'''
|
||||
self.D.INFO("Teste, ob {} ist lesbar ... ".format(filename), end="")
|
||||
self.D.INFO("Teste, ob {} lesbar ist ... ".format(filename), end="")
|
||||
response = os.access(filename, os.R_OK)
|
||||
if response == True:
|
||||
self.D.TRUE()
|
||||
|
@ -148,7 +149,6 @@ class RECHNUNG():
|
|||
if response.returncode == 0:
|
||||
self.D.TRUE()
|
||||
self.compiler = program
|
||||
self.D.INFO(f"Setze {program} als Compiler.")
|
||||
return True
|
||||
else:
|
||||
self.D.FALSE()
|
||||
|
@ -345,21 +345,113 @@ class RECHNUNG():
|
|||
fd.close()
|
||||
return buffer
|
||||
|
||||
def check_sty(self):
|
||||
'''
|
||||
Rechnung.sty steht nicht als Paket zur Verfügung. Es muß folglich
|
||||
von Hand in den Suchpfad von Latex kopiert werden. Die Suche erfolgt
|
||||
im aktuelle Verzeichnis und in ~/texmf/latex/tex/.
|
||||
|
||||
Achtung: Sollte das Programm später in einem Temporärem Verzeichnis
|
||||
arbeiten, nutzt das Paket im aktuellen Verzeichnis nichts!
|
||||
|
||||
Achtung: Bei einer Installation wird eine vorhandene Datei
|
||||
rechnung.sty ohne Nachfrage überschrieben!
|
||||
|
||||
returns: boolean
|
||||
'''
|
||||
package = "rechnung.sty"
|
||||
|
||||
self.D.INFO(f"Teste, ob rechnung.sty installiert ist ... ", end="")
|
||||
if package in os.listdir():
|
||||
self.D.TRUE()
|
||||
return True
|
||||
for (dirpath, dirnames, filenames) in os.walk(self.texhome):
|
||||
if package in filenames:
|
||||
self.D.TRUE()
|
||||
return True
|
||||
self.D.FALSE()
|
||||
return False
|
||||
|
||||
def install_sty(self):
|
||||
'''
|
||||
Installiert auf Anfrage das Paket rechnung.sty.
|
||||
'''
|
||||
url= "https://github.com/tomka/rechnung"
|
||||
rechnung_sty_dir = "/".join((self.texhome, "tex/latex/rechnung/"))
|
||||
|
||||
response = input(" Paket 'rechnung' installieren? (y/N): ")
|
||||
if response not in ("y", "Y", "j", "J"):
|
||||
self.D.INFO("Breche das Programm ab")
|
||||
sys.exit(6)
|
||||
|
||||
self.D.INFO("Versuche das Paket 'rechnung' zu installieren.")
|
||||
self.D.INFO("Nötige Programme: git, latex.")
|
||||
for program in ("git", "latex"):
|
||||
if self.check_program(program) is False:
|
||||
self.D.ERROR(f"Kann {program} nicht finden. Breche ab.")
|
||||
sys.exit(1)
|
||||
|
||||
self.D.INFO("Klone Repo ... ", end="")
|
||||
response = subprocess.run(["git", "clone", url],
|
||||
capture_output=True,
|
||||
timeout=180)
|
||||
if response.returncode != 0:
|
||||
self.D.FALSE()
|
||||
self.D.ERROR(f"Fehler beim Klonen des Repos")
|
||||
sys.exit(1)
|
||||
else: self.D.TRUE()
|
||||
|
||||
old_pwd = os.environ["PWD"]
|
||||
os.chdir("rechnung")
|
||||
self.D.INFO("Versuche 'rechnung.sty' zu bauen ... ", end="")
|
||||
response = subprocess.run(["latex", "rechnung.ins"], capture_output=True)
|
||||
if response.returncode != 0:
|
||||
self.D.FALSE()
|
||||
sys.exit(1)
|
||||
else: self.D.TRUE()
|
||||
self.D.INFO(f"Lege Verzeichnis '{rechnung_sty_dir}' an ... ", end="")
|
||||
response = subprocess.run(["mkdir", "-p", rechnung_sty_dir])
|
||||
if response.returncode != 0:
|
||||
self.D.FALSE()
|
||||
sys.exit(1)
|
||||
else: self.D.TRUE()
|
||||
self.D.INFO(f"Kopiere 'rechnung.sty' nach '{rechnung_sty_dir}' ... ", end="")
|
||||
response = subprocess.run(["cp", "rechnung.sty", rechnung_sty_dir])
|
||||
if response.returncode != 0:
|
||||
self.D.FALSE()
|
||||
else: self.D.TRUE()
|
||||
|
||||
def preup(self):
|
||||
'''
|
||||
Führt einige Prüfungen durch.
|
||||
- Kundendatei und Latex-Template müssen lesbar sein.
|
||||
- Rechnung.sty muß installiert sein. Ist dies nicht der Fall,
|
||||
sollte es von Github heruntergeladen und gebaut werden. Dafür
|
||||
sind die Programme Git und latex nötig.
|
||||
- Es wird ein Latex-Compiler gebraucht.
|
||||
'''
|
||||
|
||||
for i in (self.rechnungsfile, self.templatefile):
|
||||
self.check_readable(i)
|
||||
|
||||
for program in ('pdflatex', 'xelatex', 'luatex', 'latex'):
|
||||
if self.check_program(program) == True:
|
||||
break
|
||||
|
||||
if self.check_sty() is False:
|
||||
self.install_sty()
|
||||
|
||||
if self.compiler == "":
|
||||
self.D.ERROR("Kann keinen Compiler finden. Exit")
|
||||
sys.exit(2)
|
||||
|
||||
|
||||
def run(self):
|
||||
'''
|
||||
'''
|
||||
|
||||
self.print_header()
|
||||
|
||||
for i in (self.rechnungsfile, self.templatefile):
|
||||
self.check_readable(i)
|
||||
|
||||
for program in ('pdflatex', 'xelatex', 'luatex'):
|
||||
if self.check_program(program) == True:
|
||||
break
|
||||
if self.compiler == "":
|
||||
self.D.ERROR("Kann keinen Compiler finden. Exit")
|
||||
sys.exit(2)
|
||||
self.preup()
|
||||
|
||||
buffer = self.get_file_content(self.rechnungsfile)
|
||||
if buffer is None:
|
||||
|
|
Loading…
Reference in New Issue