197 lines
6.7 KiB
Python
Executable File
197 lines
6.7 KiB
Python
Executable File
#!/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'])
|
|
img.save('qr/' + prefix + '_{0:0>4d}.png'.format(i))
|
|
|
|
# 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, numbder_fmt, date, time, path, url\n')
|
|
for link in linkliste:
|
|
datei.write('{number}, {number_fmt}, {date}, {time}, {path}, {url}\n'.format(
|
|
number = link['number'],
|
|
number_fmt = link['number_fmt'],
|
|
date = link['date'],
|
|
time = link['time'],
|
|
path = link['path'],
|
|
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)
|