def get_path_parameters(self, path, view_cls): """Return a list of Parameter instances corresponding to any templated path variables. :param str path: templated request path :param type view_cls: the view class associated with the path :return: path parameters :rtype: list[openapi.Parameter] """ parameters = [] queryset = get_queryset_from_view(view_cls) for variable in sorted(uritemplate.variables(path)): model, model_field = get_queryset_field(queryset, variable) attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING} if getattr(view_cls, 'lookup_field', None) == variable and attrs['type'] == openapi.TYPE_STRING: attrs['pattern'] = getattr(view_cls, 'lookup_value_regex', attrs.get('pattern', None)) if model_field and getattr(model_field, 'help_text', False): description = model_field.help_text elif model_field and getattr(model_field, 'primary_key', False): description = get_pk_description(model, model_field) else: description = None field = openapi.Parameter( name=variable, description=force_real_str(description), required=True, in_=openapi.IN_PATH, **attrs ) parameters.append(field) return parameters
def get_path_parameters(self, path, view_cls): """Return a list of Parameter instances corresponding to any templated path variables. :param str path: templated request path :param type view_cls: the view class associated with the path :return: path parameters :rtype: list[openapi.Parameter] """ parameters = [] queryset = getattr(view_cls, 'queryset', None) model = getattr(getattr(view_cls, 'queryset', None), 'model', None) for variable in uritemplate.variables(path): model, model_field = get_queryset_field(queryset, variable) attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING} if hasattr(view_cls, 'lookup_value_regex') and getattr(view_cls, 'lookup_field', None) == variable: attrs['pattern'] = view_cls.lookup_value_regex if model_field and model_field.help_text: description = force_text(model_field.help_text) elif model_field and model_field.primary_key: description = get_pk_description(model, model_field) else: description = None field = openapi.Parameter( name=variable, description=description, required=True, in_=openapi.IN_PATH, **attrs ) parameters.append(field) return parameters
def get_path_fields(self, path, method, view): """ Return a list of `coreapi.Field` instances corresponding to any templated path variables. """ model = getattr(getattr(view, 'queryset', None), 'model', None) fields = [] for variable in uritemplate.variables(path): if variable == 'version': continue title = '' description = '' schema_cls = coreschema.String kwargs = {} if model is not None: # Attempt to infer a field description if possible. try: model_field = model._meta.get_field(variable) except: model_field = None if model_field is not None and hasattr(model_field, 'verbose_name'): title = force_text(model_field.verbose_name) if model_field is not None and hasattr(model_field, 'help_text'): description = force_text(model_field.help_text) elif model_field is not None and hasattr( model_field, 'primary_key'): description = get_pk_description(model, model_field) if hasattr(view, 'lookup_value_regex' ) and view.lookup_field == variable: kwargs['pattern'] = view.lookup_value_regex elif isinstance(model_field, models.AutoField): schema_cls = coreschema.Integer field = Field(name=variable, location='path', required=True, schema=schema_cls(title=title, description=description, **kwargs)) fields.append(field) return fields
def get_path_parameters(self, path, view_cls): """Return a list of Parameter instances corresponding to any templated path variables. :param str path: templated request path :param type view_cls: the view class associated with the path :return: path parameters :rtype: list[openapi.Parameter] """ parameters = [] model = getattr(getattr(view_cls, 'queryset', None), 'model', None) for variable in uritemplate.variables(path): pattern = None type = openapi.TYPE_STRING description = None if model is not None: # Attempt to infer a field description if possible. try: model_field = model._meta.get_field(variable) except Exception: # pragma: no cover model_field = None if model_field is not None and model_field.help_text: description = force_text(model_field.help_text) elif model_field is not None and model_field.primary_key: description = get_pk_description(model, model_field) if hasattr(view_cls, 'lookup_value_regex') and getattr( view_cls, 'lookup_field', None) == variable: pattern = view_cls.lookup_value_regex elif isinstance(model_field, django.db.models.AutoField): type = openapi.TYPE_INTEGER field = openapi.Parameter( name=variable, required=True, in_=openapi.IN_PATH, type=type, pattern=pattern, description=description, ) parameters.append(field) return parameters