Python论坛  - 讨论区

标题:Re[4]: [python-chinese] babywork 的开发总结, 欢迎大家一起讨论

2004年08月25日 星期三 18:26

Zoom.Quiet zoomq at infopro.cn
Wed Aug 25 18:26:10 HKT 2004

Hollo limodou:

  嗯嗯!数据驱动!也是在下直觉的第一反应
对应代码
   def fixlineblock(self,model,cntli):
        """行模式标签处理
            - model 输出模式("标准字串格式化模式直接使用%s来设置替换位置"
                ,"前导字符,除头行外其它都要加缀的字符")
            - cntli 内容列表,一组字串的列表
        """
        exp = ""
        i=0
        for node in cntli:
            if 0==i:
                exp="%s%s"%(exp,(model[0]%node))
            else:
                exp="%s%s%s"%(exp,model[1],(model[0]%node))
            i+=1
        return exp

但是,作为Py代码的解析输出,有个缩进的问题,一直没有敢处理,直接使用模板的原始标签位置,小新是采用专门的函式进行再次处理……………………

只是如此一来,三层以上的嵌套以及嵌套  中再含有编辑判定!!!
就太复杂了! 使用递归的话,代码太难读,不利于维护………………也是种烦恼!


/******** [2004-08-25]18:22:26 ; limodou wrote:

limodou> hoxide,您好!

limodou> 	我设计的模板系统在示例中已经支持交叉引用和循环,不过没有经过很细致的测试。对于循环我与ZoomQuiet的想法是一致的,由数据来驱动的。因此你不用写什么
limodou> for,只要给我的是一个列表我就循环,不是列表就是替换一次。

limodou>    
limodou> 但meteor绝对不是psp,因为它可以做代码的解析,而meteor只进行替换,因此功能简单简单得多,不能与psp相比。

limodou> ======= 2004-08-25 17:23:57 您在来信中写道:=======

>>limodou,您好!
>>
>>	谢谢. 看来limodou的模板系统, 我在一次感到他真的就像psp的翻版.
>>不知道这个系统实现了没有, 没实现的话可以参考一下psp的实现.
>>当然和也有一些不同, 特别是交叉应用方面, 不过这不是个本质上的问题,
>>交叉应用可以在key的解析时一下子解决.
>>    psp最大的好处是可以处理循环.比如:
>>
>><%for i in range(10):
>>     #这个空格是必须的
>>%>
>>number: <%=i%>
>><%#这个也是%>
>>
>>可以产生:
>>number: 0
>>number: 1
>>number: 2
>>number: 3
>>number: 4
>>number: 5
>>number: 6
>>number: 7
>>number: 8
>>number: 9
>>
>>当然我只是例子, 具体实现还有很多可以改进的地方.
>>
>>======= 2004-08-25 17:13:34 您在来信中写道:=======
>>
>>>hoxide,您好!
>>>
>>>	总结不错,希望能看到你在社区里大显身手。
>>>
>>>======= 2004-08-25 16:32:40 您在来信中写道:=======
>>>
>>>>这也是我的社会实践报告~~~ 				
>>>>
>>>>        hoxide
>>>>        hoxide_dirac at yahoo.com.cn
>>>>          2004-08-25
>>>>_______________________________________________
>>>>python-chinese list
>>>>python-chinese at lists.python.cn
>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>
>>>
>>>= = = = = = = = = = = = = = = = = = = =
>>>			
>>>
>>>        致
>>>礼!
>>> 
>>>				 
>>>        limodou
>>>        chatme at 263.net
>>>          2004-08-25
>>>
>>>_______________________________________________
>>>python-chinese list
>>>python-chinese at lists.python.cn
>>>http://python.cn/mailman/listinfo/python-chinese
>>>
>>
>>= = = = = = = = = = = = = = = = = = = =
>>			
>>
>>        致
>>礼!
>> 
>>				 
>>        hoxide
>>        hoxide_dirac at yahoo.com.cn
>>          2004-08-25
>>
>>_______________________________________________
>>python-chinese list
>>python-chinese at lists.python.cn
>>http://python.cn/mailman/listinfo/python-chinese
>>

limodou> = = = = = = = = = = = = = = = = = = = =
			

limodou>         致
limodou> 礼!
 
				 
limodou>         limodou
limodou>         chatme at 263.net
limodou>           2004-08-25



********************************************/

-- 
Free as in Freedom

 Zoom.Quiet                           

#=========================================#
]Time is unimportant, only life important![
#=========================================#

sender is the Bat!2.12.00



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月25日 星期三 18:37

limodou chatme at 263.net
Wed Aug 25 18:37:41 HKT 2004

Zoom.Quiet,您好!

	python好象还有一个模块xdrlib是实现工业标准的对象持续化的,不过没研究。

    另外,刚才想了一下,其实模板本身可以不是python的程序形式。因为我可以做一个预处理,处理成我要的对象形式就可以了,因此,我可以设计出多种多样的预处理器,这样meteor可以支持多种多样的模板,而内部替换的核心却不用变。其实就是将模板系统分成:
    模板读取接口----用于将各种形式的模板内容读出来变成统一的内部表示
    模板替换核心----进行模板的替换。

    呵呵,一个话题会引出N个话题都是很有意思的事。慢慢来吧,我们会越来越充实的。:)

