From 4735982686fc5c351ba13578551bbef3d96ee87b Mon Sep 17 00:00:00 2001 From: "S. Andrew Sheppard" Date: Tue, 3 Jan 2017 14:52:47 -0600 Subject: [PATCH] more specific field types - text --- patterns/base/serializers.py | 6 +++--- rest/serializers.py | 24 +++++++++++++++++------- tests/test_annotate.py | 2 +- tests/test_mark.py | 2 +- tests/test_naturalkey.py | 2 +- tests/test_rest.py | 16 ++++++++++++---- 6 files changed, 35 insertions(+), 17 deletions(-) diff --git a/patterns/base/serializers.py b/patterns/base/serializers.py index 7afed263..67ccae3a 100644 --- a/patterns/base/serializers.py +++ b/patterns/base/serializers.py @@ -165,10 +165,10 @@ def get_fields(self): fields.update(self.build_natural_key_fields()) return fields - def get_wq_field_info(self, name, field): + def get_wq_field_info(self, name, field, model=None): if isinstance(field, NaturalKeySerializer): children = [ - self.get_wq_field_info(n, f) + self.get_wq_field_info(n, f, model=field.Meta.model) for n, f in field.get_fields().items() ] if len(children) == 1: @@ -189,7 +189,7 @@ def get_wq_field_info(self, name, field): return info else: return super(NaturalKeyModelSerializer, self).get_wq_field_info( - name, field + name, field, model ) diff --git a/rest/serializers.py b/rest/serializers.py index 6c14ab8f..5b6a8028 100644 --- a/rest/serializers.py +++ b/rest/serializers.py @@ -117,7 +117,7 @@ def get_wq_config(self): config['label_template'] = label_template return config - def get_wq_field_info(self, name, field): + def get_wq_field_info(self, name, field, model=None): info = { 'name': name, 'label': field.label or name.replace('_', ' ').title(), @@ -158,17 +158,27 @@ def get_wq_field_info(self, name, field): if 'type' not in info: info['type'] = 'string' + for field_type, xlsform_type in self.xlsform_types.items(): if isinstance(field, field_type): info['type'] = xlsform_type break + if info['type'] == 'geoshape': - source = self.Meta.model._meta.get_field(name) - geom_type = getattr(source, 'geom_type', None) - if geom_type == 'POINT': - info['type'] = 'geopoint' - elif geom_type == 'LINESTRING': - info['type'] = 'geotrace' + model = model or self.Meta.model + source = model._meta.get_field(name) + if info['type'] == 'geoshape': + geom_type = getattr(source, 'geom_type', None) + if geom_type == 'POINT': + info['type'] = 'geopoint' + elif geom_type == 'LINESTRING': + info['type'] = 'geotrace' + + if info['type'] == 'string': + model = model or self.Meta.model + source = model._meta.get_field(name) + if source.get_internal_type() == "TextField": + info['type'] = "text" return info diff --git a/tests/test_annotate.py b/tests/test_annotate.py index 0e5f2d21..660d3ac1 100644 --- a/tests/test_annotate.py +++ b/tests/test_annotate.py @@ -75,7 +75,7 @@ def test_annotate_config(self): }, { 'name': 'value', 'label': 'Value', - 'type': 'string', + 'type': 'text', }], 'initial': { 'type_field': 'type', diff --git a/tests/test_mark.py b/tests/test_mark.py index 54f60794..c6976906 100644 --- a/tests/test_mark.py +++ b/tests/test_mark.py @@ -53,7 +53,7 @@ def test_mark_config(self): }, { 'name': 'markdown', 'label': 'Markdown', - 'type': 'string', + 'type': 'text', }], 'initial': {'type_field': 'type', 'filter': {}}, } diff --git a/tests/test_naturalkey.py b/tests/test_naturalkey.py index f3bd1fc2..a25e4194 100644 --- a/tests/test_naturalkey.py +++ b/tests/test_naturalkey.py @@ -16,7 +16,7 @@ def test_naturalkey_config(self): { 'name': 'note', 'label': 'Note', - 'type': 'string', + 'type': 'text', 'bind': {'required': True}, }, { diff --git a/tests/test_rest.py b/tests/test_rest.py index 588b3752..e91eb8ec 100644 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -173,19 +173,27 @@ def test_rest_config_json_label(self): def test_rest_config_subtype(self): conf = self.get_config('geometrymodel') field = self.get_field(conf, 'geometry') - self.assertEqual(field['type'], 'geoshape') + self.assertEqual('geoshape', field['type']) conf = self.get_config('pointmodel') field = self.get_field(conf, 'geometry') - self.assertEqual(field['type'], 'geopoint') + self.assertEqual('geopoint', field['type']) conf = self.get_config('filemodel') field = self.get_field(conf, 'file') - self.assertEqual(field['type'], 'binary') + self.assertEqual('binary', field['type']) conf = self.get_config('imagemodel') field = self.get_field(conf, 'image') - self.assertEqual(field['type'], 'image') + self.assertEqual('image', field['type']) + + conf = self.get_config('item') + field = self.get_field(conf, 'name') + self.assertEqual('string', field['type']) + + conf = self.get_config('rootmodel') + field = self.get_field(conf, 'description') + self.assertEqual('text', field['type']) def test_rest_config_field_order(self): conf = self.get_config('slugrefparent')