示例#1
0
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')
示例#2
0
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

示例#3
0
文件: loader.py 项目: srplab/pchain
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')
示例#4
0
文件: pack.py 项目: srplab/pchain
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
示例#5
0
文件: runner.py 项目: srplab/pchain
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