李迎辉

李迎辉的博客

他的个人主页  他的博客

Uliweb中的几点变化

李迎辉  2009年09月06日 星期日 21:58 | 1651次浏览 | 1条评论

1. 命令行增加了一个makepkg的命令。它可以用来创建一个目录,同时自动在目录下创建一个__init__.py的文件。方便创建自已的Python包。可以使用:uliweb makepkg name来在当前目录下创建名为name的包结构。

2. 开始支持setup方式来安装app,需要setuptools的支持。目前支持两种类型,一种是app的集合entry_point的group名是uliweb_apps。另一种是单个的app,entry_point的group名为uliweb_app。前者会自动搜索目录下所有的app,而后者则认为只有一个。因此在处理上有所不同。具体如何做我会另写一篇文章来介绍。

3. 可以在settings.ini中写bind和expose。expose是用来绑定url和函数的。而bind是用来绑定topic和函数的。这样的好处是,不需要在python源文件中绑定了,虽然有一些麻烦,但是可以不用导入python文件,只有在真正使用时才需要导入,可以提高效率。但是对于用户,需要去修改settings.ini文件。我认为支持还是有用的。比如,在python源文件中的绑定如果要生效,那么只有去运行相关的代码,怎么做,依靠导入。为了让所有的app中的绑定全部生效,uliweb在启动时会自动导入所有有效的app和它的views.py文件。这样,你可能在__init__.py中写topic的绑定,在views.py写url的映射。所以,在启动时,每个app都会导入若干的文件,如果文件代码比较多,甚至有一些复杂的处理,会影响启动。采用配置的方式要好得多。同时象写在__init__.py中的bind代码,如果你没有把相应的app加入到INSTALLED_APPS中,那么如果导入了可能会引起一些执行上的问题。采用配置的方式可以避免了相关代码的执行,会好一些。

4. 为了可以在settings.ini写bind,因此扩展了dispatch模块,可以让bind, call, get支持字符串形式的函数,形式为module.function_name。这样当call, get在处理时,如果发现函数是字符串,会去先导入再使用。

5. hack了一个setup.py。因为有人反映setup.py install有问题。发现的确,于是跟踪setuptools的模块才发现了问题。对于packages,setup.py只会查找第一层的。所以setuptools提供了一个find_packages的函数,可以自动将子目录下的包列出来。和我理解的差别很大。我原以为就是递归方式,结果不是。再有就是数据文件的处理,也只是一层,不是递归的。结果uliweb有一个目录是template_files,是用来生成project和app的模板目录,放了一些创建时要拷贝的文件,因此它们不是真正的包结构,并且还有象static和templates这样的空目录。这些都在安装时无法拷贝过去。因此没办法,我hack了setuptools的build_py类,用我自已的build_package_data来替换原来的方法。它是会在拷贝完package之后执行的。在这个函数里,我将进行递归操作,把所有文件,除掉象.svn, *.pyc之类的文件,不管是不是包结构都会进行拷贝。这样你只要在setup的package中写顶层的包就可以了。在安装时会将这个包目录下的所有文件包括子目录都进行拷贝。同时把主要部分写到uliweb/utils/setup.py中去了,这样用户在使用时可以从这里导入setup函数。同时我写的setup.py会在执行时自动删除build和dist目录。感觉setuptools不会自动删。

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
tide

回复 tide  2009年09月07日 星期一 17:04

关注,用过您的Ulipad,感觉很不错。有学习一下Uliweb。

0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号