def do(parameter): import sys import os ppath = os.getcwd() ppath = os.path.join(ppath, '../') sys.path.insert(0, ppath) import pchain from pchain import loader Service = pchain.cleinit() SrvGroup = Service._ServiceGroup realm = Service.PCRealmBase() Result = loader.loadzip(parameter, True) pchain.cleterm() if Result == None: print('install failed') else: print('install finish')
import sys import os try: import pchain except: pchain_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../') sys.path.insert(0, pchain_path) import pchain from pchain import pydata from pchain import pyproc from pchain.pydata import PCPyDataClass from pchain.pyproc import PCPyProcClass Service = pchain.cleinit() import libstarpy realm = Service.PCRealmBase() pydata.DefineType('PythonNumberClass') @pyproc.DefineRawProc( 'PyFuncProc', (PythonNumberClass, PythonNumberClass, PythonNumberClass), PythonNumberClass) def PyFun(a, b, c): print('input :', a, b, c) val = a + b + c return val
if __name__ == '__main__': #--test import sys import os ppath = os.getcwd() sys.path.insert(0, os.path.join(ppath, "../")) import pchain import platform version = platform.python_version().split('.') modulename = "" if (version[0] == '2' and version[1] == '7'): import libstarpy modulename = 'python' elif version[0] == '3' and version[1] == '5': import libstar_python35 modulename = 'python35' elif version[0] == '3' and version[1] == '6': import libstar_python36 modulename = 'python36' elif version[0] == '3' and version[1] == '7': import libstar_python37 modulename = 'python37' else: raise Exception('not supported') Service = libstarpy._InitSimple("test", "123", 0, 0) SrvGroup = Service._ServiceGroup pchain.cleinit() loadurl('http://localhost:4000/test.1.0.0.zip')
def pack(ResultFolder): import pchain import sys import os if os.path.exists('packageinfo.json') == False: print('file packageinfo.json" not existed') return False f = None if pchain.ispython2 == True: f = open('packageinfo.json') else: f = open('packageinfo.json', encoding='utf-8') packagetxt = f.read() f.close() Service = pchain.cleinit() SrvGroup = Service._ServiceGroup packageinfo = SrvGroup._NewParaPkg() if packageinfo._FromJSon(packagetxt) == False: SrvGroup._ClearService() libstarpy._ModuleExit() print('load packageinfo.json" failed') return False PackageLang = packageinfo["PackageLang"] if PackageLang != "python" and PackageLang != "python2" and PackageLang != "python3" and PackageLang != "c" and PackageLang != "c#" and PackageLang != "java": print('PackageLang ' + PackageLang + ' is not defined or not supported') return False if PackageLang == "python" or PackageLang == "python2" or PackageLang == "python3": try: print( 'try to create requirements.txt for python dependence, using \"pipreqs\"' ) from pipreqs import pipreqs pipreqs.init({ '<path>': './', '--pypi-server': None, '--proxy': None, '--use-local': None, '--use-local': True, '--savepath': './requirements.txt', '--diff': None, '--clean': None, '--print': False }) if os.path.exists("requirements.txt"): if os.path.getsize("requirements.txt") > 3: print('create requirements.txt finish') else: os.remove("requirements.txt") print('no python dependence is needed') except Exception as exc: print("failed, requirements.txt need to be created manually") PackageEntry = packageinfo["PackageEntry"] if PackageEntry == None or len(PackageEntry) == 0: print('PackageEntry is not defined') return False print("begin update packageinfo.json ...") pchain.cleinit() #--save all object existedObjects = Service._AllObject() if PackageLang == "c": Result = Service._DoFile("", PackageEntry, "") else: if PackageLang == "python" or PackageLang == "python2" or PackageLang == "python3": import sys sys.path.insert(0, os.getcwd()) try: __import__(packageinfo['PackageName']) Result = [True, ''] except Exception as exc: import traceback traceback.print_exc() return False else: Result = Service._DoFile(PackageLang, PackageEntry, "") if Result[0] == False: print(Result[1]) return False createdObjects = Service._AllObject() def ObjectExist(which, obj): for val in obj._Iterator(): if val == which: return True return False newObjects = [] for val in createdObjects._Iterator(): if ObjectExist(val,existedObjects) == False and \ ( Service.PCDataBase._IsInst(val) == True or Service.PCProcBase._IsInst(val) == True ) : o_name = val._Name.split('.') if len(o_name) == 1: pass elif len(o_name) == 2: if o_name[0] == packageinfo["PackageName"]: pass else: print('failed, object ' + val._Name + ' is in the package namespace') return False else: print('failed, object ' + val._Name + ' is in the package namespace') return False newObjects.append(val) print("new object captured : ", o_name[len(o_name) - 1]) ObjectList = SrvGroup._NewParaPkg() for i in range(len(newObjects)): o_name = newObjects[i]._Name.split('.') ObjectList[ObjectList._Number] = packageinfo[ "PackageName"] + "." + o_name[len(o_name) - 1] packageinfo["ObjectList"] = ObjectList #Calculate md5 value without file packageinfo.json packageinfo["signature"] = getmd5() f = None if pchain.ispython2 == True: f = open('packageinfo.json', 'w') else: f = open('packageinfo.json', 'w', encoding='utf-8') packagetxt = f.write(packageinfo._ToJSon()) f.close() print("end update packageinfo.json ...") ZipPackageName = packageinfo["PackageName"] + "-" + packageinfo[ "PackageLang"].lower() + "." + packageinfo["PackageVersion"] pchain.cleterm() print("start packing ...") import zipfile def zippackag(ZipPackageName): file_news = ZipPackageName + '.zip' z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED) for dirpath, dirnames, filenames in os.walk("."): fpath = dirpath.replace(".", '') fpath = fpath and fpath + os.sep or '' for filename in filenames: if filename == file_news: pass else: z.write(os.path.join(dirpath, filename), fpath + filename) z.close() zippackag(ResultFolder + os.sep + ZipPackageName) print("finish ...") return True
def run(filename, debugmode=False): import pchain import sys Service = pchain.cleinit() SrvGroup = Service._ServiceGroup pchain.IsRunFromPChain = True Result = Service._DoFile(modulename, filename, "") if Result[0] == False: print(Result[1]) return False query = SrvGroup._NewQueryRecord() hostobj = Service.PCRealmBase._FirstInst(query) Service.PCRealmBase._QueryClose(query) if hostobj == None: print('PCRealmBase instance is not created') return False if debugmode == False: hostobj.Execute() SrvGroup._ClearService() libstarpy._ModuleExit() return True libstarpy._SRPUnLock() from flask import Flask, Response, jsonify, request, send_file, send_from_directory import os app = Flask(__name__) @app.route('/realm/status', methods=['GET']) def status_tasks(): libstarpy._SRPLock() hostobj.BreakOnProc(None) para = hostobj.GetStatusWithPos(None, 0, 0, 0, 0, 0) Result = para._ToJSon() libstarpy._SRPUnLock() return Result @app.route('/realm/cellstatus/<string:object_id>', methods=['GET']) def cell_status_tasks(object_id): libstarpy._SRPLock() obj = Service._GetObject(object_id) if obj == None: libstarpy._SRPUnLock() return "", 404 hostobj.BreakOnProc(obj) para = hostobj.GetStatusWithPos(obj, 0, 0, 0, 0, 0) Result = para._ToJSon() libstarpy._SRPUnLock() return Result @app.route('/realm/runonce', methods=['GET']) def runonce_task(): libstarpy._SRPLock() hostobj.BreakOnProc(None) hostobj.BreakOnProcContinue() para = hostobj.GetStatusWithPos(None, 0, 0, 0, 0, 0) Result = para._ToJSon() libstarpy._SRPUnLock() return Result @app.route('/realm/cellrunonce/<string:object_id>', methods=['GET']) def cell_runonce_task(object_id): libstarpy._SRPLock() obj = Service._GetObject(object_id) if obj == None: libstarpy._SRPUnLock() return "", 404 hostobj.BreakOnProc(obj) hostobj.BreakOnProcContinue() para = hostobj.GetStatusWithPos(obj, 0, 0, 0, 0, 0) Result = para._ToJSon() libstarpy._SRPUnLock() return Result def get_file(filename): try: f = None if pchain.ispython2 == True: f = open(filename) else: f = open(filename, encoding='utf-8') t = f.read() f.close() return t except IOError as exc: return str(exc) @app.route("/") def index_page(): content = get_file(os.path.join(pchain.webpath, 'index.html')) #return send_static_file(pchain.webpath,'index.html', as_attachment=True) return Response(content, mimetype="text/html") @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def get_resource(path): mimetypes = { ".css": "text/css", ".html": "text/html", ".js": "application/javascript", } complete_path = os.path.join(pchain.webpath, path) ext = os.path.splitext(path)[1] mimetype = mimetypes.get(ext, "text/html") content = get_file(complete_path) return Response(content, mimetype=mimetype) ''' @app.route('/cle/<path:others>', methods=['GET']) def get_cle(others): code,res = Service._RestfulCall("/"+others,"get",request.json) if code != 200 : abort(code) return res ''' print('using : http://localhost:4000') app.run(host="0.0.0.0", port=4000, debug=False) libstarpy._SRPLock() hostobj.CancelBreakOnProc() SrvGroup._ClearService() libstarpy._ModuleExit() return True