home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / DocXMLRPCServer.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  6.9 KB  |  194 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  3.  
  4. import pydoc
  5. import inspect
  6. import re
  7. import sys
  8. from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler, CGIXMLRPCRequestHandler, resolve_dotted_attribute
  9.  
  10. class ServerHTMLDoc(pydoc.HTMLDoc):
  11.     
  12.     def markup(self, text, escape = None, funcs = { }, classes = { }, methods = { }):
  13.         if not escape:
  14.             pass
  15.         escape = self.escape
  16.         results = []
  17.         here = 0
  18.         pattern = re.compile('\\b((http|ftp)://\\S+[\\w/]|RFC[- ]?(\\d+)|PEP[- ]?(\\d+)|(self\\.)?((?:\\w|\\.)+))\\b')
  19.         while None:
  20.             match = pattern.search(text, here)
  21.             if not match:
  22.                 break
  23.             (start, end) = match.span()
  24.             (all, scheme, rfc, pep, selfdot, name) = match.groups()
  25.             if scheme:
  26.                 url = escape(all).replace('"', '"')
  27.                 results.append('<a href="%s">%s</a>' % (url, url))
  28.             elif rfc:
  29.                 url = 'http://www.rfc-editor.org/rfc/rfc%d.txt' % int(rfc)
  30.                 results.append('<a href="%s">%s</a>' % (url, escape(all)))
  31.             elif pep:
  32.                 url = 'http://www.python.org/dev/peps/pep-%04d/' % int(pep)
  33.                 results.append('<a href="%s">%s</a>' % (url, escape(all)))
  34.             elif text[end:end + 1] == '(':
  35.                 results.append(self.namelink(name, methods, funcs, classes))
  36.             elif selfdot:
  37.                 results.append('self.<strong>%s</strong>' % name)
  38.             else:
  39.                 results.append(self.namelink(name, classes))
  40.             here = end
  41.             continue
  42.             results.append(escape(text[here:]))
  43.             return ''.join(results)
  44.  
  45.     
  46.     def docroutine(self, object, name, mod = None, funcs = { }, classes = { }, methods = { }, cl = None):
  47.         if not cl or cl.__name__:
  48.             pass
  49.         anchor = '' + '-' + name
  50.         note = ''
  51.         title = '<a name="%s"><strong>%s</strong></a>' % (self.escape(anchor), self.escape(name))
  52.         if inspect.ismethod(object):
  53.             (args, varargs, varkw, defaults) = inspect.getargspec(object.im_func)
  54.             argspec = inspect.formatargspec(args[1:], varargs, varkw, defaults, formatvalue = self.formatvalue)
  55.         elif inspect.isfunction(object):
  56.             (args, varargs, varkw, defaults) = inspect.getargspec(object)
  57.             argspec = inspect.formatargspec(args, varargs, varkw, defaults, formatvalue = self.formatvalue)
  58.         else:
  59.             argspec = '(...)'
  60.         if isinstance(object, tuple):
  61.             if not object[0]:
  62.                 pass
  63.             argspec = argspec
  64.             if not object[1]:
  65.                 pass
  66.             docstring = ''
  67.         else:
  68.             docstring = pydoc.getdoc(object)
  69.         if note:
  70.             pass
  71.         decl = title + argspec + self.grey('<font face="helvetica, arial">%s</font>' % note)
  72.         doc = self.markup(docstring, self.preformat, funcs, classes, methods)
  73.         if doc:
  74.             pass
  75.         doc = '<dd><tt>%s</tt></dd>' % doc
  76.         return '<dl><dt>%s</dt>%s</dl>\n' % (decl, doc)
  77.  
  78.     
  79.     def docserver(self, server_name, package_documentation, methods):
  80.         fdict = { }
  81.         for key, value in methods.items():
  82.             fdict[key] = '#-' + key
  83.             fdict[value] = fdict[key]
  84.         
  85.         server_name = self.escape(server_name)
  86.         head = '<big><big><strong>%s</strong></big></big>' % server_name
  87.         result = self.heading(head, '#ffffff', '#7799ee')
  88.         doc = self.markup(package_documentation, self.preformat, fdict)
  89.         if doc:
  90.             pass
  91.         doc = '<tt>%s</tt>' % doc
  92.         result = result + '<p>%s</p>\n' % doc
  93.         contents = []
  94.         method_items = sorted(methods.items())
  95.         for key, value in method_items:
  96.             contents.append(self.docroutine(value, key, funcs = fdict))
  97.         
  98.         result = result + self.bigsection('Methods', '#ffffff', '#eeaa77', pydoc.join(contents))
  99.         return result
  100.  
  101.  
  102.  
  103. class XMLRPCDocGenerator:
  104.     
  105.     def __init__(self):
  106.         self.server_name = 'XML-RPC Server Documentation'
  107.         self.server_documentation = 'This server exports the following methods through the XML-RPC protocol.'
  108.         self.server_title = 'XML-RPC Server Documentation'
  109.  
  110.     
  111.     def set_server_title(self, server_title):
  112.         self.server_title = server_title
  113.  
  114.     
  115.     def set_server_name(self, server_name):
  116.         self.server_name = server_name
  117.  
  118.     
  119.     def set_server_documentation(self, server_documentation):
  120.         self.server_documentation = server_documentation
  121.  
  122.     
  123.     def generate_html_documentation(self):
  124.         methods = { }
  125.         for method_name in self.system_listMethods():
  126.             if method_name in self.funcs:
  127.                 method = self.funcs[method_name]
  128.             elif self.instance is not None:
  129.                 method_info = [
  130.                     None,
  131.                     None]
  132.                 if hasattr(self.instance, '_get_method_argstring'):
  133.                     method_info[0] = self.instance._get_method_argstring(method_name)
  134.                 if hasattr(self.instance, '_methodHelp'):
  135.                     method_info[1] = self.instance._methodHelp(method_name)
  136.                 method_info = tuple(method_info)
  137.                 if method_info != (None, None):
  138.                     method = method_info
  139.                 elif not hasattr(self.instance, '_dispatch'):
  140.                     
  141.                     try:
  142.                         method = resolve_dotted_attribute(self.instance, method_name)
  143.                     except AttributeError:
  144.                         method = method_info
  145.                     
  146.  
  147.                 method = method_info
  148.             methods[method_name] = method
  149.         
  150.         documenter = ServerHTMLDoc()
  151.         documentation = documenter.docserver(self.server_name, self.server_documentation, methods)
  152.         return documenter.page(self.server_title, documentation)
  153.  
  154.  
  155.  
  156. class DocXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
  157.     
  158.     def do_GET(self):
  159.         if not self.is_rpc_path_valid():
  160.             self.report_404()
  161.             return None
  162.         response = None.server.generate_html_documentation()
  163.         self.send_response(200)
  164.         self.send_header('Content-type', 'text/html')
  165.         self.send_header('Content-length', str(len(response)))
  166.         self.end_headers()
  167.         self.wfile.write(response)
  168.  
  169.  
  170.  
  171. class DocXMLRPCServer(SimpleXMLRPCServer, XMLRPCDocGenerator):
  172.     
  173.     def __init__(self, addr, requestHandler = DocXMLRPCRequestHandler, logRequests = 1, allow_none = False, encoding = None, bind_and_activate = True):
  174.         SimpleXMLRPCServer.__init__(self, addr, requestHandler, logRequests, allow_none, encoding, bind_and_activate)
  175.         XMLRPCDocGenerator.__init__(self)
  176.  
  177.  
  178.  
  179. class DocCGIXMLRPCRequestHandler(CGIXMLRPCRequestHandler, XMLRPCDocGenerator):
  180.     
  181.     def handle_get(self):
  182.         response = self.generate_html_documentation()
  183.         print 'Content-Type: text/html'
  184.         print 'Content-Length: %d' % len(response)
  185.         print 
  186.         sys.stdout.write(response)
  187.  
  188.     
  189.     def __init__(self):
  190.         CGIXMLRPCRequestHandler.__init__(self)
  191.         XMLRPCDocGenerator.__init__(self)
  192.  
  193.  
  194.