Skip to content

Commit e51edba

Browse files
committed
option to hide serializer from list
1 parent 492994b commit e51edba

File tree

6 files changed

+50
-6
lines changed

6 files changed

+50
-6
lines changed

data_wizard/loaders.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ def content_object(self):
1818
return obj
1919

2020
def load_io_options(self):
21-
serializer = self.run.get_serializer()
22-
return getattr(serializer.Meta, 'data_wizard', {})
21+
return {
22+
key: val
23+
for key, val in self.run.get_serializer_options().items()
24+
if key in self.valid_options
25+
}
2326

2427

2528
class FileLoader(BaseLoader):
2629
file_attr = 'file'
30+
valid_options = {'header_row', 'start_row'}
2731

2832
@property
2933
def file(self):
@@ -37,6 +41,7 @@ def load_io(self):
3741

3842
class URLLoader(BaseLoader):
3943
url_attr = 'url'
44+
valid_options = {'header_row', 'start_row'}
4045

4146
@property
4247
def url(self):

data_wizard/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ def get_serializer(self):
7474
else:
7575
raise Exception("No serializer specified!")
7676

77+
def get_serializer_options(self):
78+
if self.serializer:
79+
return registry.get_serializer_options(self.serializer)
80+
else:
81+
raise Exception("No serializer specified!")
82+
7783
def already_parsed(self):
7884
return self.range_set.count()
7985

data_wizard/registry.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def get_serializers(self):
6262
'name': name,
6363
'serializer': serializer,
6464
'class_name': self.get_class_name(serializer),
65+
'options': self.get_serializer_options(name),
6566
})
6667
return serializers
6768

@@ -76,6 +77,14 @@ def get_serializer(self, name):
7677
)
7778
return self._serializers[name]
7879

80+
def get_serializer_options(self, name):
81+
serializer = self.get_serializer(name)
82+
meta = getattr(serializer, 'Meta', None)
83+
if not meta:
84+
return {}
85+
options = getattr(meta, 'data_wizard', {})
86+
return options
87+
7988
def get_choices(self):
8089
return [
8190
(s['class_name'], s['name'])

data_wizard/views.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,13 @@ def retrieve_and_run(self, task_name, use_async=False, post=None):
8484
@detail_route()
8585
def serializers(self, request, *args, **kwargs):
8686
response = self.retrieve(request, **self.kwargs)
87-
response.data['serializer_choices'] = [{
88-
'name': s['class_name'],
89-
'label': s['name'],
90-
} for s in registry.get_serializers()]
87+
response.data['serializer_choices'] = [
88+
{
89+
'name': s['class_name'],
90+
'label': s['name'],
91+
} for s in registry.get_serializers()
92+
if s['options'].get('show_in_list', True)
93+
]
9194
return response
9295

9396
@detail_route(methods=['post'])

tests/data_app/wizard.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ class IncompleteSerializer(serializers.ModelSerializer):
1212
class Meta:
1313
model = SimpleModel
1414
fields = "__all__"
15+
data_wizard = {
16+
'show_in_list': False,
17+
}
1518

1619

1720
class SlugSerializer(serializers.ModelSerializer):

tests/test_simple_import.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,21 @@ def check_data(self, run):
194194
" correct format (YYYY-MM-DD) but it is an invalid date.\"])"
195195
])
196196
self.assert_urls(run, 'simplemodels/%s')
197+
198+
199+
class SerializerTestCase(BaseImportTestCase):
200+
def test_serializer_list(self):
201+
run = self.upload_file('simplemodel.csv', skip_serializer=True)
202+
result = self.get_url(run, 'serializers')
203+
choices = {
204+
row['name']: row['label']
205+
for row in result.data['serializer_choices']
206+
}
207+
self.assertIn(
208+
'tests.data_app.wizard.SlugSerializer',
209+
choices,
210+
)
211+
self.assertNotIn(
212+
'tests.data_app.wizard.IncompleteSerializer',
213+
choices,
214+
)

0 commit comments

Comments
 (0)