Erster Commit

This commit is contained in:
Daniel Spittank 2023-01-18 21:58:09 +01:00
parent d11b7f2ab3
commit 756f7cca7c
10 changed files with 264 additions and 2 deletions

9
.gitignore vendored
View File

@ -1,3 +1,12 @@
# Konfiguration ignorieren
config.json
# genrerierte QR-Codes ignorieren
qr/
# Linklisten ignorieren
*.csv
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "nextcloud-API"]
path = nextcloud-API
url = https://github.com/MrCapsLock/nextcloud-API.git
branch = develop

View File

@ -1,3 +1,49 @@
# HyFeeTools
## HyFeeTools
Dieses Repo enthält nützliche Skripte für die Verwendung von [HyFee](https://hyfee.de/) von Christian Mayr mit einer Nextcloud.
Nützliche Skripte für die Verwendung von [HyFee](https://hyfee.de/) von Christian Mayr mit einer Nextcloud.
### Übersicht
#### HyFee Vorab-Code-Generator
Der Generator kann genutzt werden, um eine beliebige Anzahl an Platzhalter-Codes für HyFee in einer Nextcloud zu generieren.
```python main.py```
### Installation
0. Abhängigkeiten installieren: ```pip install qrcode --user```
1. Git Repo clonen: ```git clone https://dev.spittank.org/daniel/HyFeeTools.git```
2. Nextcloud-API-Wrapper installieren:
```bash
git submodule init
cd nextcloud-API
python setup.py build
python setup.py install --user
```
3. Konfigurationsbeispiel ```config.json.example``` nach ```config.json``` kopieren und Einstellungen anpassen.
### Verwendung
Der Generator kann direkt aufgerufen werden und verarbeitet die folgenden optionalen Kommandozeilenargumente:
- ```-n NUMBER``` oder ```--number NUMBER``` für die Anzahl der zu erstellenden Platzhalter.
- ```-t TYP``` oder ```--type TYP``` für den Typ der zu erstellenden Platzhalter (audio, image, pdf, video, dir).
- ```-s SUBJECT``` oder ```--subject SUBJECT``` für einen frei zu wählenden Bezeichner, der statt der Uhrzeit im Dateinamen der Platzhalter verwendet wird.
- ```--qr``` für die Ausgabe von QR-Codes als Einzelbilder.
Der Generator gibt immer eine CSV-Datei der erstellten Codes aus. Diese befindet sich standardmäßig im Verzeichnis des Skripts und hat den Namen der Serie, i.d.R. also Datum und Uhrzeit der Generierung. Diese kann z.B. für den Seriendruck verwendet werden.
Folgendes Beispiel legt zwei Videoplatzhalter an und gibt QR-Codes dafür aus.
```bash
./generator.py -n 2 -t video --qr
```
### Verwendete Bibliotheken
Der Generator greift für die Verbindung zu Nextcloud auf den [nextcloud-api-wrapper von luffah](https://github.com/luffah/nextcloud-API). Es wird allerdings eine Developement-Version von [MrCapsLock](https://github.com/MrCapsLock/nextcloud-API/tree/develop) verwendet, da der entsprechende Pullrequest bisher nicht angenommen wurde.
Die geänderte Version ist notwendig, um die Anzeige eines Downloadlinks zu deaktivieren. Das Paket ist diesem Repo als Submodul hinzugefügt. Um das Paket zu installieren kann wie folgt vorgegangen werden (Linux / mac OS):
```bash
git submodule init
cd nextcloud-API
python setup.py build
python setup.py install --user
```
Außerdem verwendet der Generator das Paket qrcode. Zur Installation kann PIP verwendet werden: ```pip install qrcode --user```

6
config.json.example Normal file
View File

@ -0,0 +1,6 @@
{
"url": "https://nextcloud.server.example",
"user": "mein.account",
"pass": "passwort",
"dir": "/hyfee"
}

196
generator.py Executable file
View File

@ -0,0 +1,196 @@
#!/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)

1
nextcloud-API Submodule

@ -0,0 +1 @@
Subproject commit 0047ae08f4f023c4e30c108f82aa65ad80f800b9

BIN
tpl/vorlage.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
tpl/vorlage.mp3 Normal file

Binary file not shown.

BIN
tpl/vorlage.mp4 Normal file

Binary file not shown.

BIN
tpl/vorlage.pdf Normal file

Binary file not shown.