Erster Commit
This commit is contained in:
parent
d11b7f2ab3
commit
756f7cca7c
10 changed files with 264 additions and 2 deletions
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -1,3 +1,12 @@
|
||||||
|
# Konfiguration ignorieren
|
||||||
|
config.json
|
||||||
|
|
||||||
|
# genrerierte QR-Codes ignorieren
|
||||||
|
qr/
|
||||||
|
|
||||||
|
# Linklisten ignorieren
|
||||||
|
*.csv
|
||||||
|
|
||||||
# ---> Python
|
# ---> Python
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "nextcloud-API"]
|
||||||
|
path = nextcloud-API
|
||||||
|
url = https://github.com/MrCapsLock/nextcloud-API.git
|
||||||
|
branch = develop
|
50
README.md
50
README.md
|
@ -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
6
config.json.example
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"url": "https://nextcloud.server.example",
|
||||||
|
"user": "mein.account",
|
||||||
|
"pass": "passwort",
|
||||||
|
"dir": "/hyfee"
|
||||||
|
}
|
196
generator.py
Executable file
196
generator.py
Executable 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
1
nextcloud-API
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 0047ae08f4f023c4e30c108f82aa65ad80f800b9
|
BIN
tpl/vorlage.jpg
Normal file
BIN
tpl/vorlage.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
tpl/vorlage.mp3
Normal file
BIN
tpl/vorlage.mp3
Normal file
Binary file not shown.
BIN
tpl/vorlage.mp4
Normal file
BIN
tpl/vorlage.mp4
Normal file
Binary file not shown.
BIN
tpl/vorlage.pdf
Normal file
BIN
tpl/vorlage.pdf
Normal file
Binary file not shown.
Loading…
Reference in a new issue