__author__ = 'kai' import json import os import shutil import WGDBus import Activity import m7z_mod import subprocess import uuid import fsio import time import datetime import FilePaths import logConfig import notify_activity import status_mod if False: response = None request = None session = None db = None status_mod.sessionUserMgr.setLastVisit(session, request) @auth.requires(request.ajax==True, requires_login=True) def assignCfg(): scandata = None if request.env.request_method == "GET": if os.path.isfile(FilePaths.ASSIGN_FILENAME): data = fsio.jsonload(FilePaths.ASSIGN_FILENAME) else: data = { "assignment": [{"ascii": "-", "prgno": "0", "jobno": "0"}]} return response.json(data) if request.env.request_method == "POST": data = json.loads(request.body.read()) fsio.jsondump(FilePaths.ASSIGN_FILENAME, data) notify_activity.configChanged(FilePaths.ASSIGN_FILENAME, Activity.ASSIGN_CHANGED, session=session) @auth.requires(request.ajax==True, requires_login=True) def resetAssignToFactory(): fsio.shcopyfile(FilePaths.ASSIGN_DEFAULT_FILENAME, FilePaths.ASSIGN_FILENAME) notify_activity.configChanged(FilePaths.ASSIGN_FILENAME, Activity.ASSIGN_CHANGED, session=session) return '' @auth.requires_login() def importAssignment(): res = {'success': True, 'msg': ''} fsio.fsLock.acquire() try: UUID = uuid.uuid4() tmp_file = '/tmp/{0}.zip'.format(UUID.hex) with open(tmp_file, 'w') as f: f.write(request.vars.cfg.value) pwd = FilePaths.gen_rev_pwd("scanAssign.json") returncode = m7z_mod.test_pwd(tmp_file, pwd) if returncode != 0: return response.json(m7z_mod.get_import_impossible_msg()) p = subprocess.Popen([FilePaths.SEVEN_ZIP_BIN, "e", '/tmp/{0}.zip'.format(UUID.hex), "-o{0}".format(FilePaths.CONFIG_PATH), "-p{0}".format(pwd), "-y"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = p.communicate() if p.returncode != 0: # Failure res['success'] = False res['msg'] = str(stderr) if res['success']: notify_activity.configChanged(FilePaths.ASSIGN_FILENAME, Activity.ASSIGN_CHANGED, session=session) except Exception, e: res['success'] = False res['msg'] = str(e) finally: fsio.fsLock.release() return response.json(res) def __genExportFileName(): name = 'assignment' ts = time.time() dateStamp = datetime.datetime.fromtimestamp(ts).strftime('%Y_%m_%d') return dateStamp + '_' + name.strip() + '.nxida' @auth.requires(request.ajax==True, requires_login=True) def exportAssignment(): expfname = __genExportFileName() res = {'success': False, 'msg': 'Unknown error'} fsio.fsLock.acquire() try: res = {'success': True, 'msg': '/tmp/' + expfname} pwd = FilePaths.gen_rev_pwd("scanAssign.json") p = subprocess.Popen([FilePaths.SEVEN_ZIP_BIN, "u", "/tmp/" + expfname, "-p"+pwd, FilePaths.ASSIGN_FILENAME], stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = p.communicate() if p.returncode != 0: # Failure res['success'] = False res['msg'] = str(stderr) except Exception, e: res['success'] = False res['msg'] = str(e) finally: fsio.fsLock.release() return response.json(res)