home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_416 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  7.0 KB  |  203 lines

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