1111import typer
1212from python_activator .manifest import *
1313
14+
1415class knowledge_object :
15- def __init__ (self , name , status , function , id ):
16- self .id = id
16+ def __init__ (self , name , status , function , id ):
17+ self .id = id
1718 self .name = name
1819 self .status = status
1920 self .function = function
2021
21- class CustomEncoder (json .JSONEncoder ):
22- def default (self , obj ):
23- if isinstance (obj , knowledge_object ):
24- return {'name' : obj .name , 'status' : obj .status , 'id' : obj .id }
25- return super ().default (obj )
2622
2723app = FastAPI ()
28- Knowledge_Objects = (
29- {}
30- )
24+ Knowledge_Objects = {}
3125
3226# this dictionary used to keep loaded objects (key:is and value:function)
3327object_directory = "" # used for location of knowledge objects
@@ -39,9 +33,8 @@ def hello():
3933
4034
4135@app .get ("/endpoints" )
42- def hello ():
43- return json .loads (json .dumps (Knowledge_Objects ,cls = CustomEncoder , indent = 4 ))
44-
36+ def endpoints ():
37+ return Knowledge_Objects # json.loads(json.dumps(Knowledge_Objects,cls=CustomEncoder, indent=4))
4538
4639
4740# end point to expose all packages
@@ -52,7 +45,7 @@ async def execute_endpoint(
5245 # get the method
5346 if endpoint_key in Knowledge_Objects :
5447 function = Knowledge_Objects [endpoint_key ].function
55- if function and Knowledge_Objects [endpoint_key ].status == "Activated" :
48+ if function and Knowledge_Objects [endpoint_key ].status == "Activated" :
5649 # run the imported method and pass the request json
5750 # if content_type == 'application/json':
5851 data = await request .json ()
@@ -62,7 +55,7 @@ async def execute_endpoint(
6255 result = function (data )
6356
6457 return {"result" : result }
65- elif Knowledge_Objects [endpoint_key ].status != "Activated" :
58+ elif Knowledge_Objects [endpoint_key ].status != "Activated" :
6659 return {"result" : Knowledge_Objects [endpoint_key ].status }
6760 else :
6861 return {"result" : "Knowledge object not found!" }
@@ -86,41 +79,43 @@ def install_requirements(modulepath):
8679
8780# look into the main directory that has all the packages and have the python ones installed
8881def install_packages_from_directory (directory , manifest : dict ):
89- for ko in manifest :
82+ for ko in manifest :
9083 install_module (directory , manifest [ko ])
9184 list_installed_packages ()
9285
9386
94- def install_module (
95- directory , ko
96- ): # TO DO: test how it works for windows installation
97- Knowledge_Objects [ko .name ] = knowledge_object (ko .name ,ko .status ,None ,"" )
87+ def install_module (directory , ko ): # TO DO: test how it works for windows installation
88+ Knowledge_Objects [ko .name ] = knowledge_object (ko .name , ko .status , None , "" )
9889
9990 try :
10091 modulepath = directory + ko .name + "/"
10192
10293 #########delete me: temporarily ignoring execute package
10394 if ko .name == "python-executive-v1.0" :
10495 return
105-
106- if ko .status != "Ready for install" :
107- return
10896
97+ if ko .status != "Ready for install" :
98+ return
10999
110100 Knowledge_Objects [ko .name ].status = "Activating"
111-
101+
112102 # get metadata and deployment files
113103 with open (modulepath + "deployment.yaml" , "r" ) as file :
114104 deployment_data = yaml .safe_load (file )
115105 with open (modulepath + "metadata.json" , "r" ) as file :
116106 metadata = json .load (file )
117107 first_key = next (iter (deployment_data ))
118108 second_key = next (iter (deployment_data [first_key ]))
119-
109+
120110 # do not install non python packages
121111 if deployment_data [first_key ][second_key ]["engine" ] != "python" :
122112 del Knowledge_Objects [ko .name ]
123- Knowledge_Objects [metadata ["@id" ]] = knowledge_object (ko .name ,"Knowledge object is not activated. It is not a python object." ,None ,metadata ["@id" ])
113+ Knowledge_Objects [metadata ["@id" ]] = knowledge_object (
114+ ko .name ,
115+ "Knowledge object is not activated. It is not a python object." ,
116+ None ,
117+ metadata ["@id" ],
118+ )
124119 return
125120
126121 # install requirements
@@ -140,17 +135,28 @@ def install_module(
140135 )
141136 mymethod = getattr (module , deployment_data [first_key ][second_key ]["function" ])
142137 del Knowledge_Objects [ko .name ]
143- Knowledge_Objects [metadata ["@id" ]] = knowledge_object (ko .name ,"Activated" ,mymethod ,metadata ["@id" ])
138+ Knowledge_Objects [metadata ["@id" ]] = knowledge_object (
139+ ko .name , "Activated" , mymethod , metadata ["@id" ]
140+ )
144141 except Exception as e :
145- Knowledge_Objects [ko .name ].status = "Faield activating with error: " + repr (e )
142+ Knowledge_Objects [ko .name ].status = "Faield activating with error: " + repr (e )
143+
146144
147145def list_installed_packages ():
148146 print ("-------------------\n Packages installed:" )
149- #keys_list = list(KnowledgeObjects.keys())
150- print ("{:<4}. {:<30} {:<30} {:<30}" .format ("" ,"ID" ,"NAME" ,"STATUS" ))
151- for i ,item in enumerate (Knowledge_Objects ):
152- print ("{:<4}. {:<30} {:<30} {:<30}" .format (str (i ),Knowledge_Objects [item ].id ,Knowledge_Objects [item ].name [:30 ], Knowledge_Objects [item ].status [:50 ]))
153-
147+ # keys_list = list(KnowledgeObjects.keys())
148+ #print(Knowledge_Objects)
149+ print ("{:<4}. {:<30} {:<30} {:<30}" .format ("" , "ID" , "NAME" , "STATUS" ))
150+ for i , item in enumerate (Knowledge_Objects ):
151+ print (
152+ "{:<4}. {:<30} {:<30} {:<30}" .format (
153+ str (i ),
154+ Knowledge_Objects [item ].id ,
155+ Knowledge_Objects [item ].name [:30 ],
156+ Knowledge_Objects [item ].status [:50 ],
157+ )
158+ )
159+
154160 print ("-------------------" )
155161
156162
@@ -161,17 +167,20 @@ async def startup_event():
161167 object_directory = os .environ ["COLLECTION_PATH" ]
162168 manifest = process_manifest (object_directory )
163169 install_packages_from_directory (object_directory , manifest )
164- del os .environ ["COLLECTION_PATH" ]
165- del os .environ ["MANIFEST_PATH" ]
170+ try :
171+ del os .environ ["COLLECTION_PATH" ]
172+ del os .environ ["MANIFEST_PATH" ]
173+ except Exception as e :
174+ print ("error deleting env variables" )
166175
167176
168177# run virtual server when running this .py file directly for debugging. It will look for objects at {code folder}/pyshelf
169178if __name__ == "__main__" :
170179 print (">>>>>running with debug<<<<<" )
171- os .environ ["MANIFEST_PATH" ]= "/home/faridsei/dev/test/package/manifest.json"
172- #os.environ[
180+ # os.environ["MANIFEST_PATH"]="/home/faridsei/dev/test/package/manifest.json"
181+ # os.environ[
173182 # "MANIFEST_PATH"
174- #] = "https://github.com/kgrid-objects/example-collection/releases/download/4.2.1/manifest.json"
183+ # ] = "https://github.com/kgrid-objects/example-collection/releases/download/4.2.1/manifest.json"
175184 os .environ ["COLLECTION_PATH" ] = "/home/faridsei/dev/test/pyshelf/"
176185
177186 uvicorn .run (app , host = "127.0.0.1" , port = 8000 )
0 commit comments