[PATCH 01/13] xmlrpc: Factor out common code

Daniel Axtens dja at axtens.net
Tue Sep 20 14:27:38 AEST 2016


LGTM

Reviewed-by: Daniel Axtens <dja at axtens.net>

Regards,
Daniel

Stephen Finucane <stephenfinucane at hotmail.com> writes:

> Now that every endpoint accepts negative max_counts, the code that does
> this can be factored out.
>
> Signed-off-by: Stephen Finucane <stephenfinucane at hotmail.com>
> ---
>  patchwork/views/xmlrpc.py | 63 ++++++++++++++++++-----------------------------
>  1 file changed, 24 insertions(+), 39 deletions(-)
>
> diff --git a/patchwork/views/xmlrpc.py b/patchwork/views/xmlrpc.py
> index edb7555..342ceca 100644
> --- a/patchwork/views/xmlrpc.py
> +++ b/patchwork/views/xmlrpc.py
> @@ -32,14 +32,19 @@ import sys
>  
>  from django.core.urlresolvers import reverse
>  from django.contrib.auth import authenticate
> -from django.http import (
> -    HttpResponse, HttpResponseRedirect, HttpResponseServerError)
> +from django.http import HttpResponse
> +from django.http import HttpResponseRedirect
> +from django.http import HttpResponseServerError
>  from django.views.decorators.csrf import csrf_exempt
>  from django.utils import six
> -from django.utils.six.moves import map, xmlrpc_client
> +from django.utils.six.moves import xmlrpc_client
>  from django.utils.six.moves.xmlrpc_server import SimpleXMLRPCDispatcher
>  
> -from patchwork.models import Patch, Project, Person, State, Check
> +from patchwork.models import Check
> +from patchwork.models import Patch
> +from patchwork.models import Person
> +from patchwork.models import Project
> +from patchwork.models import State
>  from patchwork.views import patch_to_mbox
>  
>  
> @@ -364,6 +369,16 @@ def patch_check_to_dict(obj):
>  # Public XML-RPC methods
>  #######################################################################
>  
> +def _get_objects(self, serializer, objects, max_count):
> +    if max_count > 0:
> +        return [serializer(x) for x in objects[:max_count]]
> +    elif max_count < 0:
> +        min_count = objects.count() + max_count
> +        return [serializer(x) for x in objects[min_count:]]
> +    else:
> +        return [serializer(x) for x in objects]
> +
> +
>  @xmlrpc_method()
>  def pw_rpc_version():
>      """Return Patchwork XML-RPC interface version.
> @@ -402,13 +417,7 @@ def project_list(search_str=None, max_count=0):
>      else:
>          projects = Project.objects.all()
>  
> -    if max_count > 0:
> -        return list(map(project_to_dict, projects[:max_count]))
> -    elif max_count < 0:
> -        min_count = projects.count() + max_count
> -        return list(map(project_to_dict, projects[min_count:]))
> -    else:
> -        return list(map(project_to_dict, projects))
> +    return _get_objects(project_to_dict, projects, max_count)
>  
>  
>  @xmlrpc_method()
> @@ -454,13 +463,7 @@ def person_list(search_str=None, max_count=0):
>      else:
>          people = Person.objects.all()
>  
> -    if max_count > 0:
> -        return list(map(person_to_dict, people[:max_count]))
> -    elif max_count < 0:
> -        min_count = people.count() + max_count
> -        return list(map(person_to_dict, people[min_count:]))
> -    else:
> -        return list(map(person_to_dict, people))
> +    return _get_objects(person_to_dict, people, max_count)
>  
>  
>  @xmlrpc_method()
> @@ -601,13 +604,7 @@ def patch_list(filt=None):
>  
>      patches = Patch.objects.filter(**dfilter)
>  
> -    if max_count > 0:
> -        return list(map(patch_to_dict, patches[:max_count]))
> -    elif max_count < 0:
> -        min_count = patches.count() + max_count
> -        return list(map(patch_to_dict, patches[min_count:]))
> -    else:
> -        return list(map(patch_to_dict, patches))
> +    return _get_objects(patch_to_dict, patches, max_count)
>  
>  
>  @xmlrpc_method()
> @@ -790,13 +787,7 @@ def state_list(search_str=None, max_count=0):
>      else:
>          states = State.objects.all()
>  
> -    if max_count > 0:
> -        return list(map(state_to_dict, states[:max_count]))
> -    elif max_count < 0:
> -        min_count = states.count() + max_count
> -        return list(map(state_to_dict, states[min_count:]))
> -    else:
> -        return list(map(state_to_dict, states))
> +    return _get_objects(state_to_dict, states, max_count)
>  
>  
>  @xmlrpc_method()
> @@ -918,13 +909,7 @@ def check_list(filt=None):
>  
>      checks = Check.objects.filter(**dfilter)
>  
> -    if max_count > 0:
> -        return list(map(check_to_dict, checks[:max_count]))
> -    elif max_count < 0:
> -        min_count = checks.count() + max_count
> -        return list(map(check_to_dict, checks[min_count:]))
> -    else:
> -        return list(map(check_to_dict, checks))
> +    return _get_objects(check_to_dict, checks, max_count)
>  
>  
>  @xmlrpc_method()
> -- 
> 2.7.4
>
> _______________________________________________
> Patchwork mailing list
> Patchwork at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 859 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/patchwork/attachments/20160920/527998a5/attachment.sig>


More information about the Patchwork mailing list