我有一些SQLAlchemy对象,其中包含更多SQLAlchemy对象的列表,依此类推(大约5个级别).我希望将所有对象转换为字典.
我可以使用__dict__属性将对象转换为字典,没问题.但是,我也无法找到转换所有嵌套对象的最佳方法,而无需明确地执行每个级别.
到目前为止,这是我能想到的最好的,但它没有正确递归.它基本上在一次通过后中断,所以我的逻辑显然有问题.你能看出它有什么问题吗?
我希望这样做:
all_dict = myDict(obj.__dict__)
def myDict(d):
for k,v in d.items():
if isinstance(v,list):
d[k] = [myDict(i.__dict__) for i in v]
else:
d[k] = v
return d
Run Code Online (Sandbox Code Playgroud) 我知道我可以使用这样的字符串获取Class的属性:
object.attribute = 'foo'
x = 'attribute'
getattr(object, x)
>>> 'foo'
Run Code Online (Sandbox Code Playgroud)
有没有办法用字符串"深入"对象的属性?换句话说,如果我的对象包含另一个对象,我如何用字符串获取子对象的属性?例如:
object.object.attribute
Run Code Online (Sandbox Code Playgroud) 我试图通过这个非常简单的例子来了解金字塔遍历.我还没有完全掌握的是Article从数据库中"注入"一个对象的位置.
实际上,/Article正确地找到并呈现,article_view但这是相当无用的.如何/何时/何地使用URL的下一部分从db查询特定文章?例如./Article/5048230b2485d614ecec341d.
任何线索都会很棒!
init .py
from pyramid.config import Configurator
from pyramid.events import subscriber
from pyramid.events import NewRequest
import pymongo
from otk.resources import Root
def main(global_config, **settings):
""" This function returns a WSGI application.
"""
config = Configurator(settings=settings, root_factory=Root)
config.add_static_view('static', 'otk:static')
# MongoDB
def add_mongo_db(event):
settings = event.request.registry.settings
url = settings['mongodb.url']
db_name = settings['mongodb.db_name']
db = settings['mongodb_conn'][db_name]
event.request.db = db
db_uri = settings['mongodb.url']
MongoDB = pymongo.Connection
if 'pyramid_debugtoolbar' in set(settings.values()):
class MongoDB(pymongo.Connection):
def …Run Code Online (Sandbox Code Playgroud) 在Arch Linux 64bit上使用MongoDb.全新安装.以root身份尝试:
/etc/rc.d/mongodb start
Run Code Online (Sandbox Code Playgroud)
日志说:
***** SERVER RESTARTED *****
Thu Mar 15 12:00:18 BackgroundJob starting: DataFileSync
Thu Mar 15 12:00:18 versionCmpTest passed
Thu Mar 15 12:00:18 versionArrayTest passed
Thu Mar 15 12:00:18 shardObjTest passed
Thu Mar 15 12:00:18 shardKeyTest passed
Thu Mar 15 12:00:18 isInRangeTest passed
Thu Mar 15 12:00:18 [initandlisten] MongoDB starting : pid=580 port=27017 dbpath=/data/db 64-bit host=(none)
Thu Mar 15 12:00:18 [initandlisten] db version v2.0.3, pdfile version 4.5
Thu Mar 15 12:00:18 [initandlisten] git version: nogitversion
Thu …Run Code Online (Sandbox Code Playgroud) 我想要一个Class属性,它设置datetime.now()何时实例化一个新的类实例.使用此代码,MyThing.created似乎始终MyThing是导入时,而不是mt实例化时.
from datetime import datetime
class MyThing:
__init__(self, created=datetime.now()):
self.created = created
MyThing.created
datetime.datetime(2012, 7, 5, 10, 54, 24, 865791)
mt = MyThing()
mt.created
datetime.datetime(2012, 7, 5, 10, 54, 24, 865791)
Run Code Online (Sandbox Code Playgroud)
我如何能做到这一点,这样created当mt被实例化,而不是MyThing?
我已经尝试了几种方法。根据文档,我已经在应用程序的ini中完成了此操作:
[app:myapp]
#...
jinja2.filters =
islist = myapp.machines.islist
Run Code Online (Sandbox Code Playgroud)
我的功能很简单:
def islist(item):
return isinstance(item, list)
Run Code Online (Sandbox Code Playgroud)
我可以告诉正在读取ini文件中的过滤器设置行,因为如果我islist弄错了函数的虚线路径,则该应用程序将引发错误。
但是,当我尝试islist在模板中使用该函数时,该模板找不到该函数。
{% if islist([]) %}a list{% else %}not a list{% endif %}
Run Code Online (Sandbox Code Playgroud)
结果:
UndefinedError: 'islist' is undefined
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么??任何帮助都是极好的。
使用 requests_toolbelt 以多部分形式上传大文件,我构建了一个方法,可以成功上传文件,但是我无法访问发布的文件名。如何访问服务器上的文件名?
# client-side
file = open('/Volumes/Extra/test/my_video.mpg', 'rb')
payload = MultipartEncoder({file.name: file})
r = requests.post(url, data=payload, headers={'Content-Type': 'application/octet-stream'})
# server-side
@view_config(route_name='remote.agent_upload', renderer='json')
def remote_agent_upload(request):
r = request.response
fs = request.body_file
f = open('/Volumes/Extra/tests2/bar.mpg', 'wb') # wish to use filename here
f.write(fs.read())
fs.close()
f.close()
return r
Run Code Online (Sandbox Code Playgroud) 我刚刚开始进入测试开发,并且很难理解要测试什么。那里有很多 foobar 示例,但我很难知道如何测试我的项目单元。例如,采用以下函数,它简单地将文本文件的行作为列表返回:
def getLines(filename):
try:
f = open(filename,'rb')
lines = f.readlines()
f.close()
except:
break
return lines
Run Code Online (Sandbox Code Playgroud)
如果这是您的功能,您会测试什么?您不需要编写代码,如果您愿意,只需概括地告诉我即可。
谢谢
想象一下这个对象:
my_obj = {
'Episodes' : [
{'Tags' : ['one','two','three']},
{'Tags' : ['three','four','five']}
]
}
Run Code Online (Sandbox Code Playgroud)
我想创建一组标签:
tags = set(tag for tag in e['Tags'] for e in my_obj['Episodes'])
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用,因为e没有定义.我该怎么做??
我已经将一个字符串列表传递给了我的Jinja2模板.我想将Jinja2用于join列表,但我想将每个列表项转换为a href.是否有可能或者我是否需要以某种方式将链接传递给模板?
# I use this to join the list items.
{{ my_list|join(', ') }}
# I use this to make links individually
{% for i in my_list %}
<a href="/edit/{{ i }}">i</a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
如何在项目加入之前将项目转换为链接?
任何帮助都是极好的.
python ×9
class ×2
jinja2 ×2
pyramid ×2
archlinux ×1
attributes ×1
datetime ×1
dictionary ×1
mongodb ×1
nose ×1
set ×1
sqlalchemy ×1
traversal ×1
unit-testing ×1