Skip to content

Commit 731f33e

Browse files
committed
Support date range for commits (lnishan#19)
1 parent 184d90e commit 731f33e

File tree

1 file changed

+45
-5
lines changed

1 file changed

+45
-5
lines changed

components/table_fetcher.py

+45-5
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,44 @@ def _GetVals(self, cls):
8888
return [self.__ConvertVal(getattr(cls, key)) for key in self._rel_keys]
8989
else:
9090
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)
91129

92130
def Fetch(self, label):
93131
ret = tb.SgTable()
@@ -113,7 +151,7 @@ def Fetch(self, label):
113151
state = info
114152
repos = org.get_repos()
115153
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)
117155
for issue in issues:
118156
if not ret.GetFields():
119157
ret.SetFields(self._GetKeys(issue))
@@ -132,14 +170,16 @@ def Fetch(self, label):
132170
ret.SetFields(self._GetKeys(pull))
133171
ret.Append(self._GetVals(pull))
134172
elif sub_name == u"commits":
135-
days = None
173+
days_start, days_end = None, None
136174
if add_info:
137175
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)
140178
repos = org.get_repos()
141179
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()
143183
for commit in commits:
144184
git_commit = commit.commit
145185
try:

0 commit comments

Comments
 (0)