我試圖將會話對象從一個文件傳遞到另一個文件,以便在我需要做的所有不同事情(列表/創建虛擬機等)中使用相同的會話對象。遠遠我已經嘗試使用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
你能分享你的進口?什麼模塊編號session.Session from – Tobey
剛剛添加了進口。我會說實話,我不太清楚如何找到模塊ID(我對此很新)。乾杯,馬特:) – MRichards
該模塊是keystoneauth1 – Tobey