HyFeeTools/generator.py

199 lines
6.9 KiB
Python
Raw Normal View History

2023-01-18 21:58:09 +01:00
#!/usr/bin/env python3
# Importe
from pprint import pprint
import json
import os
from nextcloud import NextCloud
from nextcloud.codes import ShareType, Permission
from datetime import datetime
# Konfiguration laden
konfigurationsdatei = open('config.json')
ncc = json.load(konfigurationsdatei)
konfigurationsdatei.close()
# Dateinamen für Vorlagen
TPL_PATH = 'tpl'
TPL_AUDIO = TPL_PATH + '/vorlage.mp3'
TPL_IMAGE = TPL_PATH + '/vorlage.jpg'
TPL_VIDEO = TPL_PATH + '/vorlage.mp4'
TPL_PDF = TPL_PATH + '/vorlage.pdf'
TPL_NC_PATH = ncc['dir'] + '/tpl'
TPL_NC_AUDIO = TPL_NC_PATH + '/vorlage.mp3'
TPL_NC_IMAGE = TPL_NC_PATH + '/vorlage.jpg'
TPL_NC_VIDEO = TPL_NC_PATH + '/vorlage.mp4'
TPL_NC_PDF = TPL_NC_PATH + '/vorlage.pdf'
def initialisierung():
# Mit Nextcloud verbinden und Operationen durchführen
with NextCloud(ncc['url'], user=ncc['user'], password=ncc['pass']) as nxc:
# Existiert das Vorlagenverzeichnis?
if not nxc.list_folders(path=TPL_NC_PATH, depth=0).data:
print('Vorlagenverzeichnis wird angelegt...')
# Verzeichnis anlegen
nxc.create_folder(TPL_NC_PATH)
# Existiert die Audiovorlage?
if not nxc.list_folders(path=TPL_NC_AUDIO, depth=0).data:
print('Audiovorlage wird hochgeladen...')
# Audiovorlage hochladen
nxc.upload_file(TPL_AUDIO, TPL_NC_AUDIO)
# Existiert die Bildvorlage?
if not nxc.list_folders(path=TPL_NC_IMAGE, depth=0).data:
print('Bildvorlage wird hochgeladen...')
# Bildvorlage hochladen
nxc.upload_file(TPL_IMAGE, TPL_NC_IMAGE)
# Existiert die PDF-Vorlage?
if not nxc.list_folders(path=TPL_NC_PDF, depth=0).data:
print('PDF-Vorlage wird hochgeladen...')
# PDF-Vorlage hochladen
nxc.upload_file(TPL_PDF, TPL_NC_PDF)
# Existiert die Videovorlage?
if not nxc.list_folders(path=TPL_NC_VIDEO, depth=0).data:
print('Videovorlage wird hochgeladen...')
# Videovorlage hochladen
nxc.upload_file(TPL_VIDEO, TPL_NC_VIDEO)
def generiere_platzhalter(anzahl=1, typ='audio', subject='DateTime', qrcodes=False):
# leere Liste anlegen
linkliste = []
# Vorbereiten des Generierens von QR-Codes
if qrcodes:
# Library importieren
import qrcode
# Verzeichnis anlegen
if not os.path.isdir('qr'):
os.mkdir('qr')
# Platzhaltertyp konfigurieren
typ = typ.lower()
if typ == 'audio':
# Dateiendung bestimmen:
suffix = '.mp3'
TPL_NC = TPL_NC_AUDIO
elif typ == 'image':
# Dateiendung bestimmen:
suffix = '.jpg'
TPL_NC = TPL_NC_IMAGE
elif typ == 'pdf':
# Dateiendung bestimmen:
suffix = '.pdf'
TPL_NC = TPL_NC_PDF
elif typ == 'video':
# Dateiendung bestimmen:
suffix = '.mp4'
TPL_NC = TPL_NC_VIDEO
else:
# Kein Suffix, keine Vorlage für Verzeichnis
typ = 'dir'
suffix = ''
TPL_NC = ''
# Mit Nextcloud verbinden und Operationen durchführen
with NextCloud(ncc['url'], user=ncc['user'], password=ncc['pass']) as nxc:
# Aktuelles Datum und Uhrzeit ermitteln
today = datetime.now()
# Dateien kopieren und freigeben
for i in range(anzahl):
# Statusnachricht anzeigen
print('Generiere Platzhalter #{:0>4d}'.format(i))
# Zieldateiname generieren
if subject == 'DateTime':
prefix = today.strftime('%Y_%m_%d-%H_%M-%S')
else:
prefix = today.strftime('%Y_%m_%d_') + subject + '_' + typ
dateiname = prefix + '_{0:0>4d}'.format(i) + suffix
# Vorlage kopieren oder Verzeichnis anlegen
if typ == 'dir':
nxc.assure_folder_exists(ncc['dir'] + '/' + dateiname)
else:
nxc.copy_path(TPL_NC, ncc['dir'] + '/' + dateiname)
# Freigeben
aw = nxc.create_share(path=ncc['dir'] + '/' + dateiname, share_type=ShareType.PUBLIC_LINK)
# Download verbergen
nxc.update_share(aw.data['id'], hide_download=True)
# QR-Code generieren
if qrcodes:
img = qrcode.make(aw.data['url'])
aw.data['qr_path'] = os.getcwd() + '/qr/' + prefix + '_{0:0>4d}.png'.format(i)
img.save(aw.data['qr_path'])
2023-01-18 21:58:09 +01:00
# Nummer hinzufügen
aw.data['number'] = i
aw.data['number_fmt'] = '{:0>4d}'.format(i)
# Datum und Zeit hinzufügen
aw.data['date'] = today.strftime('%Y-%m-%d')
aw.data['time'] = today.strftime('%H:%M:%S')
# Zur Liste hinzufügen
linkliste.append(aw.data)
# Liste in Datei schreiben
with open(prefix + '_liste.csv', 'w') as datei:
datei.write('number, number_fmt, date, time, path, qr_path, url\n')
2023-01-18 21:58:09 +01:00
for link in linkliste:
datei.write('{number}, {number_fmt}, {date}, {time}, {path}, {qr_path}, {url}\n'.format(
2023-01-18 21:58:09 +01:00
number = link['number'],
number_fmt = link['number_fmt'],
date = link['date'],
time = link['time'],
path = link['path'],
qr_path = link['qr_path'],
2023-01-18 21:58:09 +01:00
url = link['url'])
)
if __name__ == "__main__":
# Parse Kommandozeilenargumente
import argparse
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-n', '--number',
default=1,
dest='number',
help='Anzahl der zu generierenden Platzhalter. Standard: 1',
type=int
)
parser.add_argument('-t', '--type',
default='audio',
dest='typ',
help='Typ des Platzhalters (audio, image, pdf, video, dir). Standard: audio',
type=str
)
parser.add_argument('-s', '--subject',
default='DateTime',
dest='subject',
help='Betreff des Platzhalters (wird im Dateinamen verwendet und in die Liste ausgegeben). Standard: DateTime (Uhrzeit als Betreff)',
type=str
)
parser.add_argument('--qr',
action='store_true',
dest='qrcodes',
help='Generiere einzelne QR-Codes'
)
args = parser.parse_args()
# Initialisiere die Vorlagen in der Nextcloud
initialisierung()
generiere_platzhalter(anzahl=args.number,
typ=args.typ,
subject=args.subject,
qrcodes=args.qrcodes)