def ui_url(resource, id=None, _relative=False, **query): """Make a UI link.""" if id is not None: resource = "%s/%s" % (resource, id) url = "/" if _relative else settings.APP_UI_URL url = url_join(url, resource) return url + query_string(list(query.items()))
def ui_url(resource, id=None, _relative=False, **query): """Make a UI link.""" if id is not None: resource = '%s/%s' % (resource, id) url = '/' if _relative else settings.APP_UI_URL url = urljoin(url, resource) return url + query_string(list(query.items()))
def page_url(self, page): if page < 1 or page > self.pages: return None offset = (page - 1) * self.parser.limit args = [('offset', six.text_type(offset))] args.extend(self.parser.items) return self.request.base_url + query_string(args)
def entity_tags(entity, authz): """Do a search on tags of an entity.""" # NOTE: This must also work for documents. FIELDS = [ 'names', 'emails', 'phones', 'addresses', 'identifiers' ] pivots = [] queries = [] # Go through all the tags which apply to this entity, and find how # often they've been mentioned in other entities. for field in FIELDS: for value in entity.get(field, []): if value is None: continue queries.append({}) queries.append({ 'size': 0, 'query': { 'bool': { 'filter': [ authz_query(authz), field_filter_query(field, value) ], 'must_not': [ {'ids': {'values': [entity.get('id')]}}, ] } } }) pivots.append((field, value)) if not len(queries): return [] res = es.msearch(index=entities_index(), body=queries) results = [] for (field, value), resp in zip(pivots, res.get('responses', [])): total = resp.get('hits', {}).get('total') if total > 0: qvalue = quote(value.encode('utf-8')) key = ('filter:%s' % field, qvalue) results.append({ 'id': query_string([key]), 'value': value, 'field': field, 'count': total }) results.sort(key=lambda p: p['count'], reverse=True) return results
def tags(entity_id): """ --- get: summary: Get entity tags description: >- Get tags for the entity with id `entity_id`. Tags include the query string to make a search by that particular tag. parameters: - in: path name: entity_id required: true schema: type: string responses: '200': description: OK content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/QueryResponse' properties: results: type: array items: $ref: '#/components/schemas/EntityTag' tags: - Entity """ enable_cache() entity = get_index_entity(entity_id, request.authz.READ) tag_request(collection_id=entity.get('collection_id')) results = [] for (field, value, total) in entity_tags(entity, request.authz): qvalue = quote(value.encode('utf-8')) key = ('filter:%s' % field, qvalue) results.append({ 'id': query_string([key]), 'value': value, 'field': field, 'count': total, }) results.sort(key=lambda p: p['count'], reverse=True) return jsonify({ 'status': 'ok', 'total': len(results), 'results': results })
def url_external(path, query): """Generate external URLs with HTTPS (if configured).""" try: api_url = request.url_root if settings.URL_SCHEME is not None: parsed = urlparse(api_url) parsed = parsed._replace(scheme=settings.URL_SCHEME) api_url = parsed.geturl() if query is not None: path = path + query_string(query) return urljoin(api_url, path) except RuntimeError: return None
def tags(entity_id): """ --- get: summary: Get entity tags description: >- Get tags for the entity with id `entity_id`. Tags include the query string to make a search by that particular tag. parameters: - in: path name: entity_id required: true schema: type: string responses: '200': description: OK content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/QueryResponse' properties: results: type: array items: $ref: '#/components/schemas/EntityTag' tags: - Entity """ enable_cache() entity = get_index_entity(entity_id, request.authz.READ) tag_request(collection_id=entity.get("collection_id")) results = [] for (field, value, total) in entity_tags(entity, request.authz): qvalue = quote(value.encode("utf-8")) key = ("filter:%s" % field, qvalue) qid = query_string([key]) results.append({ "id": qid, "value": value, "field": field, "count": total }) results.sort(key=lambda p: p["count"], reverse=True) return jsonify({"status": "ok", "total": len(results), "results": results})
def url_external(path, query, relative=False): """Generate external URLs with HTTPS (if configured).""" try: if query is not None: path = path + query_string(query) if relative: return path # api_url = request.url_root api_url = settings.APP_UI_URL if settings.FORCE_HTTPS: parsed = urlparse(api_url) parsed = parsed._replace(scheme='https') api_url = parsed.geturl() return urljoin(api_url, path) except RuntimeError: return None
def url_external(path, query, relative=False): """Generate external URLs with HTTPS (if configured).""" try: if query is not None: path = path + query_string(query) if relative: return path # api_url = request.url_root api_url = settings.APP_UI_URL if settings.URL_SCHEME is not None: parsed = urlparse(api_url) parsed = parsed._replace(scheme=settings.URL_SCHEME) api_url = parsed.geturl() return urljoin(api_url, path) except RuntimeError: return None
def tags(entity_id): enable_cache() entity = get_index_entity(entity_id, request.authz.READ) tag_request(collection_id=entity.get('collection_id')) results = [] for (field, value, total) in entity_tags(entity, request.authz): qvalue = quote(value.encode('utf-8')) key = ('filter:%s' % field, qvalue) results.append({ 'id': query_string([key]), 'value': value, 'field': field, 'count': total, }) results.sort(key=lambda p: p['count'], reverse=True) return jsonify({'status': 'ok', 'total': len(results), 'results': results})
def url_for(*a, **kw): """Generate external URLs with HTTPS (if configured).""" try: api_url = request.url_root if settings.URL_SCHEME is not None: parsed = urlparse(api_url) parsed = parsed._replace(scheme=settings.URL_SCHEME) api_url = parsed.geturl() kw['_external'] = False query = kw.pop('_query', None) path = flask_url_for(*a, **kw) if query is not None: path = path + query_string(query) return urljoin(api_url, path) except RuntimeError: return None
def tags(id): enable_cache() entity = get_index_entity(id, request.authz.READ) results = [] for (field, value, total) in entity_tags(entity, request.authz): qvalue = quote(value.encode('utf-8')) key = ('filter:%s' % field, qvalue) link = url_for('search_api.search', _query=(key, )) results.append({ 'id': query_string([key]), 'value': value, 'field': field, 'count': total, 'results': link }) results.sort(key=lambda p: p['count'], reverse=True) return jsonify({'status': 'ok', 'total': len(results), 'results': results})
def tags(entity_id): enable_cache() entity = get_index_entity(entity_id, request.authz.READ) tag_request(collection_id=entity.get('collection_id')) record_audit(Audit.ACT_ENTITY, id=entity_id) results = [] for (field, value, total) in entity_tags(entity, request.authz): qvalue = quote(value.encode('utf-8')) key = ('filter:%s' % field, qvalue) results.append({ 'id': query_string([key]), 'value': value, 'field': field, 'count': total, }) results.sort(key=lambda p: p['count'], reverse=True) return jsonify({ 'status': 'ok', 'total': len(results), 'results': results })
def ui_url(resource, id=None, **query): """Make a UI link.""" if id is not None: resource = '%s/%s' % (resource, id) url = urljoin(settings.APP_UI_URL, resource) return url + query_string(list(query.items()))
def test_query_string_empty(self): self.assertEqual(query_string((('foo', None), )), '')
def test_query_string_item(self): query = (('b', 5), ('a', '1')) self.assertEqual(query_string(query), '?a=1&b=5')
def ui_url(resource, id=None, **query): """Make a UI link.""" if id is not None: resource = '%s/%s' % (resource, id) url = urljoin(app_ui_url, resource) return url + query_string(query.items())