forked from keysaim/genpatch
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbase.py
More file actions
190 lines (150 loc) · 4.93 KB
/
Copy pathbase.py
File metadata and controls
190 lines (150 loc) · 4.93 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#*********************************************************************************************#
#*********************************************************************************************#
#******************witten by Neil Hao(nbaoping@cisco.com), 2014/04/25*************************#
#*********************************************************************************************#
#*********************************************************************************************#
#*********************************************************************************************#
from datetime import datetime
from datetime import timedelta
import os
import sys
import inspect
from xml.dom import minidom
import traceback
import logging
import recipe
NEW_VERSION = True
RES_DIR = 'output'
FILE_HANDLER = None
LOGGING_FORMAT = '%(asctime)s %(levelname)5s: %(filename)s:%(lineno)s[%(funcName)s]-> %(message)s'
__TIME_FMT = '%Y/%m/%d-%H:%M:%S'
__START_TIME = datetime( 1970, 1, 1 )
def init_logging( level=logging.INFO ):
#logging.basicConfig( level=level, format=LOGGING_FORMAT )
logName = None
global FILE_HANDLER
logger = logging.getLogger()
logger.setLevel( level )
formatter = logging.Formatter( LOGGING_FORMAT )
for handler in logger.handlers:
logger.removeHandler( handler )
handler = logging.StreamHandler( sys.stdout )
handler.setFormatter( formatter )
logger.addHandler( handler )
if logName:
bdir = os.path.dirname(logName)
if os.path.exists(bdir):
if is_new_version():
handler = logging.handlers.RotatingFileHandler( logName, 'a', 1024*1024, 20 )
else:
handler = logging.FileHandler( logName )
handler.setFormatter( formatter )
logger.addHandler( handler )
FILE_HANDLER = handler
def is_new_version( ):
return NEW_VERSION
def check_version():
global NEW_VERSION
global LOGGING_FORMAT
if not sys.version.startswith( '2.7' ):
NEW_VERSION = False
#for old version, the funcName may not support
LOGGING_FORMAT = '%(asctime)s %(levelname)5s: %(filename)s:%(lineno)s-> %(message)s'
def std_fmt_name( fmtName ):
if fmtName.startswith( '$' ):
nstr = fmtName[1:len(fmtName)]
if nstr[0] == '-':
nstr = nstr.replace( '-', '_' )
fmtName = '_commonVal' + nstr
return fmtName
def form_common_fmt_name( num ):
nstr = str(num)
if num < 0:
nstr = nstr.replace( '-', '_' )
fmtName = '_commonVal' + nstr
return fmtName
def is_common_fmt_name( fmtName ):
return fmtName.startswith( '_commonVal' )
def strptime( tstr, fmt ):
if NEW_VERSION:
return datetime.strptime( tstr, fmt )
else:
time = recipe.strptime( tstr, fmt )
dtime = datetime( time[0], time[1], time[2], time[3], time[4], time[5] )
return dtime
def total_seconds( dtime ):
delta = dtime - __START_TIME
if NEW_VERSION:
return delta.total_seconds()
else:
return delta.seconds + delta.days*24*3600
def to_datetime( seconds ):
return __START_TIME + timedelta( 0, seconds )
def delta_time( dtime1, dtime2 ):
delta = dtime2 - dtime1
return delta.total_seconds()
def str_time( dtime, fmt=__TIME_FMT ):
return datetime.strftime( dtime, fmt )
def time_str( tstr, fmt=__TIME_FMT ):
return strptime( tstr, fmt )
def seconds_str( tstr, fmt=__TIME_FMT ):
dtime = strptime( tstr, fmt )
return total_seconds( dtime )
def str_seconds( seconds, fmt=__TIME_FMT ):
dtime = to_datetime( seconds )
return str_time( dtime, fmt )
def cur_timestr( ):
now = datetime.now()
return str_time( now )
def mkdir( dname ):
try:
if not os.path.exists( dname ):
os.makedirs( dname )
return True
except:
logging.error( '\n'+traceback.format_exc() )
logging.error( 'create directory:'+dname+' failed' )
return False
def splitall(path):
allparts = []
while 1:
parts = os.path.split(path)
if parts[0] == path: # sentinel for absolute paths
allparts.insert(0, parts[0])
break
elif parts[1] == path: # sentinel for relative paths
allparts.insert(0, parts[1])
break
else:
path = parts[0]
allparts.insert(0, parts[1])
return allparts
def func_name():
return inspect.stack()[1][3]
def raise_virtual( func ):
raise Exception( 'derived must implement '+func+' virtual function' )
def has_attr(node, attrname):
return node.hasAttribute( attrname )
def get_attr_value(node, attrname):
return node.getAttribute(attrname).encode('utf-8','ignore')
def get_node_value(node, index = 0):
return node.childNodes[index].nodeValue.encode('utf-8','ignore')
def get_xml_node(node, name):
return node.getElementsByTagName(name)
class BaseObject( object ):
def __init__( self ):
pass
def set_member( self, mname, value ):
self.__dict__[mname] = value
def get_member( self, mname ):
return self.__dict__[mname]
def exist( self, member ):
return member in self.__dict__
def exist_member( self, mname ):
return mname in self.__dict__
def copy_object( self, obj ):
for mname in self.__dict__.keys():
value = self.__dict__[mname]
obj.set_member( mname, value )
def __str__( self ):
return str( self.__dict__ ) + '\t' + str( type(self) )