예제 #1
0
def purge_varnish_after_commit_hook(success: bool, registry: Registry,
                                    request: IRequest):
    """Send PURGE requests for all changed resources to Varnish."""
    varnish_url = registry.settings.get('adhocracy.varnish_url')
    if not (success and varnish_url):
        return
    changelog_metadata = registry.changelog.values()
    errcount = 0
    for meta in changelog_metadata:
        events = extract_events_from_changelog_metadata(meta)
        if events == []:
            continue
        path = resource_path(meta.resource)
        url = varnish_url + request.script_name + path
        for event in events:
            headers = {'X-Purge-Host': request.host}
            headers['X-Purge-Regex'] = '/?\??[^/]*'
            try:
                resp = requests.request('PURGE', url, headers=headers)
                if resp.status_code != 200:
                    logger.warning(
                        'Varnish responded %s to purge request for %s',
                        resp.status_code, path)
            except RequestException as err:
                logger.error(
                    'Couldn\'t send purge request for %s to Varnish: %s',
                    path, exception_to_str(err))
                errcount += 1
                if errcount >= 3:  # pragma: no cover
                    logger.error('Giving up on purge requests')
                    return
예제 #2
0
def purge_varnish_after_commit_hook(success: bool, registry: Registry,
                                    request: IRequest):
    """Send PURGE requests for all changed resources to Varnish."""
    varnish_url = registry.settings.get('adhocracy.varnish_url')
    if not (success and varnish_url):
        return
    changelog_metadata = registry.changelog.values()
    errcount = 0
    for meta in changelog_metadata:
        events = extract_events_from_changelog_metadata(meta)
        if events == []:
            continue
        path = resource_path(meta.resource)
        url = varnish_url + request.script_name + path
        for event in events:
            headers = {'X-Purge-Host': request.host}
            headers['X-Purge-Regex'] = '/?\??.*$'
            try:
                resp = requests.request('PURGE', url, headers=headers)
                if resp.status_code != 200:
                    logger.warning(
                        'Varnish responded %s to purge request for %s',
                        resp.status_code, path)
            except RequestException as err:
                logger.error(
                    'Couldn\'t send purge request for %s to Varnish: %s', path,
                    exception_to_str(err))
                errcount += 1
                if errcount >= 3:  # pragma: no cover
                    logger.error('Giving up on purge requests')
                    return
예제 #3
0
파일: client.py 프로젝트: Janaba/adhocracy3
 def _run(self):  # pragma: no cover
     """Start and keep alive connection to the websocket server."""
     assert self._ws_url
     while not self._is_stopped:
         try:
             self._connect_and_receive_and_log_messages()
         except (WebSocketConnectionClosedException, ConnectionError,
                 OSError) as err:
             logger.info('Problem connecting to Websocket server: %s',
                         exception_to_str(err))
             self._is_running = False
             time.sleep(1)
         except WebSocketException as err:  # pragma: no cover
             logger.warning(
                 'Problem communicating with Websocket server: %s',
                 exception_to_str(err))
             time.sleep(1)
예제 #4
0
 def _run(self):
     """Start and keep alive connection to the websocket server."""
     assert self._ws_url
     while not self._is_stopped:
         try:
             self._connect_and_receive_and_log_messages()
         except (WebSocketConnectionClosedException, ConnectionError,
                 OSError) as err:
             logger.info('Problem connecting to Websocket server: %s',
                         exception_to_str(err))
             self._is_running = False
             time.sleep(1)
         except WebSocketException as err:  # pragma: no cover
             logger.warning(
                 'Problem communicating with Websocket server: %s',
                 exception_to_str(err))
             time.sleep(1)
예제 #5
0
def test_exception_to_str_index_error():
    from adhocracy_core.utils import exception_to_str
    try:
        l = []
        l[1]
        assert False
    except IndexError as err:
        err_string = exception_to_str(err)
        assert err_string == 'IndexError: list index out of range'
예제 #6
0
def test_exception_to_str_key_error():
    from adhocracy_core.utils import exception_to_str
    try:
        d = {}
        d['key']
        assert False
    except KeyError as err:
        err_string = exception_to_str(err)
        assert err_string == "KeyError: 'key'"
예제 #7
0
def test_exception_to_str_key_error():
    from adhocracy_core.utils import exception_to_str
    try:
        d = {}
        d['key']
        assert False
    except KeyError as err:
        err_string = exception_to_str(err)
        assert err_string == "KeyError: 'key'"
예제 #8
0
def test_exception_to_str_index_error():
    from adhocracy_core.utils import exception_to_str
    try:
        l = []
        l[1]
        assert False
    except IndexError as err:
        err_string = exception_to_str(err)
        assert err_string == 'IndexError: list index out of range'
예제 #9
0
파일: client.py 프로젝트: Janaba/adhocracy3
 def stop(self):  # pragma: no cover
     """Stop the client."""
     self._is_stopped = True
     try:
         if self._is_connected():
             self._close_connection(b'done')
             logger.debug('Websocket client closed')
     except WebSocketException as err:  # pragma: no cover
         logger.warning('Error closing connection to Websocket server: %s',
                        exception_to_str(err))
예제 #10
0
 def stop(self):
     """Stop the client."""
     self._is_stopped = True
     try:
         if self._is_connected():
             self._close_connection(b'done')
             logger.debug('Websocket client closed')
     except WebSocketException as err:  # pragma: no cover
         logger.warning('Error closing connection to Websocket server: %s',
                        exception_to_str(err))
예제 #11
0
def handle_error_500_exception(error, request):
    """Return 500 JSON error."""
    logger.exception('internal')
    description = '{}; time: {}'.format(exception_to_str(error),
                                        log_compatible_datetime())
    error_entries = [error_entry('internal', '', description)]
    return JSONHTTPClientError(error_entries,
                               request=request,
                               code=500,
                               title='Internal Server Error')
예제 #12
0
def handle_error_500_exception(error, request):
    """Return 500 JSON error."""
    logger.exception('internal')
    description = '{}; time: {}'.format(exception_to_str(error),
                                        log_compatible_datetime())
    error_entries = [error_entry('internal', '', description)]
    return JSONHTTPClientError(error_entries,
                               request=request,
                               code=500,
                               title='Internal Server Error')
예제 #13
0
def test_exception_to_str_runtime_error():
    from adhocracy_core.utils import exception_to_str
    err_string = exception_to_str(RuntimeError())
    assert err_string == 'RuntimeError'
예제 #14
0
def test_exception_to_str_runtime_error():
    from adhocracy_core.utils import exception_to_str
    err_string = exception_to_str(RuntimeError())
    assert err_string == 'RuntimeError'