def delete(key): """ Delete a service configuration from the database. """ service = Service.by_key(key) if service is None: raise ValueError("Service doesn't exist: %s" % key) db.session.delete(service) db.session.commit()
def index(service_key): service = obj_or_404(Service.by_key(service_key)) require.service.view(service) q = Event.all().filter_by(service=service) result = {'count': q.count()} q = q.limit(get_limit()) q = q.offset(get_offset()) result['results'] = q return jsonify(result, refs=True)
def submit(service_key, event_key): if request.json is None: raise BadRequest('Data must be submitted as JSON.') service = obj_or_404(Service.by_key(service_key)) require.service.publish(service) data = { 'body': request.json, 'headers': dict(request.headers.items()) } if arg_bool('sync'): urn = generate_frame(service_key, event_key, data) return jsonify({'status': 'ok', 'urn': urn}) else: routing_key = 'inbound.%s.%s' % (service_key, event_key) publish(inbound_queue, routing_key, data) return jsonify({'status': 'queued'})
def generate_frame(service_key, event_key, data): service = Service.by_key(service_key) if service is None: raise NotFound('No such service: %s' % service_key) event = Event.by_key(service, event_key) if event is None: raise NotFound('No such event: %s' % event_key) frame = { 'service': service_key, 'event': event_key, 'data': data.get('body') } headers = data.get('headers') frame.update({ 'source_url': parse_url(headers.get('X-Source-Location')), 'details_url': parse_url(headers.get('X-Details-Location')), 'hash': data_hash(frame), 'action_at': parse_datetime(headers.get('X-Action-Time')), 'submitted_at': datetime.utcnow() }) if not frame['action_at']: frame['action_at'] = frame['submitted_at'] else: frame['action_at'] = min(frame['action_at'], frame['submitted_at']) frame['urn'] = Frame.to_urn(frame) if Frame.by_hash(frame['hash']) is not None: raise BadRequest('Duplicate content, hash: %(hash)s' % frame) Frame.create(service, event, frame) store_frame(frame) db.session.commit() log.info("created: %(urn)s (%(hash)s)", frame) routing_key = 'matching.%s.%s' % (service_key, event_key) publish(matching_queue, routing_key, frame) routing_key = 'indexing.%s.%s' % (service_key, event_key) publish(indexing_queue, routing_key, frame) return frame['urn']
def install(filename): """ Load or update a service configuration form a JSON configuration. """ with open(filename, 'rb') as fh: data = json.load(fh) service = Service.by_key(data.get('key')) if service is None: service = Service.create(data) else: service.update(data) events = [] for event_data in data.get('events', []): event_data['service'] = service event = Event.by_key(service, event_data['key']) if event is None: event = Event.create(event_data) else: event.update(event_data) events.append(event) service.events = events service.editors = [] for editor_id in data.get('editors', [1]): user = User.by_id(editor_id) service.editors.append(user) db.session.commit()
def get(service_key, event_key): service = obj_or_404(Service.by_key(service_key)) require.service.view(service) event = obj_or_404(service.events.filter_by(key=event_key).first()) return jsonify(event)
def get(key): service = obj_or_404(Service.by_key(key)) require.service.view(service) return jsonify(service)