|
@@ -6,7 +6,8 @@ import jinja2
|
|
|
import json
|
|
|
import re
|
|
|
from bs4 import BeautifulSoup
|
|
|
-from .xml_prettify import prettify_xml
|
|
|
+import config
|
|
|
+from cognos11.xml_prettify import prettify_xml
|
|
|
import logging
|
|
|
|
|
|
|
|
@@ -14,8 +15,6 @@ class c11_api:
|
|
|
webservice = ""
|
|
|
templates_dir = ""
|
|
|
# templates_dir = "C:/GlobalCube/Tasks/gctools/templates"
|
|
|
- export_dir = "C:/GlobalCube/ReportOutput"
|
|
|
- log_dir = "C:/GlobalCube/Tasks/gctools/logs"
|
|
|
headers = {}
|
|
|
caf = ""
|
|
|
cam = ""
|
|
@@ -23,8 +22,9 @@ class c11_api:
|
|
|
folders = []
|
|
|
jobs = []
|
|
|
|
|
|
- def __init__(self, webservice="http://localhost:9300/bi/"):
|
|
|
- self.webservice = webservice
|
|
|
+ def __init__(self, cfg: config.Config):
|
|
|
+ self.cfg = cfg
|
|
|
+ self.webservice = cfg.cognos11.webservice
|
|
|
|
|
|
self.templates_dir = os.path.dirname(__file__) + '/templates'
|
|
|
self._env = jinja2.Environment(
|
|
@@ -76,8 +76,26 @@ class c11_api:
|
|
|
if len(self.folders) == 0:
|
|
|
self.folders.append({'id': '_dot_public_folders', 'name': 'Team Content'})
|
|
|
self.load_folder_list()
|
|
|
+ self.save_config()
|
|
|
return self.folders
|
|
|
|
|
|
+ def save_config(self):
|
|
|
+ os.makedirs(self.cfg.cognos11.config_dir, exist_ok=True)
|
|
|
+ with open(self.cfg.cognos11.folders_file, 'w') as fwh:
|
|
|
+ json.dump(self.folders, fwh, indent=2)
|
|
|
+ with open(self.cfg.cognos11.reports_file, 'w') as fwh:
|
|
|
+ json.dump(self.reports, fwh, indent=2)
|
|
|
+ with open(self.cfg.cognos11.jobs_file, 'w') as fwh:
|
|
|
+ json.dump(self.jobs, fwh, indent=2)
|
|
|
+
|
|
|
+ def load_config_from_files(self):
|
|
|
+ with open(self.cfg.cognos11.folders_file, 'r') as frh:
|
|
|
+ self.folders = json.load(frh)
|
|
|
+ with open(self.cfg.cognos11.reports_file, 'r') as frh:
|
|
|
+ self.reports = json.load(frh)
|
|
|
+ with open(self.cfg.cognos11.jobs_file, 'w') as frh:
|
|
|
+ self.jobs = json.load(frh)
|
|
|
+
|
|
|
def load_folder_list(self, folder_id='_dot_public_folders', prefix='Team Content'):
|
|
|
res = self.session.get(f"{self.webservice}v1/objects/{folder_id}/items", headers=self.headers)
|
|
|
folder_list = sorted(res.json()['data'], key=lambda x: x['defaultName'])
|
|
@@ -197,13 +215,13 @@ class c11_api:
|
|
|
req = 'required' if sv['required'] == 'true' else 'optional'
|
|
|
v = dict([(opt['usevalue'], opt.get('displayvalue', '')) for opt in sv.find_all('selectoption')])
|
|
|
meta[req][k] = v
|
|
|
- filename = self.log_dir + f"/config/{report['path']}/{report['name']}.json"
|
|
|
+ filename = self.cfg.xml_dir + f"/{report['path']}/{report['name']}.json"
|
|
|
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
|
|
json.dump(meta, open(filename, 'w'), indent=2)
|
|
|
report['meta'] = meta
|
|
|
report['spec'] = parts[2].text
|
|
|
path = report['path'].replace('Team Content/ReportOutput', '')
|
|
|
- report['filename'] = f"{self.export_dir}/{path}/{report['name']}.pdf"
|
|
|
+ report['filename'] = f"{self.cfg.cognos11.reportoutput_dir}/{path}/{report['name']}.pdf"
|
|
|
|
|
|
report['params'] = list(re.findall(r'\[([^\]]+)\]', report['filename']))
|
|
|
for i, p in enumerate(report['params']):
|
|
@@ -284,8 +302,10 @@ class c11_api:
|
|
|
return r.status_code, error
|
|
|
|
|
|
def create_report(self, folder_id, fullpath):
|
|
|
- # self.session.get(self.webservice + 'v1/reports/templates?path=%2Fcontent%2Ffolder%5B%40name%3D%27Templates%27%5D/*[@objectClass=%27interactiveReport%27%20or%20@objectClass=%27report%27%20or%20@objectClass=%27reportTemplate%27]&maxResults=100&locale=de')
|
|
|
- # self.session.get(self.webservice + 'v1/reports/startupconfig?keys=supportedContentLocales,supportedCurrencies,supportedFonts,metadataInformationURI,glossaryURI&locale=de')
|
|
|
+ # self.session.get(self.webservice + 'v1/reports/templates?path=%2Fcontent%2Ffolder%5B%40name%3D%27Templates%27%5D/
|
|
|
+ # *[@objectClass=%27interactiveReport%27%20or%20@objectClass=%27report%27%20or%20@objectClass=%27reportTemplate%27]&maxResults=100&locale=de')
|
|
|
+ # self.session.get(self.webservice + 'v1/reports/startupconfig?keys=supportedContentLocales,supportedCurrencies,
|
|
|
+ # supportedFonts,metadataInformationURI,glossaryURI&locale=de')
|
|
|
headers = self.get_report_headers()
|
|
|
soap = self.templates['get_package'].render(
|
|
|
{"caf": self.caf, "cam": self.cam}
|