def _send_messages(self, changelog_metadata: list): self.changelog_metadata_messages_to_send.update(changelog_metadata) while self.changelog_metadata_messages_to_send: meta = self.changelog_metadata_messages_to_send.pop() events = extract_events_from_changelog_metadata(meta) for event in events: self._send_resource_event(meta.resource, event)
def _send_messages(self, changelog_metadata: list): self.changelog_metadata_messages_to_send.update(changelog_metadata) while self.changelog_metadata_messages_to_send: meta = self.changelog_metadata_messages_to_send.pop() events = extract_events_from_changelog_metadata(meta) for event in events: self._send_resource_event(meta.resource, event)
def _build_updated_resources_dict(registry: Registry) -> dict: result = defaultdict(list) for meta in registry.changelog.values(): events = extract_events_from_changelog_metadata(meta) for event in events: result[event].append(meta.resource) return result
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
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
def _build_updated_resources_dict(self) -> dict: """Utility method used by several subclasses.""" result = defaultdict(list) changelog_meta = self.request.registry.changelog.values() for meta in changelog_meta: events = extract_events_from_changelog_metadata(meta) for event in events: result[event].append(meta.resource) return result
def _build_updated_resources_dict(self) -> dict: """Utility method used by several subclasses.""" result = defaultdict(list) changelog_meta = self.request.registry.changelog.values() for meta in changelog_meta: events = extract_events_from_changelog_metadata(meta) for event in events: result[event].append(meta.resource) return result
def _send_messages(self, changelog_metadata: list): metadata = [x._replace(modified_appstructs=None) # remove non hashable for x in changelog_metadata] self.changelog_metadata_messages_to_send.update(metadata) while self.changelog_metadata_messages_to_send: meta = self.changelog_metadata_messages_to_send.pop() events = extract_events_from_changelog_metadata(meta) for event in events: self._send_resource_event(meta.resource, event)
def _send_messages(self, changelog_metadata: list): metadata = [ x._replace(modified_appstructs=None) # remove non hashable for x in changelog_metadata ] self.changelog_metadata_messages_to_send.update(metadata) while self.changelog_metadata_messages_to_send: meta = self.changelog_metadata_messages_to_send.pop() events = extract_events_from_changelog_metadata(meta) for event in events: self._send_resource_event(meta.resource, event)