Source code for django_test_tools.generators.serializer_gen

import logging

logger = logging.getLogger(__name__)
PRINT_IMPORTS = ['from rest_framework import serializers', ]
PRINT_SERIALIZER_CLASS = """
class {0}Serializer(serializers.{1}):
    \"\"\"
    Standard Serializer for {0} model.
    \"\"\"

    class Meta:
        model = {0}
        fields = ({2})
"""


[docs]class SerializerGenerator(object): def __init__(self, model, serializer_class='ModelSerializer'): self.model = model self.serializer_class = serializer_class def _generate(self): model_test_case_content = list() field_names = list() # noinspection PyProtectedMember for field in self.model._meta.fields: field_names.append('\'{}\''.format(field.name)) model_test_case_content.append({'print': PRINT_SERIALIZER_CLASS, 'args': [self.model.__name__, self.serializer_class, ', '.join(field_names)]}) return model_test_case_content def __str__(self): printable = list() for print_data in self._generate(): try: if print_data['args'] is not None: printable.append(print_data['print'].format(*print_data['args'])) else: printable.append(print_data['print']) except IndexError as e: print('-' * 74) print('{print} {args}'.format(**print_data)) raise e return '\n'.join(printable)
[docs]class AppSerializerGenerator(object): def __init__(self, app, serializer_class='ModelSerializer'): self.app = app self.serializer_class = serializer_class def _generate(self): app_content = list() for model in self.app.get_models(): PRINT_IMPORTS.append('from {} import {}'.format(model.__module__, model.__name__)) logger.debug('IMPORTS: {}'.format(PRINT_IMPORTS)) model_test_case = SerializerGenerator(model, self.serializer_class) app_content.append(model_test_case) return app_content def _get_imports(self): logger.debug('IMPORTS: {}'.format(PRINT_IMPORTS)) imports_to_print = list(set(PRINT_IMPORTS)) imports_to_print.sort(reverse=True) return '\n'.join(imports_to_print) def __str__(self): printable = list() serializers_codes = self._generate() printable.append(self._get_imports()) for serializers_code in serializers_codes: printable.append(str(serializers_code)) return '\n'.join(printable)