Пример #1
0
    def episodes_for_criteria(self, criteria):
        """
        Given one set of criteria, return episodes that match it.
        """
        query = criteria
        querytype = query['queryType']
        contains = '__iexact'
        if querytype == 'Contains':
            contains = '__icontains'

        column_name = query['column']

        search_rule = SearchRule.get(column_name)

        if search_rule:
            return search_rule().query(query)

        field = query['field'].replace(' ', '_').lower()
        Mod = get_model_from_api_name(column_name)

        named_fields = [f for f in Mod._meta.fields if f.name == field]

        if len(named_fields) == 1 and isinstance(named_fields[0],
                                                 djangomodels.BooleanField):
            eps = self._episodes_for_boolean_fields(query, field, contains)

        elif len(named_fields) == 1 and isinstance(named_fields[0],
                                                   djangomodels.DateField):
            eps = self._episodes_for_date_fields(query, field, contains)
        elif len(named_fields) == 1 and fields.is_numeric(named_fields[0]):
            eps = self._episodes_for_number_fields(query, field, contains)
        elif hasattr(Mod, field) and isinstance(getattr(Mod, field),
                                                fields.ForeignKeyOrFreeText):
            eps = self._episodes_for_fkorft_fields(query, field, contains, Mod)

        elif hasattr(Mod, field) and isinstance(Mod._meta.get_field(field),
                                                djangomodels.ManyToManyField):
            eps = self._episodes_for_fkft_many_to_many_fields(
                query, field, contains, Mod
            )
        else:
            model_name = get_model_name_from_column_name(query['column'])
            queryset_path = '{0}__{1}{2}'.format(model_name, field, contains)
            kw = {queryset_path: query['query']}

            if Mod == models.Tagging:
                tag_name = query['field'].replace(" ", "_").title()
                eps = models.Episode.objects.filter(
                    tagging__value__iexact=tag_name
                )

            elif issubclass(Mod, models.EpisodeSubrecord):
                eps = models.Episode.objects.filter(**kw)
            elif issubclass(Mod, models.PatientSubrecord):
                pats = models.Patient.objects.filter(**kw)
                eps = []
                for p in pats:
                    eps += list(p.episode_set.all())
        return eps
Пример #2
0
    def episodes_for_criteria(self, criteria):
        """
        Given one set of criteria, return episodes that match it.
        """
        query = criteria
        querytype = query['queryType']
        contains = '__iexact'
        if querytype == 'Contains':
            contains = '__icontains'

        column_name = query['column']

        search_rule = SearchRule.get(column_name)

        if search_rule:
            return search_rule().query(query)

        field = query['field'].replace(' ', '_').lower()
        Mod = get_model_from_api_name(column_name)

        named_fields = [f for f in Mod._meta.fields if f.name == field]

        if len(named_fields) == 1 and isinstance(named_fields[0],
                                                 djangomodels.BooleanField):
            eps = self._episodes_for_boolean_fields(query, field, contains)

        elif len(named_fields) == 1 and isinstance(named_fields[0],
                                                   djangomodels.DateField):
            eps = self._episodes_for_date_fields(query, field, contains)
        elif len(named_fields) == 1 and fields.is_numeric(named_fields[0]):
            eps = self._episodes_for_number_fields(query, field, contains)
        elif hasattr(Mod, field) and isinstance(getattr(Mod, field),
                                                fields.ForeignKeyOrFreeText):
            eps = self._episodes_for_fkorft_fields(query, field, contains, Mod)

        elif hasattr(Mod, field) and isinstance(Mod._meta.get_field(field),
                                                djangomodels.ManyToManyField):
            eps = self._episodes_for_fkft_many_to_many_fields(
                query, field, contains, Mod
            )
        else:
            model_name = get_model_name_from_column_name(query['column'])
            queryset_path = '{0}__{1}{2}'.format(model_name, field, contains)
            kw = {queryset_path: query['query']}

            if Mod == models.Tagging:
                tag_name = query['field'].replace(" ", "_").title()
                eps = models.Episode.objects.filter(
                    tagging__value__iexact=tag_name
                )

            elif issubclass(Mod, models.EpisodeSubrecord):
                eps = models.Episode.objects.filter(**kw)
            elif issubclass(Mod, models.PatientSubrecord):
                pats = models.Patient.objects.filter(**kw)
                eps = []
                for p in pats:
                    eps += list(p.episode_set.all())
        return eps
