@@ -88,6 +88,44 @@ def _GetVals(self, cls):
88
88
return [self .__ConvertVal (getattr (cls , key )) for key in self ._rel_keys ]
89
89
else :
90
90
ret = [self .__ConvertVal (val ) for key , val in inspect .getmembers (cls , lambda m : not inspect .ismethod (m )) if not key .startswith ("_" )]
91
+
92
+ def _IsDateRange (self , info ):
93
+ if not info :
94
+ return False
95
+ for ch in info :
96
+ if not (util .IsNumeric (ch ) or ch == "-" ):
97
+ return False
98
+ return True
99
+
100
+ def _ParseDateRange (self , info ):
101
+ if "-" in info :
102
+ tmp = info .split ("-" )
103
+ days_start = int (tmp [0 ]) if tmp [0 ] else None
104
+ days_end = int (tmp [1 ]) if tmp [1 ] else None
105
+ if days_start and days_end and days_start < days_end :
106
+ days_start , days_end = days_end , days_start
107
+ return days_start , days_end
108
+ else :
109
+ return int (info ), None
110
+
111
+ def _GetDatetimeDaysBefore (self , days ):
112
+ return datetime .datetime .now () - datetime .timedelta (days = days )
113
+
114
+ def _ExecFuncByDateRange (self , func , days_start , days_end , ** kwargs ):
115
+ if days_start :
116
+ if days_end :
117
+ return func (since = self ._GetDatetimeDaysBefore (days_start ),
118
+ until = self ._GetDatetimeDaysBefore (days_end ),
119
+ ** kwargs )
120
+ else :
121
+ return func (since = self ._GetDatetimeDaysBefore (days_start ),
122
+ ** kwargs )
123
+ else :
124
+ if days_end :
125
+ return func (until = self ._GetDatetimeDaysBefore (days_end ),
126
+ ** kwargs )
127
+ else :
128
+ return func (** kwargs )
91
129
92
130
def Fetch (self , label ):
93
131
ret = tb .SgTable ()
@@ -113,7 +151,7 @@ def Fetch(self, label):
113
151
state = info
114
152
repos = org .get_repos ()
115
153
for repo in repos :
116
- issues = repo .get_issues (state = state , since = datetime . datetime . now () - datetime . timedelta ( days = days )) if days else repo .get_issues (state = state )
154
+ issues = repo .get_issues (state = state , since = self . _GetDatetimeDaysBefore ( days )) if days else repo .get_issues (state = state )
117
155
for issue in issues :
118
156
if not ret .GetFields ():
119
157
ret .SetFields (self ._GetKeys (issue ))
@@ -132,14 +170,16 @@ def Fetch(self, label):
132
170
ret .SetFields (self ._GetKeys (pull ))
133
171
ret .Append (self ._GetVals (pull ))
134
172
elif sub_name == u"commits" :
135
- days = None
173
+ days_start , days_end = None , None
136
174
if add_info :
137
175
for info in add_info :
138
- if util . IsNumeric (info ):
139
- days = int (info )
176
+ if self . _IsDateRange (info ):
177
+ days_start , days_end = self . _ParseDateRange (info )
140
178
repos = org .get_repos ()
141
179
for repo in repos :
142
- commits = repo .get_commits (since = datetime .datetime .now () - datetime .timedelta (days = days )) if days else repo .get_commits ()
180
+ commits = self ._ExecFuncByDateRange (repo .get_commits ,
181
+ days_start , days_end )
182
+ # commits = repo.get_commits(since=datetime.datetime.now() - datetime.timedelta(days=days)) if days else repo.get_commits()
143
183
for commit in commits :
144
184
git_commit = commit .commit
145
185
try :
0 commit comments