#!/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']) # 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') for link in linkliste: datei.write('{number}, {number_fmt}, {date}, {time}, {path}, {qr_path}, {url}\n'.format( number = link['number'], number_fmt = link['number_fmt'], date = link['date'], time = link['time'], path = link['path'], qr_path = link['qr_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)