|
21 | 21 | ".so", |
22 | 22 | } |
23 | 23 | _RATE_COUNT = r"\d[\d,]*" |
24 | | -_RATE_ACTION = r"(?:(?:api[- ]+)?(?:requests?|calls?)|reqs?\.?)" |
25 | | -_RATE_PERIOD = r"(?:minutes?|mins?\.?|hours?|hrs?\.?|days?)" |
26 | | -_RATE_FREQUENCY = r"(?:minutely|hourly|daily|per[- ]+(?:minute|hour|day))" |
| 24 | +_RATE_ACTION = r"(?:(?:api[- ]+)?(?:requests?|calls?|queries?|hits?|credits?)|reqs?\.?)" |
| 25 | +_RATE_UNIT_SINGULAR = r"(?:second|sec|minute|min|hour|hr|day|week|month|year)" |
| 26 | +_RATE_UNIT = rf"{_RATE_UNIT_SINGULAR}s?\.?" |
| 27 | +_RATE_ADVERB = r"(?:secondly|minutely|hourly|daily|weekly|monthly|yearly)" |
| 28 | +_RATE_DURATION = rf"(?:(?:a|an|one|any|rolling|{_RATE_COUNT})[- ]+){{0,3}}{_RATE_UNIT}" |
| 29 | +_RATE_WINDOW = ( |
| 30 | + rf"(?:(?:/[- ]*|(?:per|each|every|in|within|over|during|for)[- ]+)" |
| 31 | + rf"{_RATE_DURATION}|" |
| 32 | + rf"(?:a|an)[- ]+{_RATE_UNIT})" |
| 33 | +) |
| 34 | +_RATE_FREQUENCY = ( |
| 35 | + rf"(?:{_RATE_ADVERB}|per[- ]+{_RATE_UNIT_SINGULAR}|" |
| 36 | + rf"(?:one|{_RATE_COUNT})[- ]+{_RATE_UNIT_SINGULAR})" |
| 37 | +) |
| 38 | +_RATE_SCOPE = r"(?:(?:api[- ]+)?(?:requests?|calls?|queries?|hits?|credits?)[- ]+|api[- ]+)?" |
| 39 | +_RATE_LIMIT = r"(?:rate[- ]+limit|limit|allowance|quota|cap)" |
| 40 | +_RATE_ASSIGNMENT = r"(?:of|is|at|to|:|=)?" |
27 | 41 | FIXED_RATE = re.compile( |
28 | 42 | rf"\b{_RATE_COUNT}[- ]+{_RATE_ACTION}" |
29 | | - rf"(?:(?:[- ]*(?:per|an?|each|every)[- ]+|[- ]*/[- ]*){_RATE_PERIOD}\b|" |
30 | | - rf"[- ]+{_RATE_FREQUENCY}\b)|" |
31 | | - rf"\b{_RATE_FREQUENCY}[- ]+" |
32 | | - rf"(?:(?:api[- ]+)?(?:requests?|calls?)[- ]+)?" |
33 | | - rf"(?:limit|allowance|quota|cap)\s*(?:of|is|:|=)?\s*" |
34 | | - rf"{_RATE_COUNT}[- ]+{_RATE_ACTION}\b", |
| 43 | + rf"(?:[- ]*{_RATE_WINDOW}\b|[- ]+{_RATE_ADVERB}\b)|" |
| 44 | + rf"\b{_RATE_COUNT}[- ]*{_RATE_WINDOW}[- ]+{_RATE_ACTION}\b|" |
| 45 | + rf"\b{_RATE_COUNT}[- ]+{_RATE_ADVERB}[- ]+{_RATE_ACTION}\b|" |
| 46 | + rf"\b{_RATE_FREQUENCY}[- ]+{_RATE_COUNT}[- ]+{_RATE_ACTION}\b|" |
| 47 | + rf"\b{_RATE_ACTION}\s*(?::|=|is|of)?\s*{_RATE_COUNT}[- ]*" |
| 48 | + rf"{_RATE_WINDOW}\b|" |
| 49 | + rf"\b{_RATE_ACTION}[- ]+{_RATE_ADVERB}\s*(?::|=|is)?\s*" |
| 50 | + rf"{_RATE_COUNT}\b|" |
| 51 | + rf"\b{_RATE_FREQUENCY}[- ]+{_RATE_ACTION}\s*(?::|=|is)?\s*" |
| 52 | + rf"{_RATE_COUNT}\b|" |
| 53 | + rf"\b{_RATE_ACTION}[- ]*{_RATE_WINDOW}\s*(?::|=|is)?\s*" |
| 54 | + rf"{_RATE_COUNT}\b|" |
| 55 | + rf"\b{_RATE_FREQUENCY}[- ]+{_RATE_SCOPE}{_RATE_LIMIT}\s*" |
| 56 | + rf"{_RATE_ASSIGNMENT}\s*{_RATE_COUNT}(?:[- ]+{_RATE_ACTION})?\b|" |
| 57 | + rf"\b{_RATE_SCOPE}{_RATE_LIMIT}\s*{_RATE_ASSIGNMENT}\s*{_RATE_COUNT}" |
| 58 | + rf"(?:[- ]+{_RATE_ACTION})?(?:[- ]*{_RATE_WINDOW}\b|[- ]+{_RATE_ADVERB}\b)", |
35 | 59 | re.IGNORECASE, |
36 | 60 | ) |
37 | 61 | BLOCKED: Sequence[Tuple[str, Pattern[str]]] = ( |
@@ -151,8 +175,7 @@ def _claim_failures(root: Path, surfaces: Iterable[Path]) -> List[str]: |
151 | 175 | for path in surfaces: |
152 | 176 | text = path.read_text(encoding="utf-8") |
153 | 177 | for label, pattern in BLOCKED: |
154 | | - match = pattern.search(text) |
155 | | - if match: |
| 178 | + for match in pattern.finditer(text): |
156 | 179 | failures.append( |
157 | 180 | f"{path.relative_to(root)}: {label} matched {match.group(0)!r}" |
158 | 181 | ) |
|
0 commit comments