Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

83 lines (60 sloc) 2.418 kb
# Licensed under a 3-clause BSD style license - see LICENSE.rst
Process all "async" methods into direct methods.
from class_or_instance import class_or_instance
import textwrap
import functools
from docstr_chompers import remove_returns
def async_to_sync(cls):
Convert all query_x_async methods to query_x methods
for help understanding)
def create_method(async_method_name):
def newmethod(self, *args, **kwargs):
if 'verbose' in kwargs:
verbose = kwargs.pop('verbose')
verbose = False
response = getattr(self,async_method_name)(*args,**kwargs)
result = self._parse_result(response, verbose=verbose)
return result
return newmethod
methods = cls.__dict__.keys()
for k in methods:
newmethodname = k.replace("_async","")
if 'async' in k and newmethodname not in methods:
newmethod = create_method(k)
newmethod.fn.__doc__ = async_to_sync_docstr(getattr(cls,k).__doc__)
newmethod.fn.__name__ = newmethodname
newmethod.__name__ = newmethodname
functools.update_wrapper(newmethod, newmethod.fn)
return cls
def async_to_sync_docstr(doc, returntype='table'):
Strip of the "Returns" component of a docstr and replace it with "Returns a
table" code
object_dict = {'table':'astropy.table.Table',
firstline = "Queries the service and returns a {rt} object".format(rt=returntype)
vowels = 'aeiou'
vowels += vowels.upper()
n = 'n' if object_dict[returntype][0] in vowels else ''
returnstr = """
A{n} `{ot}` object
# all docstrings have a blank first line
# strip it out, so that we can prepend
outlines = remove_returns(doc.lstrip('\n'))
# then the '' here is to add back the blank line
newdoc = "\n".join(['',firstline] + outlines + [textwrap.dedent(returnstr)])
return newdoc
Jump to Line
Something went wrong with that request. Please try again.