class SearchInteractionQuerySerializer(EntitySearchQuerySerializer): """Serialiser used to validate interaction search POST bodies.""" kind = SingleOrListField(child=serializers.CharField(), required=False) company = SingleOrListField(child=StringUUIDField(), required=False) company_name = serializers.CharField(required=False) company_one_list_group_tier = SingleOrListField(child=StringUUIDField(), required=False) date_after = RelaxedDateTimeField(required=False) date_before = RelaxedDateTimeField(required=False) created_on_exists = serializers.BooleanField(required=False) dit_participants__adviser = SingleOrListField(child=StringUUIDField(), required=False) dit_participants__team = SingleOrListField(child=StringUUIDField(), required=False) communication_channel = SingleOrListField(child=StringUUIDField(), required=False) investment_project = SingleOrListField(child=StringUUIDField(), required=False) policy_areas = SingleOrListField(child=StringUUIDField(), required=False) policy_issue_types = SingleOrListField(child=StringUUIDField(), required=False) service = SingleOrListField(child=StringUUIDField(), required=False) sector_descends = SingleOrListField(child=StringUUIDField(), required=False) was_policy_feedback_provided = serializers.BooleanField(required=False) DEFAULT_ORDERING = SearchOrdering('date', SortDirection.desc) SORT_BY_FIELDS = ( 'company.name', 'date', 'subject', )
class SearchOrderQuerySerializer(EntitySearchQuerySerializer): """Serialiser used to validate OMIS search POST bodies.""" primary_market = SingleOrListField(child=StringUUIDField(), required=False) sector_descends = SingleOrListField(child=StringUUIDField(), required=False) uk_region = SingleOrListField(child=StringUUIDField(), required=False) # Note that completed_on is a DateTime field, but we only allow filtering using whole dates # for simplicity # OpenSearch sets the time component for completed_on_before to 23:59:59.999 automatically completed_on_before = RelaxedDateField(required=False) completed_on_after = RelaxedDateField(required=False) created_on_before = RelaxedDateTimeField(required=False) created_on_after = RelaxedDateTimeField(required=False) delivery_date_before = RelaxedDateField(required=False) delivery_date_after = RelaxedDateField(required=False) assigned_to_adviser = SingleOrListField(child=StringUUIDField(), required=False) assigned_to_team = SingleOrListField(child=StringUUIDField(), required=False) status = SingleOrListField(child=serializers.CharField(), required=False) reference = SingleOrListField(child=serializers.CharField(), required=False) total_cost = serializers.IntegerField(required=False) subtotal_cost = serializers.IntegerField(required=False) contact_name = serializers.CharField(required=False) company = SingleOrListField(child=StringUUIDField(), required=False) company_name = serializers.CharField(required=False) DEFAULT_ORDERING = SearchOrdering('created_on', SortDirection.desc) SORT_BY_FIELDS = ( 'created_on', 'modified_on', 'delivery_date', 'payment_due_date', )
class SearchExportCountryHistorySerializer(EntitySearchQuerySerializer): """Serializer used to validate ExportCountryHistory search POST bodies.""" default_error_messages = { 'no_empty_field': gettext_lazy( 'Request must include either country or company parameters', ), } DEFAULT_ORDERING = SearchOrdering('date', SortDirection.desc) SORT_BY_FIELDS = ( 'date', ) country = SingleOrListField(child=StringUUIDField(), required=False) company = SingleOrListField(child=StringUUIDField(), required=False) def validate(self, data): """Serializer should have at least one parameter""" if not data.keys() & {'company', 'country'}: raise serializers.ValidationError( self.error_messages['no_empty_field'], ) return data
def to_internal_value(self, data): """Converts an ordering string to an SearchOrdering.""" field, _, direction = data.partition(':') if field not in self.choices: self.fail('invalid_field', input=field) if direction: try: direction = SortDirection(direction) except ValueError: self.fail('invalid_direction', input=direction) else: direction = self.default_direction return SearchOrdering(field, direction)
def _map_es_ordering(ordering, mapping): if not ordering: return None remapped_field = mapping.get(ordering.field, ordering.field) return SearchOrdering(remapped_field, ordering.direction)
'search term', { 'name': ['test'], }, { 'name': [ 'name.trigram', ], }, [ ( 'created_by.dit_team.id', UUID('00000000-0000-0000-0000-000000000000'), ), ], SearchOrdering('id', SortDirection.desc), ['id'], ['name'], { 'query': { 'bool': { 'must': [ { 'bool': { 'should': [ { 'match': { 'name.keyword': { 'query': 'search term', 'boost': 2, },