##// END OF EJS Templates
helpers: pre-compiled issue tracker patterns early for speedup.
bart -
r4204:d368f200 stable
parent child Browse files
Show More
@@ -1543,11 +1543,14 b' def process_patterns(text_string, repo_n'
1543 log.debug('issue tracker entry: uid: `%s` PAT:%s URL:%s PREFIX:%s',
1543 log.debug('issue tracker entry: uid: `%s` PAT:%s URL:%s PREFIX:%s',
1544 uid, entry['pat'], entry['url'], entry['pref'])
1544 uid, entry['pat'], entry['url'], entry['pref'])
1545
1545
1546 try:
1546 if entry.get('pat_compiled'):
1547 pattern = re.compile(r'%s' % entry['pat'])
1547 pattern = entry['pat_compiled']
1548 except re.error:
1548 else:
1549 log.exception('issue tracker pattern: `%s` failed to compile', entry['pat'])
1549 try:
1550 continue
1550 pattern = re.compile(r'%s' % entry['pat'])
1551 except re.error:
1552 log.exception('issue tracker pattern: `%s` failed to compile', entry['pat'])
1553 continue
1551
1554
1552 data_func = partial(
1555 data_func = partial(
1553 _process_url_func, repo_name=repo_name, entry=entry, uid=uid,
1556 _process_url_func, repo_name=repo_name, entry=entry, uid=uid,
@@ -21,6 +21,7 b''
21 import os
21 import os
22 import hashlib
22 import hashlib
23 import logging
23 import logging
24 import re
24 from collections import namedtuple
25 from collections import namedtuple
25 from functools import wraps
26 from functools import wraps
26 import bleach
27 import bleach
@@ -372,9 +373,15 b' class IssueTrackerSettingsModel(object):'
372 for uid in issuetracker_entries:
373 for uid in issuetracker_entries:
373 url_data = qs.get(self._get_keyname('url', uid, 'rhodecode_'))
374 url_data = qs.get(self._get_keyname('url', uid, 'rhodecode_'))
374
375
376 pat = qs.get(self._get_keyname('pat', uid, 'rhodecode_'))
377 try:
378 pat_compiled = re.compile(r'%s' % pat)
379 except re.error:
380 pat_compiled = None
381
375 issuetracker_entries[uid] = AttributeDict({
382 issuetracker_entries[uid] = AttributeDict({
376 'pat': qs.get(
383 'pat': pat,
377 self._get_keyname('pat', uid, 'rhodecode_')),
384 'pat_compiled': pat_compiled,
378 'url': url_cleaner(
385 'url': url_cleaner(
379 qs.get(self._get_keyname('url', uid, 'rhodecode_')) or ''),
386 qs.get(self._get_keyname('url', uid, 'rhodecode_')) or ''),
380 'pref': bleach.clean(
387 'pref': bleach.clean(
@@ -43,6 +43,9 b' class TestIssueTrackerSettingsModel(obje'
43 settings_mock.return_value = input_settings
43 settings_mock.return_value = input_settings
44 result = model.get_global_settings(cache=True)
44 result = model.get_global_settings(cache=True)
45 get_settings.assert_called_once_with(cache=True)
45 get_settings.assert_called_once_with(cache=True)
46 for k, v in result.items():
47 v.pop('pat_compiled', None)
48
46 assert expected_result == result
49 assert expected_result == result
47
50
48 def test_get_repo_settings_raise_exception_when_repo_is_not_set(self):
51 def test_get_repo_settings_raise_exception_when_repo_is_not_set(self):
@@ -68,6 +71,8 b' class TestIssueTrackerSettingsModel(obje'
68 settings_mock.return_value = input_settings
71 settings_mock.return_value = input_settings
69 result = model.get_repo_settings(cache=True)
72 result = model.get_repo_settings(cache=True)
70 get_settings.assert_called_once_with(cache=True)
73 get_settings.assert_called_once_with(cache=True)
74 for k, v in result.items():
75 v.pop('pat_compiled', None)
71 assert expected_result == result
76 assert expected_result == result
72
77
73 @pytest.mark.parametrize("inherit_settings, method", [
78 @pytest.mark.parametrize("inherit_settings, method", [
General Comments 0
You need to be logged in to leave comments. Login now