|
|
|
@ -5,7 +5,7 @@ Expose functionality to user by archive them in a function / module / object / c
|
|
|
|
|
|
|
|
|
|
# Python fire 源码分析:
|
|
|
|
|
|
|
|
|
|
## __main__.py
|
|
|
|
|
## \_\_main__.py
|
|
|
|
|
主要负责import被使用的module,或者file,将其导入Fire.fire()函数。
|
|
|
|
|
|
|
|
|
|
## trace.py
|
|
|
|
@ -13,16 +13,23 @@ Expose functionality to user by archive them in a function / module / object / c
|
|
|
|
|
(INITIAL_COMPONENT,INSTANTIATED_CLASS,CALLED_ROUTINE,CALLED_CALLABLE,ACCESSED_PROPERTY,COMPLETION_SCRIPT,INTERACTIVE_MODE
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
FireTrace由一系列FireTraceElement对象组成。每个元素
|
|
|
|
|
FireTrace由一系列FireTraceElement对象组成,内部用list表示。在需要时可以由GetLastHealthyElement().component返回当前被操作的元素。
|
|
|
|
|
表示一个fire执行时的操作。一项行动可能是实例化类、调用例程或访问属性。
|
|
|
|
|
每个操作都使用参数并产生一个新组件。最后一部分
|
|
|
|
|
由Fire序列化为stdout,并由Fire方法返回。如果
|
|
|
|
|
出现Fire用法错误,例如提供的参数不足,无法调用
|
|
|
|
|
每个操作fire._CallAndUpdateTrace()都使用参数并产生一个新component。最后一部分由Fire序列化为stdout,并由Fire方法返回。如果出现Fire使用错误,例如提供的参数不足,无法调用
|
|
|
|
|
一个函数,则该Error将在trace中被capture并且final component将被设定为None。
|
|
|
|
|
|
|
|
|
|
## inspect.py/inspectutils.py
|
|
|
|
|
提供调用操作的功能支持
|
|
|
|
|
提供inspection操作的功能支持
|
|
|
|
|
|
|
|
|
|
## decorators.py
|
|
|
|
|
这些decorators为python fire提供函数metadata。
|
|
|
|
|
这里的fn是指被调用的函数,是fire将准备好的参数传入的终端。
|
|
|
|
|
SetParseFn和SetParseFns允许设置被Fire用于解析命令行参数的函数。这些函数将被用于客户端代码。
|
|
|
|
|
|
|
|
|
|
### SetParseFns(*positional, **named)
|
|
|
|
|
设置fire的fns,以便在调用被修饰的fn时用于解析参数。
|
|
|
|
|
返回一个decorator,当应用于函数时,它会将元数据添加到函数告诉Fire如何将字符串命令行参数转换为正确的用于调用函数的Python参数。
|
|
|
|
|
解析函数应该接受单个字符串参数并向在调用修饰函数时在其位置使用。
|
|
|
|
|
|
|
|
|
|
## core.py
|
|
|
|
|
|
|
|
|
@ -58,4 +65,6 @@ fire的一般执行过程如下:
|
|
|
|
|
|
|
|
|
|
有了python提供的这些函数,就可以实现变量的动态查找和识别,然后根据这些变量的不同类别,进行不同的操作。
|
|
|
|
|
|
|
|
|
|
当检测到component是class, routine, callable object时,调用_CallAndUpdateTrace()来
|
|
|
|
|
当检测到component是class, routine, callable object时,调用_CallAndUpdateTrace()
|
|
|
|
|
|
|
|
|
|
#### _CallAndUpdateTrace()实现
|