[Patchew-devel] [PATCH 7/9] rest: add support for PUT of result objects

Fam Zheng famz at redhat.com
Wed Aug 22 14:05:28 UTC 2018


On Wed, 08/22 11:38, Paolo Bonzini wrote:
> On 22/08/2018 10:52, Fam Zheng wrote:
> > On Wed, 08/22 10:35, Paolo Bonzini wrote:
> >> On 22/08/2018 08:14, Fam Zheng wrote:
> >>>> +    @property
> >>>> +    def result_renderer(self):
> >>>> +        try:
> >>>> +            found = re.match("^[^.]*", self.kwargs['name'])
> >>> Maybe create a Result.mod field so this magic is not necessary? Otherwise the
> >>> convention should be documented somewhere.
> >>>
> >>
> >> Do you mean something like Result.renderer_from_name (a staticmethod)?
> > 
> > I mean can we somehow match the self.kwargs['name'] string back to DB record(s),
> > where we can create a new field that "duplicates" the first part of the name
> > (the part before the first "." as matched in this line)?
> 
> I think you don't have the Result object yet, but we can do something 
> like this to avoid the code duplication:
> 
> diff --git a/api/models.py b/api/models.py
> index eea924f..32e8b41 100644
> --- a/api/models.py
> +++ b/api/models.py
> @@ -84,10 +84,14 @@ class Result(models.Model):
>          emit_event("ResultUpdate", obj=self.obj,
>                     old_status=old_status, result=self)
>  
> +    @staticmethod
> +    def renderer_from_name(name):
> +        found = re.match("^[^.]*", name)
> +        return mod.get_module(found.group(0)) if found else None
> +
>      @property
>      def renderer(self):
> -        found = re.match("^[^.]*", self.name)
> -        return mod.get_module(found.group(0)) if found else None
> +        return Result.renderer_from_name(self.name)
>  
>      @property
>      def obj(self):
> diff --git a/api/rest.py b/api/rest.py
> index 22d7c98..cc881af 100644
> --- a/api/rest.py
> +++ b/api/rest.py
> @@ -536,11 +536,9 @@ class ResultsViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,
>  
>      @property
>      def result_renderer(self):
> -        try:
> -            found = re.match("^[^.]*", self.kwargs['name'])
> -        except:
> -            return None
> -        return mod.get_module(found.group(0)) if found else None
> +        if 'name' in self.kwargs:
> +            return Result.renderer_from_name(self.kwargs['name'])
> +        return None
>  
>      def get_serializer_context(self):
>          context = super(ResultsViewSet, self).get_serializer_context()

Yes, that is fine then.

Fam




More information about the Patchew-devel mailing list