Пример #3
0
 def test_is_numeric_true(self):
     numeric_fields = (
         models.IntegerField,
         models.DecimalField,
         models.BigIntegerField,
         models.FloatField,
         models.PositiveIntegerField
     )
     for field in numeric_fields:
         self.assertTrue(is_numeric(field()))
Пример #4
0
 def test_is_numeric_true(self):
     numeric_fields = (
         models.IntegerField,
         models.DecimalField,
         models.BigIntegerField,
         models.FloatField,
         models.PositiveIntegerField
     )
     for field in numeric_fields:
         self.assertTrue(is_numeric(field()))
Пример #5
0
def infer_from_subrecord_field_path(subRecordFieldPath):
    _, field_name = subRecordFieldPath.split('.')
    model, field = _model_and_field_from_path(subRecordFieldPath)

    ctx = {}
    ctx["label"] = model._get_field_title(field_name)
    ctx["model"] = "editing.{0}.{1}".format(
        model.get_api_name(),
        field_name
    )
    ctx['element_name'] = "editing.{0}._client.id + '_{1}'".format(
        model.get_api_name(),
        field_name
    )

    if fields.is_numeric(field):
        ctx["element_type"] = "number"

    # for all django fields we'll get an empty list back
    # we default for free text or foreign keys
    enum = model.get_field_enum(field_name)

    if enum:
        ctx["lookuplist"] = json.dumps(enum, cls=OpalSerializer)
    else:
        lookuplist_api_name = model.get_lookup_list_api_name(field_name)
        if lookuplist_api_name:
            ctx["lookuplist"] = "{}_list".format(lookuplist_api_name)

    if hasattr(field, "formfield"):
        # TODO remove the blankable condition and make sure
        # all fields are null=False
        blankable = getattr(field, "blank", True)
        ctx["required"] = (not blankable) or field.formfield().required
    else:
        # ForeignKeyOrFreeText are never required at this time
        # so if we can't work out if its required, lets default
        # to false
        ctx["required"] = False

    if hasattr(field, "max_length"):
        ctx["maxlength"] = field.max_length
    return ctx
Пример #6
0
def infer_from_subrecord_field_path(subRecordFieldPath):
    _, field_name = subRecordFieldPath.split('.')
    model, field = _model_and_field_from_path(subRecordFieldPath)

    ctx = {}
    ctx["label"] = model._get_field_title(field_name)
    ctx["model"] = "editing.{0}.{1}".format(model.get_api_name(), field_name)
    ctx['element_name'] = "editing.{0}._client.id + '_{1}'".format(
        model.get_api_name(), field_name)

    if fields.is_numeric(field):
        ctx["element_type"] = "number"

    # for all django fields we'll get an empty list back
    # we default for free text or foreign keys
    enum = model.get_field_enum(field_name)

    if enum:
        ctx["lookuplist"] = json.dumps(enum)
    else:
        lookuplist_api_name = model.get_lookup_list_api_name(field_name)
        if lookuplist_api_name:
            ctx["lookuplist"] = "{}_list".format(lookuplist_api_name)

    if hasattr(field, "formfield"):
        # TODO remove the blankable condition and make sure
        # all fields are null=False
        blankable = getattr(field, "blank", True)
        ctx["required"] = (not blankable) or field.formfield().required
    else:
        # ForeignKeyOrFreeText are never required at this time
        # so if we can't work out if its required, lets default
        # to false
        ctx["required"] = False

    if hasattr(field, "max_length"):
        ctx["maxlength"] = field.max_length
    return ctx
Пример #7
0
 def test_is_numeric_false(self):
     self.assertFalse(is_numeric(models.CharField))
Пример #8
0
 def test_is_numeric_false(self):
     self.assertFalse(is_numeric(models.CharField))