-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFunctions.py
More file actions
105 lines (96 loc) · 2.88 KB
/
Functions.py
File metadata and controls
105 lines (96 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- coding: utf-8 -*-
"""
dHydra框架的全局方法,在主程序运行时会被引用
---
Created on 03/27/2016
@author: Wen Gu
@contact: emptyset110@gmail.com
"""
import importlib
import sys
import json
import hashlib
import os
import logging
import traceback
# print("加载:Functions.py")
PRODUCER_HASH = dict()
PRODUCER_NAME = dict()
"""
V方法,动态加载数据API类
V可以用Vendor来记忆
"""
def V(name, vendor_name = None, **kwargs):
logger = logging.getLogger('Functions')
if vendor_name is None:
vendor_name = "V-"+name
class_name = name + 'Vendor'
module_name = class_name
try:
instance = getattr( __import__(module_name, globals(),locals(),[class_name], 0), class_name )(**kwargs)
except ImportError:
traceback.print_exc()
return instance
"""
P方法,动态获取生产者类
P可以用Producer来记忆
"""
def P(name, producer_name, **kwargs):
logger = logging.getLogger('Functions')
if producer_name is None:
print(u"producer_name参数不允许为空,请给producer实例设置一个名字")
print(u"命名规范:<actionName.producerName>")
return False
# 将参数排序来保证唯一性
json_kwargs = json.dumps( sorted(kwargs.items()) )
producer_hash = hashlib.sha1( ('name'+json_kwargs).encode('utf8') ).hexdigest()
if producer_hash in PRODUCER_HASH:
# 这个Instance已经存在
print( u"Producer已经存在" )
PRODUCER_NAME[producer_name] = PRODUCER_HASH[producer_hash]
return PRODUCER_HASH[producer_hash]
else:
class_name = name + 'Producer'
module_name = class_name
try:
instance = getattr( __import__(module_name, globals(),locals(),[class_name], 0), class_name )(name=producer_name, **kwargs)
except ImportError:
traceback.print_exc()
# print(instance)
PRODUCER_NAME[producer_name] = instance
PRODUCER_HASH[producer_hash] = instance
logger.info(u"生成Producer:\t{}\t{}".format(producer_name,class_name) )
return instance
"""
A方法,动态获取Action类
A可以用Action来记忆
"""
def A(name, action_name = None, **kwargs):
logger = logging.getLogger('Functions')
if action_name is None:
action_name = "A-" + name
class_name = name + 'Action'
module_name = class_name
try:
return getattr( __import__(module_name, globals(),locals(),[class_name], 0), class_name )(name=action_name, **kwargs)
except ImportError:
traceback.print_exc()
"""
根据producer_name或者hash获取已经生成的Producer实例
"""
def get_producer(producer_name = None, pHash = None):
logger = logging.getLogger('Functions')
if ( producer_name is None and pHash is None ):
logger.error(u"错误:producer_name和pHash两个参数中至少要有一个不为空")
return False
try:
return PRODUCER_NAME[producer_name]
except:
try:
return PRODUCER_HASH[pHash]
except:
logger.error(u"没有找到对应的Producer")
return False
if __name__ == "__main__":
logging.basicConfig()
P('SinaLevel2WS','SinaLevel2WS')