new file: olm-login.php
This commit is contained in:
221
changelog.py
Normal file
221
changelog.py
Normal file
@@ -0,0 +1,221 @@
|
||||
#!/bin/python3
|
||||
import requests
|
||||
import locale
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
import urllib.request
|
||||
from collections import defaultdict
|
||||
import re
|
||||
|
||||
############################################################################
|
||||
############################################################################
|
||||
############################################################################
|
||||
#Konfiguration OLM
|
||||
olm_api = 'https://olm.o-byte.com'
|
||||
olm_USERNAME = 'restapi'
|
||||
olm_PASSWD = 'CHANGEME'
|
||||
#Konfiguration sonstige
|
||||
file_path = '/opt/knowledge/antora/docs-site/build/site/Dokumentationen/0.1/welcome.html'
|
||||
#folgende OLM NUmmern werden ignoriert
|
||||
ignoreOLMno = ["olm-10109", "olm-10110"]
|
||||
|
||||
|
||||
#Deutsch für das Datum setzten
|
||||
locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
|
||||
############################################################################
|
||||
############################################################################
|
||||
############################################################################
|
||||
def get_olm_token(username, passwd):
|
||||
authRequest = {}
|
||||
authRequest['username'] = username
|
||||
authRequest['password'] = passwd
|
||||
|
||||
req = urllib.request.Request(
|
||||
olm_api + '/login', data=json.dumps(authRequest).encode('utf8'),
|
||||
headers={'Content-type': 'application/json', 'Accept': 'application/json'})
|
||||
response = urllib.request.urlopen(req)
|
||||
responseText = response.read().decode('utf8')
|
||||
return json.loads(responseText)
|
||||
|
||||
def sort_by_date(data):
|
||||
return sorted(data, key=lambda x: datetime.strptime(x[0], "%Y-%m-%d"), reverse=True)
|
||||
|
||||
def wrap_with_ul(data):
|
||||
lines = data.splitlines()
|
||||
lines_with_li = [f"<li>{line}</li>" for line in lines]
|
||||
return "<ul>\n" + "\n".join(lines_with_li) + "\n</ul>"
|
||||
|
||||
def parse_date(date_string):
|
||||
return datetime.strptime(date_string, "%Y-%m-%d")
|
||||
|
||||
def replace_product_updates(file_path, new_content):
|
||||
try:
|
||||
# HTML-Datei öffnen und den Inhalt lesen
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
html_content = file.read()
|
||||
# Suchen nach dem Tag ###PRODUKTUPDATES### und Ersetzen durch den neuen Inhalt
|
||||
updated_html = html_content.replace("###PRODUKTUPDATES###", new_content)
|
||||
# Überschreiben der HTML-Datei mit dem aktualisierten Inhalt
|
||||
with open(file_path, 'w', encoding='utf-8') as file:
|
||||
file.write(updated_html)
|
||||
print(f"Der Bereich ###PRODUKTUPDATES### wurde erfolgreich durch den neuen Inhalt ersetzt.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ein Fehler ist aufgetreten: {e}")
|
||||
|
||||
############################################################################
|
||||
# Auth Tokens
|
||||
############################################################################
|
||||
# Auth Token OLM
|
||||
token_olm = get_olm_token(olm_USERNAME, olm_PASSWD)
|
||||
############################################################################
|
||||
# Bearer Headers
|
||||
############################################################################
|
||||
headers_olm = {
|
||||
'Content-type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'Authorization': 'Bearer ' + token_olm['bearerToken']
|
||||
}
|
||||
|
||||
product_ids = []
|
||||
product_versions = []
|
||||
page_products = 1
|
||||
|
||||
|
||||
while True:
|
||||
response = requests.get(olm_api + f"/api/rest/v1/product?page={page_products}&size=1", headers=headers_olm)
|
||||
data = response.json()
|
||||
products = data.get('content', [])
|
||||
if not products:
|
||||
break
|
||||
for product in products:
|
||||
ids = product.get('downloads', [])
|
||||
for id in ids:
|
||||
product_ids.append(id["id"])
|
||||
page_products += 1
|
||||
|
||||
for product_id in product_ids:
|
||||
page_versions = 1
|
||||
while True:
|
||||
response = requests.get(olm_api + f"/api/rest/v1/download/field/{product_id}?page={page_versions}&size=1", headers=headers_olm)
|
||||
data = response.json()
|
||||
versions = data.get('content', [])
|
||||
if not versions:
|
||||
break
|
||||
for version in versions:
|
||||
if version["qa"] and version["productVersion"]["product"]["published"] and version["publishedAt"]:
|
||||
temp = []
|
||||
if version["productVersion"]["product"]["productNo"] in ignoreOLMno:
|
||||
continue
|
||||
#temp.append(version["productVersion"]["createdOn"]) #0
|
||||
temp.append(version["publishedAt"]) #0
|
||||
temp.append(version["productVersion"]["product"]["name"]) #1
|
||||
temp.append(version["changelog"]) #2
|
||||
temp.append(version["productVersion"]["product"]["productPageURI"]) #3
|
||||
temp.append(version["productVersion"]["product"]["productNo"]) #4
|
||||
modul_version = str(version["productVersion"]["major"]) + "." + str(version["productVersion"]["minor"]) + "." + str(version["bugfixVersion"])
|
||||
starface_min = str(version["productVersion"]["minStarfaceVersion"]["major"]) + "." + str(version["productVersion"]["minStarfaceVersion"]["minor"]) + "." + str(version["productVersion"]["minStarfaceVersion"]["build"]) + "." + str(version["productVersion"]["minStarfaceVersion"]["revision"])
|
||||
starface_max = str(version["productVersion"]["maxStarfaceVersion"]["major"]) + "." + str(version["productVersion"]["maxStarfaceVersion"]["minor"]) + "." + str(version["productVersion"]["maxStarfaceVersion"]["build"]) + "." + str(version["productVersion"]["maxStarfaceVersion"]["revision"])
|
||||
temp.append(modul_version) #5
|
||||
temp.append(starface_min) #6
|
||||
temp.append(starface_max) #7
|
||||
temp.append(version["downloadField"]["name"]) #8
|
||||
temp.append(version["downloadField"]["starfaceModule"]) #9
|
||||
#print(temp)
|
||||
product_versions.append(temp)
|
||||
page_versions += 1
|
||||
|
||||
|
||||
sorted_data = sort_by_date(product_versions)
|
||||
|
||||
aktuelles_datum = datetime.now()
|
||||
drei_monate_zurueck = aktuelles_datum.replace(day=1) - timedelta(days=1)
|
||||
drei_monate_zurueck = drei_monate_zurueck.replace(day=1) - timedelta(days=1)
|
||||
drei_monate_zurueck = drei_monate_zurueck.replace(day=1) - timedelta(days=1)
|
||||
drei_monate_zurueck = drei_monate_zurueck.replace(day=1) - timedelta(days=1)
|
||||
anfang_vier_monate = drei_monate_zurueck.replace(day=1)
|
||||
|
||||
gefilterte_changelogs = []
|
||||
for eintrag in sorted_data:
|
||||
datum = parse_date(eintrag[0])
|
||||
if anfang_vier_monate <= datum <= aktuelles_datum:
|
||||
gefilterte_changelogs.append(eintrag)
|
||||
|
||||
sorted_data = gefilterte_changelogs
|
||||
|
||||
|
||||
# Dictionary zum Gruppieren der Einträge nach Monat und Jahr
|
||||
monthly_data = defaultdict(list)
|
||||
|
||||
# Daten in Monatsgruppen einordnen
|
||||
for entry in sorted_data:
|
||||
date_str = entry[0]
|
||||
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
|
||||
month_year = date_obj.strftime("%B %Y") # z.B. "September 2023"
|
||||
monthly_data[month_year].append(entry)
|
||||
#print("4")
|
||||
# Erstellen der HTML-Datei
|
||||
# Sortiere die Monatsblöcke von neu nach alt und füge sie der HTML hinzu
|
||||
html = "
|
||||
"
|
||||
for month_year, entries in sorted(monthly_data.items(), key=lambda x: datetime.strptime(x[0], "%B %Y"), reverse=True):
|
||||
# Monats-Überschrift in einem separaten Table-Block
|
||||
html += f"""
|
||||
<table width="100%" style="background-color: #00a7e6; border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;"
|
||||
<tr>
|
||||
<td><h3>{month_year}</h3></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
"""
|
||||
# Tabelle für die Produkte
|
||||
for entry in entries:
|
||||
date_obj = datetime.strptime(entry[0], "%Y-%m-%d")
|
||||
date = date_obj.strftime("%d.%m.%Y")
|
||||
if entry[9]:
|
||||
produktname = entry[1]
|
||||
else:
|
||||
produktname = entry[1] + " - " + entry[8]
|
||||
changelog = entry[2].replace("\n", "
|
||||
\n")
|
||||
changelog = wrap_with_ul(changelog)
|
||||
html += f"""
|
||||
<table width="100%" style="border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden; border: 1px solid #ddd;">
|
||||
<tr style="background-color: #ddd;">
|
||||
<td ><b>{produktname} ({entry[5]})</b></td>
|
||||
<td style="text-align: right;"><b>{date}</b> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<u>Änderungen:</u>
|
||||
|
||||
{changelog}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-top: 1px solid #ddd;" width="300px">kompatibel mit STARFACE Version:
|
||||
</td>
|
||||
<td style="border-top: 1px solid #ddd;">{entry[6]} - {entry[7]}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dokumentation
|
||||
</td>
|
||||
<td><a href='{entry[3]}' target='_blank' >{entry[3]}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Download
|
||||
</td>
|
||||
<td><a href='https://get.o-byte.com?olm={entry[4]}' target='_blank' >https://get.o-byte.com</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
"""
|
||||
html += "
|
||||
"
|
||||
html += "
|
||||
|
||||
|
||||
"
|
||||
replace_product_updates(file_path, html)
|
||||
Reference in New Issue
Block a user