installation von rechnung.sty hinzugefügt

This commit is contained in:
bernd 2021-05-04 17:21:28 +02:00
parent 17ddeb8df8
commit dbf8c5db6d
1 changed files with 110 additions and 18 deletions

View File

@ -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: