虽然FormEncode现在貌似用的人不多了,不过它的validate在数据校验、转换上还是很犀利的。如果用的好的话,还是可以大大减轻冗杂的代码量的。不过因为其中部分代码涉及到了一些IO操作,而SAE显然在这方面做了很多改动。因此要在SAE上使用它,就需要对它做点小小改动。主要变更代码如下:
api.py文件中有一个get_localedir函数,在系统载入时就会运行。该函数调用了resource_filename,而这个方法会去查找pwd模块(该模块SAE取消掉了)。
def get_localedir():
"""
Retrieve the location of locales.
If we're built as an egg, we need to find the resource within the egg.
Otherwise, we need to look for the locales on the filesystem or in the
system message catalog.
"""
locale_dir = ''
# Check the egg first
if resource_filename is not None:
return os.path.join(os.path.dirname(__file__), 'i18n')
#try:
# locale_dir = resource_filename(__name__, "/i18n")
#except NotImplementedError:
# # resource_filename doesn't work with non-egg zip files
# pass
if not hasattr(os, 'access'):
# This happens on Google App Engine
return os.path.join(os.path.dirname(__file__), 'i18n')
if os.access(locale_dir, os.R_OK | os.X_OK):
# If the resource is present in the egg, use it
return locale_dir
# Otherwise, search the filesystem
locale_dir = os.path.join(os.path.dirname(__file__), 'i18n')
if not os.access(locale_dir, os.R_OK | os.X_OK):
# Fallback on the system catalog
locale_dir = os.path.normpath('/usr/share/locale')
return locale_dir
大家注意一下就可以发现,这段代码里面还有个Google App Engine的代码实现。不过现在还没想到有什么好的方法来判断是否运行于SAE之上,因此,最简单的方式就是直接在行数开始处return os.path.join(os.path.dirname(__file__), 'i18n'),先当作SAE上的权宜之计,以后想到了合适的判断方式再来变更吧。
No comments:
Post a Comment