diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f65e633 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 + +[*.py] +max_line_length = 119 diff --git a/docs/conf.py b/docs/conf.py index 59bc071..0b1a8c7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -11,7 +11,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import os +import sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import plantuml @@ -19,12 +20,12 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) +# sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' +# needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. @@ -37,14 +38,14 @@ source_suffix = '.rst' # The encoding of source files. -#source_encoding = 'utf-8-sig' +# source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'plantuml' -copyright = u'2013, ' + plantuml.__author__ +copyright = u'2013,2019 ' + plantuml.__author__ # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -57,40 +58,40 @@ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -#language = None +# language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: -#today = '' +# today = '' # Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +# today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None +# default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True +# add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). -#add_module_names = True +# add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. -#show_authors = False +# show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] +# modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False +# keep_warnings = False # -- Options for HTML output --------------------------------------------------- @@ -102,26 +103,26 @@ # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} +# html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] +# html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -#html_title = None +# html_title = None # A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None +# html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +# html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -#html_favicon = None +# html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, @@ -130,88 +131,87 @@ # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' +# html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. -#html_use_smartypants = True +# html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +# html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. -#html_additional_pages = {} +# html_additional_pages = {} # If false, no module index is generated. -#html_domain_indices = True +# html_domain_indices = True # If false, no index is generated. -#html_use_index = True +# html_use_index = True # If true, the index is split into individual pages for each letter. -#html_split_index = False +# html_split_index = False # If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True +# html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True +# html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True +# html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. -#html_use_opensearch = '' +# html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None +# html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'plantumldoc' - # -- Options for LaTeX output -------------------------------------------------- latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', -# Additional stuff for the LaTeX preamble. -#'preamble': '', + # Additional stuff for the LaTeX preamble. + # 'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'plantuml.tex', u'plantuml Documentation', - u'Doug Napoleone', 'manual'), + ('index', 'plantuml.tex', u'plantuml Documentation', + u'Doug Napoleone', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. -#latex_logo = None +# latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. -#latex_use_parts = False +# latex_use_parts = False # If true, show page references after internal links. -#latex_show_pagerefs = False +# latex_show_pagerefs = False # If true, show URL addresses after external links. -#latex_show_urls = False +# latex_show_urls = False # Documents to append as an appendix to all manuals. -#latex_appendices = [] +# latex_appendices = [] # If false, no module index is generated. -#latex_domain_indices = True +# latex_domain_indices = True # -- Options for manual page output -------------------------------------------- @@ -224,7 +224,7 @@ ] # If true, show URL addresses after external links. -#man_show_urls = False +# man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ @@ -233,22 +233,22 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'plantuml', u'plantuml Documentation', - u'Doug Napoleone', 'plantuml', 'One line description of project.', - 'Miscellaneous'), + ('index', 'plantuml', u'plantuml Documentation', + u'Doug Napoleone', 'plantuml', 'One line description of project.', + 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. -#texinfo_appendices = [] +# texinfo_appendices = [] # If false, no module index is generated. -#texinfo_domain_indices = True +# texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' +# texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False +# texinfo_no_detailmenu = False # Example configuration for intersphinx: refer to the Python standard library. diff --git a/plantuml.py b/plantuml.py index 8b8e9d5..9eb69d3 100755 --- a/plantuml.py +++ b/plantuml.py @@ -7,6 +7,7 @@ from argparse import ArgumentParser from io import open from os import environ, path, makedirs +from platform import python_version_tuple from zlib import compress import httplib2 @@ -24,9 +25,8 @@ __author__ = 'Doug Napoleone, Samuel Marks, Eric Frederich' __email__ = 'doug.napoleone+plantuml@gmail.com' - plantuml_alphabet = string.digits + string.ascii_uppercase + string.ascii_lowercase + '-_' -base64_alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' +base64_alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' b64_to_plantuml = maketrans(base64_alphabet.encode('utf-8'), plantuml_alphabet.encode('utf-8')) @@ -50,7 +50,7 @@ class PlantUMLHTTPError(PlantUMLConnectionError): """ def __init__(self, response, content, *args, **kwdargs): - super(PlantUMLConnectionError, self).__init__(*args, **kwdargs) + super(PlantUMLConnectionError, self).__init__(*args) self.response = response self.content = content if not self.message: @@ -94,19 +94,23 @@ class PlantUML(object): """ - def __init__(self, url, basic_auth={}, form_auth={}, - http_opts={}, request_opts={}): + def __init__(self, url, basic_auth=None, form_auth=None, + http_opts=None, request_opts=None): + if http_opts is None: + http_opts = {} self.HttpLib2Error = httplib2.HttpLib2Error self.url = url - self.request_opts = request_opts + self.request_opts = request_opts or {} self.auth_type = 'basic_auth' if basic_auth else ( - 'form_auth' if form_auth else None) - self.auth = basic_auth if basic_auth else ( - form_auth if form_auth else None) + 'form_auth' if form_auth is not None else None) + self.auth = (form_auth if form_auth else None) if basic_auth is None else basic_auth # Proxify - try: + if python_version_tuple()[0] == '2': from urlparse import urlparse + else: + from urllib.parse.urlparse import urlparse + try: import socks proxy_uri = urlparse(environ.get('HTTPS_PROXY', environ.get('HTTP_PROXY'))) @@ -185,7 +189,8 @@ def processes_file(self, filename, outfile=None, errorfile=None, directory=''): to. If this is not supplined, then it will be the input ``filename`` with the extension replaced with '_error.html'. - :returns: ``True`` if the image write succedded, ``False`` if there was + :param str directory: Directory to find files within. + :returns: ``True`` if the image write succeeded, ``False`` if there was an error written to ``errorfile``. """ if outfile is None: @@ -223,7 +228,7 @@ def main(): args = _build_parser().parse_args() pl = PlantUML(args.server) print(list(map(lambda filename: {'filename': filename, - 'gen_success': pl.processes_file(filename, directory=args.out)}, args.files))) + 'gen_success': pl.processes_file(filename, directory=args.out)}, args.files))) if __name__ == '__main__': diff --git a/setup.py b/setup.py index 595fd15..3b29082 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ from setuptools import setup + from plantuml import __author__, __version_string__, __email__ setup( @@ -16,6 +17,8 @@ 'Programming Language :: Python', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', 'Intended Audience :: Developers', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: BSD License',