def get_url(cls, job=None, action=None): if job is None: job = JobFactory() url = 'http://testserver' + reverse(get_detail_view_name(models.Job), kwargs={'uuid': job.uuid.hex}) return url if action is None else url + action + '/'
def get_url(cls, python_management=None, action=None): if python_management is None: python_management = PythonManagementFactory() url = 'http://testserver' + reverse( core_utils.get_detail_view_name(models.PythonManagement), kwargs={'uuid': python_management.uuid}) return url if action is None else url + action + '/'
def get_url(cls, playbook=None, action=None): if playbook is None: playbook = PlaybookFactory() url = 'http://testserver' + reverse(get_detail_view_name( models.Playbook), kwargs={'uuid': playbook.uuid.hex}) return url if action is None else url + action + '/'
def get_field_type(field): """ Returns field type/possible values. """ if isinstance(field, core_filters.MappedMultipleChoiceFilter): return ' | '.join(['"%s"' % f for f in sorted(field.mapped_to_model)]) if isinstance(field, OrderingFilter) or isinstance(field, ChoiceFilter): return ' | '.join(['"%s"' % f[0] for f in field.extra['choices']]) if isinstance(field, ChoiceField): return ' | '.join(['"%s"' % f for f in sorted(field.choices)]) if isinstance(field, HyperlinkedRelatedField): if field.view_name.endswith('detail'): return 'link to %s' % reverse( field.view_name, kwargs={ '%s' % field.lookup_field: "'%s'" % field.lookup_field }, ) return reverse(field.view_name) if isinstance(field, structure_filters.ServiceTypeFilter): return ' | '.join([ '"%s"' % f for f in SupportedServices.get_filter_mapping().keys() ]) if isinstance(field, ResourceTypeFilter): return ' | '.join([ '"%s"' % f for f in SupportedServices.get_resource_models().keys() ]) if isinstance(field, core_serializers.GenericRelatedField): links = [] for model in field.related_models: detail_view_name = core_utils.get_detail_view_name(model) for f in field.lookup_fields: try: link = reverse(detail_view_name, kwargs={'%s' % f: "'%s'" % f}) except NoReverseMatch: pass else: links.append(link) break path = ', '.join(links) if path: return 'link to any: %s' % path if isinstance(field, core_filters.ContentTypeFilter): return "string in form 'app_label'.'model_name'" if isinstance(field, ModelMultipleChoiceFilter): return get_field_type(field.field) if isinstance(field, ListSerializer): return 'list of [%s]' % get_field_type(field.child) if isinstance(field, ManyRelatedField): return 'list of [%s]' % get_field_type(field.child_relation) if isinstance(field, ModelField): return get_field_type(field.model_field) name = field.__class__.__name__ for w in ('Filter', 'Field', 'Serializer'): name = name.replace(w, '') return FIELDS.get(name, name)
def get_extra_kwargs(self): extra_kwargs = super(AugmentedSerializerMixin, self).get_extra_kwargs() if hasattr(self.Meta, 'view_name'): view_name = self.Meta.view_name else: view_name = core_utils.get_detail_view_name(self.Meta.model) if 'url' in extra_kwargs: extra_kwargs['url']['view_name'] = view_name else: extra_kwargs['url'] = {'view_name': view_name} return extra_kwargs
class JobEstimateSerializer(PermissionFieldFilteringMixin, serializers.HyperlinkedModelSerializer): ssh_public_key = serializers.HyperlinkedRelatedField( lookup_field='uuid', view_name='sshpublickey-detail', queryset=core_models.SshPublicKey.objects.all(), required=True, ) service_project_link = serializers.HyperlinkedRelatedField( lookup_field='pk', view_name='openstacktenant-spl-detail', queryset=openstack_models.OpenStackTenantServiceProjectLink.objects. all(), ) playbook = serializers.HyperlinkedRelatedField( lookup_field='uuid', view_name=core_utils.get_detail_view_name(models.Playbook), queryset=models.Playbook.objects.all(), ) arguments = serializers.JSONField(default=dict) class Meta(object): model = models.Job fields = ('ssh_public_key', 'service_project_link', 'playbook', 'arguments') def get_filtered_field_names(self): return 'service_project_link', def check_subnet(self, attrs): if not self.instance: settings = attrs['service_project_link'].service.settings if not openstack_models.SubNet.objects.filter( settings=settings).exists(): raise serializers.ValidationError( _('Selected OpenStack provider does not have any subnet yet.' )) else: attrs['subnet'] = openstack_models.SubNet.objects.filter( settings=settings).first() def validate(self, attrs): if not self.instance: attrs['user'] = self.context['request'].user self.check_subnet(attrs) return attrs
def get_url(cls, jupyter_hub_management=None, action=None): if jupyter_hub_management is None: jupyter_hub_management = JupyterHubManagementFactory() url = 'http://testserver' + reverse(core_utils.get_detail_view_name(models.JupyterHubManagement), kwargs={'uuid': jupyter_hub_management.uuid}) return url if action is None else url + action + '/'
class JobSerializer(common_serializers.BaseApplicationSerializer, structure_serializers.PermissionFieldFilteringMixin): service_project_link = serializers.HyperlinkedRelatedField( lookup_field='pk', view_name='openstacktenant-spl-detail', queryset=openstack_models.OpenStackTenantServiceProjectLink.objects. all(), ) service = serializers.HyperlinkedRelatedField( source='service_project_link.service', lookup_field='uuid', view_name='openstacktenant-detail', read_only=True, ) service_name = serializers.ReadOnlyField( source='service_project_link.service.settings.name') service_uuid = serializers.ReadOnlyField( source='service_project_link.service.uuid') ssh_public_key = serializers.HyperlinkedRelatedField( lookup_field='uuid', view_name='sshpublickey-detail', queryset=core_models.SshPublicKey.objects.all(), required=True, ) ssh_public_key_name = serializers.ReadOnlyField( source='ssh_public_key.name') ssh_public_key_uuid = serializers.ReadOnlyField( source='ssh_public_key.uuid') project = serializers.HyperlinkedRelatedField( source='service_project_link.project', lookup_field='uuid', view_name='project-detail', read_only=True, ) project_name = serializers.ReadOnlyField( source='service_project_link.project.name') project_uuid = serializers.ReadOnlyField( source='service_project_link.project.uuid') playbook = serializers.HyperlinkedRelatedField( lookup_field='uuid', view_name=core_utils.get_detail_view_name( playbook_jobs_models.Playbook), queryset=playbook_jobs_models.Playbook.objects.all(), ) playbook_name = serializers.ReadOnlyField(source='playbook.name') playbook_uuid = serializers.ReadOnlyField(source='playbook.uuid') playbook_image = serializers.FileField(source='playbook.image', read_only=True) playbook_description = serializers.ReadOnlyField( source='playbook.description') arguments = serializers.JSONField(default=dict) state = serializers.SerializerMethodField() tag = serializers.SerializerMethodField() type = serializers.SerializerMethodField() class Meta(object): model = playbook_jobs_models.Job fields = ('url', 'uuid', 'name', 'description', 'service_project_link', 'service', 'service_name', 'service_uuid', 'ssh_public_key', 'ssh_public_key_name', 'ssh_public_key_uuid', 'project', 'project_name', 'project_uuid', 'playbook', 'playbook_name', 'playbook_uuid', 'playbook_image', 'playbook_description', 'arguments', 'state', 'output', 'created', 'modified', 'tag', 'type') read_only_fields = ('output', 'created', 'modified', 'type') protected_fields = ('service_project_link', 'ssh_public_key', 'playbook', 'arguments') extra_kwargs = { 'url': { 'lookup_field': 'uuid' }, } def get_type(self, obj): return 'playbook_job' def get_filtered_field_names(self): return 'project', 'service_project_link', 'ssh_public_key' def get_state(self, obj): return obj.get_state_display() def get_tag(self, obj): return obj.get_tag() def check_project(self, attrs): if self.instance: project = self.instance.service_project_link.project else: project = attrs['service_project_link'].project if not structure._has_admin_access(self.context['request'].user, project): raise exceptions.PermissionDenied() def check_arguments(self, attrs): playbook = self.instance.playbook if self.instance else attrs[ 'playbook'] arguments = attrs['arguments'] parameter_names = playbook.parameters.all().values_list('name', flat=True) for argument in arguments.keys(): if argument not in parameter_names and argument != 'project_uuid': raise serializers.ValidationError( _('Argument %s is not listed in playbook parameters.' % argument)) if playbook.parameters.exclude(name__in=arguments.keys()).filter( required=True, default__exact='').exists(): raise serializers.ValidationError( _('Not all required playbook parameters were specified.')) unfilled_parameters = playbook.parameters.exclude( name__in=arguments.keys()) for parameter in unfilled_parameters: if parameter.default: arguments[parameter.name] = parameter.default def check_subnet(self, attrs): if not self.instance: settings = attrs['service_project_link'].service.settings if not openstack_models.SubNet.objects.filter( settings=settings).exists(): raise serializers.ValidationError( _('Selected OpenStack provider does not have any subnet yet.' )) else: attrs['subnet'] = openstack_models.SubNet.objects.filter( settings=settings).first() def validate(self, attrs): if not self.instance: attrs['user'] = self.context['request'].user self.check_project(attrs) self.check_arguments(attrs) self.check_subnet(attrs) return attrs