title: Dynamically created method and decorator, got error 'functools.partial' object has no attribute '__module__'
body: <p>I am currently using EndpointsModel to create a RESTful API for all my models on AppEngine. Since it is RESTful, these api have a lot of repeat code which I want to avoid.</p>
  
  <p>For example:</p>
  
  <pre><code>class Reducer(EndpointsModel):
      name = ndb.StringProperty(indexed=False)
  
  @endpoints.api(
      name="bigdata",
      version="v1",
      description="""The BigData API""",
      allowed_client_ids=ALLOWED_CLIENT_IDS,
  )
  class BigDataApi(remote.Service):
      @Reducer.method(
          path="reducer",
          http_method="POST",
          name="reducer.insert",
          user_required=True,
      )
      def ReducerInsert(self, obj):
          pass
  
      ## and GET, POST, PUT, DELETE
      ## REPEATED for each model
  </code></pre>
  
  <p>I want to make them become generic. So I try to dynamic add method to the class.
  What I have tried so far:</p>
  
  <pre><code>from functools import partial, wraps
  
  def GenericInsert(self, obj, cls):
      obj.owner = endpoints.get_current_user()
      obj.put()
      return obj
  
  # Ignore GenericDelete, GenericGet, GenericUpdate ...
  
  import types
  from functools import partial
  
  def register_rest_api(api_server, endpoint_cls):
      name = endpoint_cls.__name__
  
      # create list method 
      query_method = types.MethodType(
      endpoint_cls.query_method(
          query_fields=('limit', 'pageToken'),
          path="%ss" % name,
          http_method="GET",
          name="%s.list" % name,
          user_required=True
      )(partial(GenericList, cls=endpoint_cls)))
  
      setattr(api_server, "%sList", query_method)
  
      # create insert method
      # ...
  
  register_rest_api(BigDataApi, Reducer)
  </code></pre>
  
  <p>But I got <code>'functools.partial' object has no attribute '__module__' exception.</code> 
  I think it is because there are some conflicts between <code>endpoints.method</code>'s decorator and partial. But no idea how to avoid it.</p>
  
  <pre><code>Traceback (most recent call last):
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 239, in Handle
      handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 298, in _LoadHandler
      handler, path, err = LoadObject(self._handler)
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 84, in LoadObject
      obj = __import__(path[0])
    File "/Users/Sylvia/gcdc2013/apis.py", line 795, in &lt;module&gt;
      register_rest_api(BigDataApi, Reducer)
    File "/Users/Sylvia/gcdc2013/apis.py", line 788, in register_rest_api
      )(partial(GenericList, cls=endpoint_cls)))
    File "/Users/Sylvia/gcdc2013/endpoints_proto_datastore/ndb/model.py", line 1544, in RequestToQueryDecorator
      @functools.wraps(api_method)
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 33, in update_wrapper
      setattr(wrapper, attr, getattr(wrapped, attr))
  AttributeError: 'functools.partial' object has no attribute '__module__'
  </code></pre>
  
  <p>related articles:</p>
  
  <ul>
  <li><a href="https://stackoverflow.com/questions/114214">Class method differences in Python: bound, unbound and static</a></li>
  <li><a href="https://stackoverflow.com/questions/14095616">Python - can I programmatically decorate class methods from a class instance?</a></li>
  <li><a href="https://stackoverflow.com/questions/8307602">Programmatically generate methods for a class</a></li>
  <li><a href="https://stackoverflow.com/questions/972">Adding a Method to an Existing Object Instance</a></li>
  </ul>