Learning python 系列4

来源:互联网 发布:云盘源码 编辑:程序博客网 时间:2024/04/28 19:51
和往日一样在开始今天的learning python之前,还是要把昨天的关系图给画出来。现在可以继续下去了,今天主要是focus在plugins.至于plugins的具体的机制我还不清楚,有待查阅相关资料。
huawei_e220.py
这里有两个类,HuaweiE220SIMClass和HuaweiE220,分别继承与SIMBaseClass和DBusDevicePlugin,
而DBusDevicePlugin是昨天刚刚讨论过的东西。但是首先,我们还是看一下,sim.py中的SIMBaseClass.
SIMBaseClass:
有成员:sconn,和size.__init__(self,sconn)
有方法:
set_size(self,size):设置self.size的值嘛
preinit(self):
由self.sconn.reset_settings(),然后返回d,addcallbacks.
有self.sconn.disable_echo()返回的d,addcallback和errback,这里的callbacks其主要作用就是和errback成对出现。
postinit(self,ucs2=True):
如果是ucs2的编码,调用self.sconn.set_charset("UCS2"),添加callbacks.
取得self.sconn.get_phonebook_size()的返回值d,添加callback.
或许还记得昨天DevicePlugin的preinit和postinit是调用sim.preinit和postinit函数,应该就是这个。

现在考虑HuaweiE220SIMClass是继承SIMBaseClass的
重载了postinit()方法。
调用基肋的postinit(ucs2=False)返回的d,添加callback,而这个callback,调用sconn.get_smsc()
然后有self.sconn.getcharset()返回的d,继续添加callback.最后设置charset,返回size.
其实代码中有太多的defer的嵌套问题。他们的参数来自何方是一个有趣的问题。还没有搞清楚。

而对于HuaweiE220这个子类呢?
为name,author,version都进行了定义,而且
custom:=HuaweiCustomizer,这个也就是Hardware目录中的那个。
simklass:=HuaweiE220SIMClass
都是重新定义了,并且重载了extra_info(self,children)的方法:
取得self.cport和self.dport的utf8的编码。
并且构造实力:huaweiE220,我猜测plugin的机制,和这行有莫大的关系。但是还不清楚。

而对于os的目录下,支持很对os,我们在这仅选择一个发行版ubuntu。
UbuntuBaseDistro 类是继承LinuxPlugin,修改其中的os_name和os_version,并且
构造他的实例对象。
而LinuxPlugin类存在于common.oses下的linux.py
LinuxPlugin他是从OSPlugin来继承的,当然拥有OSPlugin的属性。
有member:dialer = WvDialDialer(),这是,我们知道,dialer是这样被构造出来的
方法:
is_valid(self,os_info=lsb_info):检查os_info是否和self.os_name匹配。
get_connection_args(self,dialer):包括:
[gksudo_path],dialer.bin_path,self.abstraction[WVDIAL_CONN_SWITCH],dialer.conf_path,'connect'
get_disconnection_args(self,dialer):
killall_path,'pppd',和'wvdial'
get_dialer_assumptions(self):检查如果要验证secret的问题。
check_permission(self):调用self.dialer.check_permission()

对于最后一个notification目录,下面没有plugins,所以这个问题也到此为止。
对于osplugin主要在于dialer,而对于device,主要是sim和customer,而sim有主要在sconn上。
















原创粉丝点击