2017-10-17 74 views
0

我試圖將會話對象從一個文件傳遞到另一個文件,以便在我需要做的所有不同事情(列表/創建虛擬機等)中使用相同的會話對象。遠遠我已經嘗試使用Pickle(它沒有工作,因爲對象上有鎖定實例)。我現在試圖使用Cherrypy來使我能夠將對象存儲爲一個cookie(我已經爲名稱和fedid做了這些)。但我收到一個錯誤,說會話對象不是JSON可序列化的。使用OpenStack傳遞會話對象 - KeyStone

我該如何克服這個錯誤,這是傳遞會話對象的正確方法嗎?如果這不是正確的解決方案,我如何傳遞會話對象(文檔不完全有用)?

import cherrypy 
import ldap 
import xmlrpclib 
import xml.etree.ElementTree as ET 
from keystoneauth1 import loading 
from keystoneauth1 import session as session 
import novaclient.client as client 
import json 
import pickle 


NOVA_VERSION="2.1" 
KEYSTONE_URL = cherrypy.request.config.get("keystone") 
OPENSTACK_HOST = cherrypy.request.config.get("openstack_host") 
OPENSTACK_DEFAULT_DOMAIN = 
cherrypy.request.config.get("openstack_default_domain") 
loader = loading.get_plugin_loader('password') 
auth = loader.load_from_options(auth_url=KEYSTONE_URL, username=data.get("username"), password=data.get("password").replace(" ","%20"),user_domain_name=OPENSTACK_DEFAULT_DOMAIN) 
sess = session.Session(auth=auth) 
nova = client.Client(NOVA_VERSION,session=sess) 
data = { 
     'name' : name, 
     'fedid' : data.get("username"), 
     'sessionTest' : json.dumps(sess), 
     'expires' : EXPIRE 
    } 

錯誤:

File "/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 656, in respond 
response.body = self.handler() 
File "/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py", line 188, in __call__ 
self.body = self.oldhandler(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/cherrypy/lib/jsontools.py", line 61, in json_handler 
value = cherrypy.serving.request._json_inner_handler(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 34, in __call__ 
return self.callable(*self.args, **self.kwargs) 
File "/var/www/frontend/controllers/api/user.py", line 102, in PUT 
'sessionTest' : json.dumps(sess), 
File "/usr/lib64/python2.7/json/__init__.py", line 243, in dumps 
return _default_encoder.encode(obj) 
File "/usr/lib64/python2.7/json/encoder.py", line 207, in encode 
chunks = self.iterencode(o, _one_shot=True) 
File "/usr/lib64/python2.7/json/encoder.py", line 270, in iterencode 
return _iterencode(o, 0) 
File "/usr/lib64/python2.7/json/encoder.py", line 184, in default 
raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <keystoneauth1.session.Session object at 0x7f023003c710> is not JSON serializable 
+0

你能分享你的進口?什麼模塊編號session.Session from – Tobey

+0

剛剛添加了進口。我會說實話,我不太清楚如何找到模塊ID(我對此很新)。乾杯,馬特:) – MRichards

+0

該模塊是keystoneauth1 – Tobey

回答

0

的問題是與loader對象。

您應該在reciever

加載身份驗證憑據您可以泡製loader和選項,但不是auth對象

+0

當我這樣做時,我得到一個TypeError,指出我不能像我以前嘗試使用Pickle – MRichards