======= 2004-08-25 18:21:06 您在来信中写道:=======

>Hollo limodou:
>
>  嗬嗬嗬!只要乱想,结构性的设计会变化出无限可能的是也乎…………
>
>不过讲到 pickle,
>4suite 的4ODS 专门实现了 ODMG 对象数据标准(Object Data Standard)v3.0(其它工具都无意实现)。除此之外,ODMG 标准使用 .odl 文件中的对象格式规范。如果您希望或者需要,除诸如 shelve 或 pickle 特别方法以外,4ODS 允许更正式的持续对象设计
>
>嘿嘿嘿!好象是Python 持久性对象应用的唯一实现?!?!
>
>可以参考一下子是也乎,
>
>ps.
>进来newEdit 以迅猛的速度在升级哪!!
>技术文档也请尽快同步上来,让同志们分享 Python 的快乐是也乎是也乎!
>
>/******** [2004-08-25]18:15:13 ; limodou wrote:
>
>limodou> Zoom.Quiet,您好!
>
>limodou> 	xslt的东西当初我为了翻译diveintopython和学习doctook是专门学过,现在已经忘得差不多了。难道是不难,但xml标记这东西看来还是太多,太乱。
>
>limodou>     4Suite也知道,没用起来。
>
>limodou>    
>limodou> meteor以后可能不会生成xml的配置文件,而更是象python一样的文件。因为,我设置的脚本也好,wizard也好都是python的程序。致于数据保存我可能先会考虑使用pickle,因为直接把一个对象保存起来很方便,以后也许会考虑做一些适配器可以转成其它的格式,如xml格式,但内部应该是越简单越直接越好。这是我的想法。不然光做配置数据的存储、分析可能就够麻烦的了。是否使用pickle关键是看数据是私有还是公开的。因为象代码片段我想象的是别人可以用编辑器进行修改,而且使用xml的确容易组织于是就使用它的。不过前提还有一个就是,它的格式是统一的。但NewEdit中的参数管理就使用了
>limodou> pickle来保存,因为数据可能是各种各样的,很复杂,我也不想在这方面浪费时间。因此要看最后模板的配置数据有多复杂,太复杂了
>limodou> 我可能还是会使用pickle来保存。
>
>limodou>    
>limodou> 在NewEdit中已经使用了xrc的资源文件,都是我使用xrced来生成的,然后在我的程序中进行调用。但是在程序中只调用是不行的,因为还有逻辑在其中,因此xrc只是生成窗口,处理逻辑还是要单独实现。至于在wizard中是否使用xrc可能我还在考虑。因为我看到了pycard,它也提供一上资源编辑的功能,而且格式看上去虽然不是xml的,但是感学还不错,而且关键的是,它根本就是一个python程序,就象我设计的meteor模板一样是一个python程序。等有时间我会仔细研究一下。
>
>limodou>    
>limodou> 这样我想象中的wizard是一系列的wizard对象,这些对象是用来采集用户信息,并且以界面的方式展现,那么我可能使用xrc或pycard的格式。然后等wizard收集完所有的信息之后,再调用meteor来进行真正的模板处理。这其中wizard可能也会有一个wizard脚本的对象来控制所有wizard页面的显示与跳转。也许还会有一个简单的配置把wizard与meteor联系在一起协同工作。
>
>limodou>    
>limodou> 这是目前的设想。等到wizard做出来的时候,NewEdit可以非常的通用了,你只要写自已的wizard和模板就可以生成想要的代码框架了。
>
>limodou> ======= 2004-08-25 17:35:32 您在来信中写道:=======
>
>>>Hollo limodou:
>>>
>>>  嘿嘿嘿!!!在下最擅长的就是“抛砖引玉”是也乎!
>>>
>>>自个儿是什么也不精,就是挑有趣的用!唯恐错过新生事物的品尝!
>>>
>>>不过,使用的东西越广,说明东西越成熟,越有学习的必要哪??
>>>
>>>4Suite 一直知道,但是没有机会使用,现在一用!发现果真好!
>>>XSLT 也是老技术了,现在都要升级到 EXSLT 了!
>>>使用XMLSpy 根本不用怎么学习,尝试的用一下子,马上就会是也乎??
>>>以下是主要的模板代码:
>>>
>>>
>>>				
>>>					
>>>					
>>>    def pack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>(self, fields):
>>>        """报文打包"""
>>>        return struct.pack('>>> select="Field">>>> select="@FieldType"/>'
>>>                ,fields['>>> select="@FieldName"/>']
>>>                )
>>>
>>>    def unpack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>(self, packet):
>>>        """>>> select="@CommandName"/>报文解包"""
>>>	
>>>		
>>>        self.body.fields[''], \
>>>		
>>>        self.body.fields[''] = \
>>>	
>>>
>>>            struct.unpack('>>> select="Field">>>> select="@FieldType"/>',packet)
>>>					
>>>					
>>>
>>>    def pack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>_resp(self, fields):
>>>        """_resp报文体为空"""
>>>        return None
>>>
>>>    def unpack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>_resp(self, packet):
>>>        """_resp报文体为空"""
>>>        pass
>>>					
>>>				
>>>
>>>
>>>
>>>可以看到
>>>;;;
>>>算子非常自然的进行了逻辑判定,嵌套循环,很形象的解析了XML的内容,
>>>学习曲线应该不是严重的吧…………
>>>
>>>
>>>/******** [2004-08-25]17:29:32 ; limodou wrote:
>>>
>>>limodou> Zoom.Quiet,您好!
>>>
>>>limodou>
>>>	那是自然了。xslt就是专门处理xml的脚本语言。只不过,用的东西太广的话,别人就很难参与进来了。因为学习曲线可能太长了。
>>>
>>>limodou> ======= 2004-08-25 17:09:56 您在来信中写道:=======
>>>
>>>>>Hollo limodou:
>>>>>
>>>>>  http://wiki.woodpecker.org.cn/moin.cgi/4suite4xslt
>>>>>
>>>>>整理了一下子!
>>>>>发现XML 数据源的模板解析还是XSLT最舒服!!
>>>>>
>>>>>
>>>>>/******** [2004-08-25]17:09:15 ; limodou wrote:
>>>>>
>>>>>limodou> Zoom.Quiet,您好!
>>>>>
>>>>>limodou> 	有心得写成文章呀!
>>>>>
>>>>>limodou> ======= 2004-08-24 17:36:34 您在来信中写道:=======
>>>>>
>>>>>>>Hollo limodou:
>>>>>>>
>>>>>>>  谢谢!!
>>>>>>>
>>>>>>>回家好好看一看!
>>>>>>>今天,研究了一下子 4suite 使用其 4xslt
>>>>>>>模块,可以在脚本中进行 XSLT+XML 的解析处理,
>>>>>>>
>>>>>>>哈哈哈!直接使用 XSLT 进行嵌套处理非常的自然,也是XML 标准的处理方式!!!
>>>>>>>
>>>>>>>
>>>>>>>/******** [2004-08-24]17:34:58 ; limodou wrote:
>>>>>>>
>>>>>>>limodou> python-chinese,您好!
>>>>>>>
>>>>>>>limodou>
>>>>>>>我写了一个小的模板类,现在可以实现嵌套处理,但是不支持根据列表数据而实现模板的循环。
>>>>>>>
>>>>>>>limodou> 模板类:
>>>>>>>
>>>>>>>limodou> import re
>>>>>>>limodou> import sets
>>>>>>>limodou> import copy
>>>>>>>
>>>>>>>limodou> re_node = re.compile('%\((\w+)\)s')
>>>>>>>
>>>>>>>limodou> class Template:
>>>>>>>limodou> 	def __init__(self):
>>>>>>>limodou> 		pass
>>>>>>>	
>>>>>>>limodou> 	def load(self, tplname):
>>>>>>>limodou> 		mod = __import__(tplname)
>>>>>>>limodou> 		components = tplname.split('.')
>>>>>>>limodou> 		for comp in components[1:]:
>>>>>>>limodou> 			mod = getattr(mod, comp)
>>>>>>>
>>>>>>>limodou> 		self.vars = {}
>>>>>>>limodou> 		self.nodes = {}
>>>>>>>limodou> 		for v in dir(mod):
>>>>>>>limodou> 			if v.startswith('__') and v.endswith('__'):
>>>>>>>limodou> 				continue
>>>>>>>limodou> 			self.vars[v] = getattr(mod, v)
>>>>>>>limodou> 			self.nodes[v] =
>>>>>>>limodou> list(sets.Set(self._get_rely_on_node(self.vars[v])))
>>>>>>>
>>>>>>>limodou> 	def _get_rely_on_node(self, s):	#search for
>>>>>>>limodou> %(name)s format, make a dict
>>>>>>>limodou> 		return re_node.findall(s)
>>>>>>>
>>>>>>>limodou> 	def _get_list(self, path, target):
>>>>>>>limodou> 		if not self.vars.has_key(target):
>>>>>>>limodou> 			return
>>>>>>>limodou> 		if target not in path:
>>>>>>>limodou> 			path.append(target)
>>>>>>>limodou> 		for i in self.nodes[target]:
>>>>>>>limodou> 			self._get_list(path, i)
>>>>>>>limodou> 		return
>>>>>>>
>>>>>>>limodou> 	def value(self, target='main', values=None):
>>>>>>>limodou> 		path = []
>>>>>>>limodou> 		self._get_list(path, target)
>>>>>>>limodou> 		path.reverse()
>>>>>>>limodou> 		if not values:
>>>>>>>limodou> 			vals = {}
>>>>>>>limodou> 		else:
>>>>>>>limodou> 			vals = copy.deepcopy(values)
>>>>>>>limodou> 		for i in path:
>>>>>>>limodou> 			vals[i] = self.vars[i] % vals
>>>>>>>limodou> 		return vals[target]
>>>>>>>
>>>>>>>limodou> if __name__ == '__main__':
>>>>>>>limodou> 	vars = dict(value='aba')
>>>>>>>limodou> 	template = Template()
>>>>>>>limodou> 	template.load('tmp2')
>>>>>>>limodou> 	print template.value('main', vars)
>>>>>>>
>>>>>>>limodou> 测试文件:
>>>>>>>
>>>>>>>limodou> main="""
>>>>>>>limodou> v = []
>>>>>>>limodou> %(statement)s
>>>>>>>limodou> for i in range(10):
>>>>>>>limodou> %(printvar)s"""
>>>>>>>
>>>>>>>limodou> statement = "v.append('%(value)s')\n"
>>>>>>>
>>>>>>>limodou> printvar = "    print '\\n'.join(%(var)s)\n"
>>>>>>>
>>>>>>>limodou> var = 'v'
>>>>>>>
>>>>>>>limodou> 有兴趣的可以讨论。
>>>>>>>
>>>>>>>limodou>
>>>>>>>现在的问题是对于可循环的模板,比如上面的statement我想根据提供的数据如果为列表或元组时,会自动进行重复。但一个模板可能涉及多个模板变量,如果有多个模板变量为多值该如何处理。按我
>>>>>>>limodou>
>>>>>>>的想法,这种多值应该组织为一个元组的列表。不过,不太清楚otter会分析出什么数据来。不知道ZoomQuiet对这个有没有兴趣。
>>>>>>>
>>>>>>>limodou> 简单说一下用法:
>>>>>>>
>>>>>>>limodou> 我定义的模板其实是一个模块,不过只是用来定义数据的。
>>>>>>>
>>>>>>>limodou> 	vars = dict(value='aba')  #生成模板用到的变量
>>>>>>>limodou> 	template = Template()     #生成一个模板对象
>>>>>>>limodou> 	template.load('tmp2')     #装入一个模板
>>>>>>>limodou> 	print template.value('main', vars)  
>>>>>>>limodou> #得到最终模板的值
>>>>>>>当然,模板中还有许多的子模板,都可以得到。
>>>>>>>limodou>         致
>>>>>>>limodou> 礼!
>>>>>>> 				
>>>>>>>
>>>>>>>limodou>         limodou
>>>>>>>limodou>         chatme at 263.net
>>>>>>>limodou>           2004-08-24
>>>>>>>
>>>>>>>
>>>>>>>********************************************/
>>>>>>>
>>>>>>>-- 
>>>>>>>Free as in Freedom
>>>>>>>
>>>>>>> Zoom.Quiet                           
>>>>>>>
>>>>>>>#=========================================#
>>>>>>>]Time is unimportant, only life important![
>>>>>>>#=========================================#
>>>>>>>
>>>>>>>sender is the Bat!2.12.00
>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>python-chinese list
>>>>>>>python-chinese at lists.python.cn
>>>>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>>>>
>>>>>
>>>>>limodou> = = = = = = = = = = = = = = = = = = = =
>>>>>			
>>>>>
>>>>>limodou>         致
>>>>>limodou> 礼!
>>>>> 
>>>>>				 
>>>>>limodou>         limodou
>>>>>limodou>         chatme at 263.net
>>>>>limodou>           2004-08-24
>>>>>
>>>>>
>>>>>
>>>>>********************************************/
>>>>>
>>>>>-- 
>>>>>Free as in Freedom
>>>>>
>>>>> Zoom.Quiet                           
>>>>>
>>>>>#=========================================#
>>>>>]Time is unimportant, only life important![
>>>>>#=========================================#
>>>>>
>>>>>sender is the Bat!2.12.00
>>>>>
>>>>>_______________________________________________
>>>>>python-chinese list
>>>>>python-chinese at lists.python.cn
>>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>>
>>>
>>>limodou> = = = = = = = = = = = = = = = = = = = =
>>>			
>>>
>>>limodou>         致
>>>limodou> 礼!
>>> 
>>>				 
>>>limodou>         limodou
>>>limodou>         chatme at 263.net
>>>limodou>           2004-08-25
>>>
>>>
>>>
>>>********************************************/
>>>
>>>-- 
>>>Free as in Freedom
>>>
>>> Zoom.Quiet                           
>>>
>>>#=========================================#
>>>]Time is unimportant, only life important![
>>>#=========================================#
>>>
>>>sender is the Bat!2.12.00
>>>
>>>_______________________________________________
>>>python-chinese list
>>>python-chinese at lists.python.cn
>>>http://python.cn/mailman/listinfo/python-chinese
>>>
>
>limodou> = = = = = = = = = = = = = = = = = = = =
>			
>
>limodou>         致
>limodou> 礼!
> 
>				 
>limodou>         limodou
>limodou>         chatme at 263.net
>limodou>           2004-08-25
>
>
>
>********************************************/
>
>-- 
>Free as in Freedom
>
> Zoom.Quiet                           
>
>#=========================================#
>]Time is unimportant, only life important![
>#=========================================#
>
>sender is the Bat!2.12.00
>
>_______________________________________________
>python-chinese list
>python-chinese at lists.python.cn
>http://python.cn/mailman/listinfo/python-chinese
>

= = = = = = = = = = = = = = = = = = = =
			

        致
礼!
 
				 
        limodou
        chatme at 263.net
          2004-08-25


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月25日 星期三 18:42

limodou chatme at 263.net
Wed Aug 25 18:42:56 HKT 2004

Zoom.Quiet,您好!

	对了,把 epydoc给简单地讲一讲,文档生成得不错,现在很流行这种框架结构的文档。象wxWindows有一种新的文档结构就是这种框架结构的。

    不过模板系统虽然方便但也不能完全代替编程,因此可能另一种解决方法是在数据中提供编程接口,也就是在进行某些模板替换时,可以调用客户代码进行处理。

======= 2004-08-25 18:26:10 您在来信中写道:=======

>Hollo limodou:
>
>  嗯嗯!数据驱动!也是在下直觉的第一反应
>对应代码
>   def fixlineblock(self,model,cntli):
>        """行模式标签处理
>            - model 输出模式("标准字串格式化模式直接使用%s来设置替换位置"
>                ,"前导字符,除头行外其它都要加缀的字符")
>            - cntli 内容列表,一组字串的列表
>        """
>        exp = ""
>        i=0
>        for node in cntli:
>            if 0==i:
>                exp="%s%s"%(exp,(model[0]%node))
>            else:
>                exp="%s%s%s"%(exp,model[1],(model[0]%node))
>            i+=1
>        return exp
>
>但是,作为Py代码的解析输出,有个缩进的问题,一直没有敢处理,直接使用模板的原始标签位置,小新是采用专门的函式进行再次处理……………………
>
>只是如此一来,三层以上的嵌套以及嵌套  中再含有编辑判定!!!
>就太复杂了! 使用递归的话,代码太难读,不利于维护………………也是种烦恼!
>
>
>/******** [2004-08-25]18:22:26 ; limodou wrote:
>
>limodou> hoxide,您好!
>
>limodou> 	我设计的模板系统在示例中已经支持交叉引用和循环,不过没有经过很细致的测试。对于循环我与ZoomQuiet的想法是一致的,由数据来驱动的。因此你不用写什么
>limodou> for,只要给我的是一个列表我就循环,不是列表就是替换一次。
>
>limodou>    
>limodou> 但meteor绝对不是psp,因为它可以做代码的解析,而meteor只进行替换,因此功能简单简单得多,不能与psp相比。
>
>limodou> ======= 2004-08-25 17:23:57 您在来信中写道:=======
>
>>>limodou,您好!
>>>
>>>	谢谢. 看来limodou的模板系统, 我在一次感到他真的就像psp的翻版.
>>>不知道这个系统实现了没有, 没实现的话可以参考一下psp的实现.
>>>当然和也有一些不同, 特别是交叉应用方面, 不过这不是个本质上的问题,
>>>交叉应用可以在key的解析时一下子解决.
>>>    psp最大的好处是可以处理循环.比如:
>>>
>>><%for i in range(10):
>>>     #这个空格是必须的
>>>%>
>>>number: <%=i%>
>>><%#这个也是%>
>>>
>>>可以产生:
>>>number: 0
>>>number: 1
>>>number: 2
>>>number: 3
>>>number: 4
>>>number: 5
>>>number: 6
>>>number: 7
>>>number: 8
>>>number: 9
>>>
>>>当然我只是例子, 具体实现还有很多可以改进的地方.
>>>
>>>======= 2004-08-25 17:13:34 您在来信中写道:=======
>>>
>>>>hoxide,您好!
>>>>
>>>>	总结不错,希望能看到你在社区里大显身手。
>>>>
>>>>======= 2004-08-25 16:32:40 您在来信中写道:=======
>>>>
>>>>>这也是我的社会实践报告~~~ 				
>>>>>
>>>>>        hoxide
>>>>>        hoxide_dirac at yahoo.com.cn
>>>>>          2004-08-25
>>>>>_______________________________________________
>>>>>python-chinese list
>>>>>python-chinese at lists.python.cn
>>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>>
>>>>
>>>>= = = = = = = = = = = = = = = = = = = =
>>>>			
>>>>
>>>>        致
>>>>礼!
>>>> 
>>>>				 
>>>>        limodou
>>>>        chatme at 263.net
>>>>          2004-08-25
>>>>
>>>>_______________________________________________
>>>>python-chinese list
>>>>python-chinese at lists.python.cn
>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>
>>>
>>>= = = = = = = = = = = = = = = = = = = =
>>>			
>>>
>>>        致
>>>礼!
>>> 
>>>				 
>>>        hoxide
>>>        hoxide_dirac at yahoo.com.cn
>>>          2004-08-25
>>>
>>>_______________________________________________
>>>python-chinese list
>>>python-chinese at lists.python.cn
>>>http://python.cn/mailman/listinfo/python-chinese
>>>
>
>limodou> = = = = = = = = = = = = = = = = = = = =
>			
>
>limodou>         致
>limodou> 礼!
> 
>				 
>limodou>         limodou
>limodou>         chatme at 263.net
>limodou>           2004-08-25
>
>
>
>********************************************/
>
>-- 
>Free as in Freedom
>
> Zoom.Quiet                           
>
>#=========================================#
>]Time is unimportant, only life important![
>#=========================================#
>
>sender is the Bat!2.12.00
>
>_______________________________________________
>python-chinese list
>python-chinese at lists.python.cn
>http://python.cn/mailman/listinfo/python-chinese
>

= = = = = = = = = = = = = = = = = = = =
			

        致
礼!
 
				 
        limodou
        chatme at 263.net
          2004-08-25


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月25日 星期三 18:47

limodou chatme at 263.net
Wed Aug 25 18:47:17 HKT 2004

Zoom.Quiet,您好!

	写技术文档要花时间呀。象 newEdit这次到2.6我又进行了大的修改,几乎每个程序都改了一下。而且某些核心的东西还经常地发生变化。好在是一个人,不用考虑别人。还有就是有些东西在脑子里,但是要写出来就不容易了,写多深,写多少,如何写,都不是件容易的事。有时间一定会写的。如果有哪些很想快点知道的,不如就用uc好了。我有时间就在网上,可以直接问我。语音聊也可以的。

======= 2004-08-25 18:21:06 您在来信中写道:=======

>Hollo limodou:
>
>  嗬嗬嗬!只要乱想,结构性的设计会变化出无限可能的是也乎…………
>
>不过讲到 pickle,
>4suite 的4ODS 专门实现了 ODMG 对象数据标准(Object Data Standard)v3.0(其它工具都无意实现)。除此之外,ODMG 标准使用 .odl 文件中的对象格式规范。如果您希望或者需要,除诸如 shelve 或 pickle 特别方法以外,4ODS 允许更正式的持续对象设计
>
>嘿嘿嘿!好象是Python 持久性对象应用的唯一实现?!?!
>
>可以参考一下子是也乎,
>
>ps.
>进来newEdit 以迅猛的速度在升级哪!!
>技术文档也请尽快同步上来,让同志们分享 Python 的快乐是也乎是也乎!
>
>/******** [2004-08-25]18:15:13 ; limodou wrote:
>
>limodou> Zoom.Quiet,您好!
>
>limodou> 	xslt的东西当初我为了翻译diveintopython和学习doctook是专门学过,现在已经忘得差不多了。难道是不难,但xml标记这东西看来还是太多,太乱。
>
>limodou>     4Suite也知道,没用起来。
>
>limodou>    
>limodou> meteor以后可能不会生成xml的配置文件,而更是象python一样的文件。因为,我设置的脚本也好,wizard也好都是python的程序。致于数据保存我可能先会考虑使用pickle,因为直接把一个对象保存起来很方便,以后也许会考虑做一些适配器可以转成其它的格式,如xml格式,但内部应该是越简单越直接越好。这是我的想法。不然光做配置数据的存储、分析可能就够麻烦的了。是否使用pickle关键是看数据是私有还是公开的。因为象代码片段我想象的是别人可以用编辑器进行修改,而且使用xml的确容易组织于是就使用它的。不过前提还有一个就是,它的格式是统一的。但NewEdit中的参数管理就使用了
>limodou> pickle来保存,因为数据可能是各种各样的,很复杂,我也不想在这方面浪费时间。因此要看最后模板的配置数据有多复杂,太复杂了
>limodou> 我可能还是会使用pickle来保存。
>
>limodou>    
>limodou> 在NewEdit中已经使用了xrc的资源文件,都是我使用xrced来生成的,然后在我的程序中进行调用。但是在程序中只调用是不行的,因为还有逻辑在其中,因此xrc只是生成窗口,处理逻辑还是要单独实现。至于在wizard中是否使用xrc可能我还在考虑。因为我看到了pycard,它也提供一上资源编辑的功能,而且格式看上去虽然不是xml的,但是感学还不错,而且关键的是,它根本就是一个python程序,就象我设计的meteor模板一样是一个python程序。等有时间我会仔细研究一下。
>
>limodou>    
>limodou> 这样我想象中的wizard是一系列的wizard对象,这些对象是用来采集用户信息,并且以界面的方式展现,那么我可能使用xrc或pycard的格式。然后等wizard收集完所有的信息之后,再调用meteor来进行真正的模板处理。这其中wizard可能也会有一个wizard脚本的对象来控制所有wizard页面的显示与跳转。也许还会有一个简单的配置把wizard与meteor联系在一起协同工作。
>
>limodou>    
>limodou> 这是目前的设想。等到wizard做出来的时候,NewEdit可以非常的通用了,你只要写自已的wizard和模板就可以生成想要的代码框架了。
>
>limodou> ======= 2004-08-25 17:35:32 您在来信中写道:=======
>
>>>Hollo limodou:
>>>
>>>  嘿嘿嘿!!!在下最擅长的就是“抛砖引玉”是也乎!
>>>
>>>自个儿是什么也不精,就是挑有趣的用!唯恐错过新生事物的品尝!
>>>
>>>不过,使用的东西越广,说明东西越成熟,越有学习的必要哪??
>>>
>>>4Suite 一直知道,但是没有机会使用,现在一用!发现果真好!
>>>XSLT 也是老技术了,现在都要升级到 EXSLT 了!
>>>使用XMLSpy 根本不用怎么学习,尝试的用一下子,马上就会是也乎??
>>>以下是主要的模板代码:
>>>
>>>
>>>				
>>>					
>>>					
>>>    def pack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>(self, fields):
>>>        """报文打包"""
>>>        return struct.pack('>>> select="Field">>>> select="@FieldType"/>'
>>>                ,fields['>>> select="@FieldName"/>']
>>>                )
>>>
>>>    def unpack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>(self, packet):
>>>        """>>> select="@CommandName"/>报文解包"""
>>>	
>>>		
>>>        self.body.fields[''], \
>>>		
>>>        self.body.fields[''] = \
>>>	
>>>
>>>            struct.unpack('>>> select="Field">>>> select="@FieldType"/>',packet)
>>>					
>>>					
>>>
>>>    def pack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>_resp(self, fields):
>>>        """_resp报文体为空"""
>>>        return None
>>>
>>>    def unpack_>>> select="/Otter/@ProtocolName"/>p_>>> select="@CommandName"/>_resp(self, packet):
>>>        """_resp报文体为空"""
>>>        pass
>>>					
>>>				
>>>
>>>
>>>
>>>可以看到
>>>;;;
>>>算子非常自然的进行了逻辑判定,嵌套循环,很形象的解析了XML的内容,
>>>学习曲线应该不是严重的吧…………
>>>
>>>
>>>/******** [2004-08-25]17:29:32 ; limodou wrote:
>>>
>>>limodou> Zoom.Quiet,您好!
>>>
>>>limodou>
>>>	那是自然了。xslt就是专门处理xml的脚本语言。只不过,用的东西太广的话,别人就很难参与进来了。因为学习曲线可能太长了。
>>>
>>>limodou> ======= 2004-08-25 17:09:56 您在来信中写道:=======
>>>
>>>>>Hollo limodou:
>>>>>
>>>>>  http://wiki.woodpecker.org.cn/moin.cgi/4suite4xslt
>>>>>
>>>>>整理了一下子!
>>>>>发现XML 数据源的模板解析还是XSLT最舒服!!
>>>>>
>>>>>
>>>>>/******** [2004-08-25]17:09:15 ; limodou wrote:
>>>>>
>>>>>limodou> Zoom.Quiet,您好!
>>>>>
>>>>>limodou> 	有心得写成文章呀!
>>>>>
>>>>>limodou> ======= 2004-08-24 17:36:34 您在来信中写道:=======
>>>>>
>>>>>>>Hollo limodou:
>>>>>>>
>>>>>>>  谢谢!!
>>>>>>>
>>>>>>>回家好好看一看!
>>>>>>>今天,研究了一下子 4suite 使用其 4xslt
>>>>>>>模块,可以在脚本中进行 XSLT+XML 的解析处理,
>>>>>>>
>>>>>>>哈哈哈!直接使用 XSLT 进行嵌套处理非常的自然,也是XML 标准的处理方式!!!
>>>>>>>
>>>>>>>
>>>>>>>/******** [2004-08-24]17:34:58 ; limodou wrote:
>>>>>>>
>>>>>>>limodou> python-chinese,您好!
>>>>>>>
>>>>>>>limodou>
>>>>>>>我写了一个小的模板类,现在可以实现嵌套处理,但是不支持根据列表数据而实现模板的循环。
>>>>>>>
>>>>>>>limodou> 模板类:
>>>>>>>
>>>>>>>limodou> import re
>>>>>>>limodou> import sets
>>>>>>>limodou> import copy
>>>>>>>
>>>>>>>limodou> re_node = re.compile('%\((\w+)\)s')
>>>>>>>
>>>>>>>limodou> class Template:
>>>>>>>limodou> 	def __init__(self):
>>>>>>>limodou> 		pass
>>>>>>>	
>>>>>>>limodou> 	def load(self, tplname):
>>>>>>>limodou> 		mod = __import__(tplname)
>>>>>>>limodou> 		components = tplname.split('.')
>>>>>>>limodou> 		for comp in components[1:]:
>>>>>>>limodou> 			mod = getattr(mod, comp)
>>>>>>>
>>>>>>>limodou> 		self.vars = {}
>>>>>>>limodou> 		self.nodes = {}
>>>>>>>limodou> 		for v in dir(mod):
>>>>>>>limodou> 			if v.startswith('__') and v.endswith('__'):
>>>>>>>limodou> 				continue
>>>>>>>limodou> 			self.vars[v] = getattr(mod, v)
>>>>>>>limodou> 			self.nodes[v] =
>>>>>>>limodou> list(sets.Set(self._get_rely_on_node(self.vars[v])))
>>>>>>>
>>>>>>>limodou> 	def _get_rely_on_node(self, s):	#search for
>>>>>>>limodou> %(name)s format, make a dict
>>>>>>>limodou> 		return re_node.findall(s)
>>>>>>>
>>>>>>>limodou> 	def _get_list(self, path, target):
>>>>>>>limodou> 		if not self.vars.has_key(target):
>>>>>>>limodou> 			return
>>>>>>>limodou> 		if target not in path:
>>>>>>>limodou> 			path.append(target)
>>>>>>>limodou> 		for i in self.nodes[target]:
>>>>>>>limodou> 			self._get_list(path, i)
>>>>>>>limodou> 		return
>>>>>>>
>>>>>>>limodou> 	def value(self, target='main', values=None):
>>>>>>>limodou> 		path = []
>>>>>>>limodou> 		self._get_list(path, target)
>>>>>>>limodou> 		path.reverse()
>>>>>>>limodou> 		if not values:
>>>>>>>limodou> 			vals = {}
>>>>>>>limodou> 		else:
>>>>>>>limodou> 			vals = copy.deepcopy(values)
>>>>>>>limodou> 		for i in path:
>>>>>>>limodou> 			vals[i] = self.vars[i] % vals
>>>>>>>limodou> 		return vals[target]
>>>>>>>
>>>>>>>limodou> if __name__ == '__main__':
>>>>>>>limodou> 	vars = dict(value='aba')
>>>>>>>limodou> 	template = Template()
>>>>>>>limodou> 	template.load('tmp2')
>>>>>>>limodou> 	print template.value('main', vars)
>>>>>>>
>>>>>>>limodou> 测试文件:
>>>>>>>
>>>>>>>limodou> main="""
>>>>>>>limodou> v = []
>>>>>>>limodou> %(statement)s
>>>>>>>limodou> for i in range(10):
>>>>>>>limodou> %(printvar)s"""
>>>>>>>
>>>>>>>limodou> statement = "v.append('%(value)s')\n"
>>>>>>>
>>>>>>>limodou> printvar = "    print '\\n'.join(%(var)s)\n"
>>>>>>>
>>>>>>>limodou> var = 'v'
>>>>>>>
>>>>>>>limodou> 有兴趣的可以讨论。
>>>>>>>
>>>>>>>limodou>
>>>>>>>现在的问题是对于可循环的模板,比如上面的statement我想根据提供的数据如果为列表或元组时,会自动进行重复。但一个模板可能涉及多个模板变量,如果有多个模板变量为多值该如何处理。按我
>>>>>>>limodou>
>>>>>>>的想法,这种多值应该组织为一个元组的列表。不过,不太清楚otter会分析出什么数据来。不知道ZoomQuiet对这个有没有兴趣。
>>>>>>>
>>>>>>>limodou> 简单说一下用法:
>>>>>>>
>>>>>>>limodou> 我定义的模板其实是一个模块,不过只是用来定义数据的。
>>>>>>>
>>>>>>>limodou> 	vars = dict(value='aba')  #生成模板用到的变量
>>>>>>>limodou> 	template = Template()     #生成一个模板对象
>>>>>>>limodou> 	template.load('tmp2')     #装入一个模板
>>>>>>>limodou> 	print template.value('main', vars)  
>>>>>>>limodou> #得到最终模板的值
>>>>>>>当然,模板中还有许多的子模板,都可以得到。
>>>>>>>limodou>         致
>>>>>>>limodou> 礼!
>>>>>>> 				
>>>>>>>
>>>>>>>limodou>         limodou
>>>>>>>limodou>         chatme at 263.net
>>>>>>>limodou>           2004-08-24
>>>>>>>
>>>>>>>
>>>>>>>********************************************/
>>>>>>>
>>>>>>>-- 
>>>>>>>Free as in Freedom
>>>>>>>
>>>>>>> Zoom.Quiet                           
>>>>>>>
>>>>>>>#=========================================#
>>>>>>>]Time is unimportant, only life important![
>>>>>>>#=========================================#
>>>>>>>
>>>>>>>sender is the Bat!2.12.00
>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>python-chinese list
>>>>>>>python-chinese at lists.python.cn
>>>>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>>>>
>>>>>
>>>>>limodou> = = = = = = = = = = = = = = = = = = = =
>>>>>			
>>>>>
>>>>>limodou>         致
>>>>>limodou> 礼!
>>>>> 
>>>>>				 
>>>>>limodou>         limodou
>>>>>limodou>         chatme at 263.net
>>>>>limodou>           2004-08-24
>>>>>
>>>>>
>>>>>
>>>>>********************************************/
>>>>>
>>>>>-- 
>>>>>Free as in Freedom
>>>>>
>>>>> Zoom.Quiet                           
>>>>>
>>>>>#=========================================#
>>>>>]Time is unimportant, only life important![
>>>>>#=========================================#
>>>>>
>>>>>sender is the Bat!2.12.00
>>>>>
>>>>>_______________________________________________
>>>>>python-chinese list
>>>>>python-chinese at lists.python.cn
>>>>>http://python.cn/mailman/listinfo/python-chinese
>>>>>
>>>
>>>limodou> = = = = = = = = = = = = = = = = = = = =
>>>			
>>>
>>>limodou>         致
>>>limodou> 礼!
>>> 
>>>				 
>>>limodou>         limodou
>>>limodou>         chatme at 263.net
>>>limodou>           2004-08-25
>>>
>>>
>>>
>>>********************************************/
>>>
>>>-- 
>>>Free as in Freedom
>>>
>>> Zoom.Quiet                           
>>>
>>>#=========================================#
>>>]Time is unimportant, only life important![
>>>#=========================================#
>>>
>>>sender is the Bat!2.12.00
>>>
>>>_______________________________________________
>>>python-chinese list
>>>python-chinese at lists.python.cn
>>>http://python.cn/mailman/listinfo/python-chinese
>>>
>
>limodou> = = = = = = = = = = = = = = = = = = = =
>			
>
>limodou>         致
>limodou> 礼!
> 
>				 
>limodou>         limodou
>limodou>         chatme at 263.net
>limodou>           2004-08-25
>
>
>
>********************************************/
>
>-- 
>Free as in Freedom
>
> Zoom.Quiet                           
>
>#=========================================#
>]Time is unimportant, only life important![
>#=========================================#
>
>sender is the Bat!2.12.00
>
>_______________________________________________
>python-chinese list
>python-chinese at lists.python.cn
>http://python.cn/mailman/listinfo/python-chinese
>

= = = = = = = = = = = = = = = = = = = =
			

        致
礼!
 
				 
        limodou
        chatme at 263.net
          2004-08-25


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号