diff options
Diffstat (limited to 'creole/setup_utils.py')
-rw-r--r-- | creole/setup_utils.py | 149 |
1 files changed, 71 insertions, 78 deletions
diff --git a/creole/setup_utils.py b/creole/setup_utils.py index c881640..c4f29d0 100644 --- a/creole/setup_utils.py +++ b/creole/setup_utils.py @@ -21,7 +21,7 @@ PACKAGE_ROOT = os.path.dirname(os.path.abspath(__file__)) try: - from creole.setup_utils import GetLongDescription + from creole.setup_utils import get_long_description except ImportError: if "register" in sys.argv or "sdist" in sys.argv or "--long-description" in sys.argv: etype, evalue, etb = sys.exc_info() @@ -29,7 +29,7 @@ raise etype, evalue, etb long_description = None else: - long_description = GetLongDescription(PACKAGE_ROOT) + long_description = get_long_description(PACKAGE_ROOT) setup( ... @@ -45,93 +45,86 @@ import codecs import os import sys +import warnings from creole import creole2html, html2rest +from creole.shared.unknown_tags import raise_unknown_node, transparent_unknown_nodes -class GetLongDescription(object): +RAISE_ERRORS_ARGS = ( + "register", "sdist", "bdist", "upload", "--long-description", +) + + +def should_raise_errors(): """ - Read and convert README.creole lazy to ReStructuredText. + Raise only errors, if one of RAISE_ERRORS_ARGS is in sys.argv + or if no argument presents. """ - RAISE_ERRORS_ARGS = ("register", "sdist", "--long-description") - - def __init__(self, package_root, filename="README.creole", raise_errors=None): - self.package_root = package_root - self.filename = filename - self.raise_errors = raise_errors - - self.long_description_origin = "" - self.long_description_html = None - self.long_description_rest_unicode = None - self.long_description_rest = None - - def should_raise_errors(self): - """ - Raise only errors, if one of self.RAISE_ERRORS_ARGS is in sys.argv - or if no argument presents. - """ - if len(sys.argv) == 1: + if len(sys.argv) == 1: + return True + + for arg in RAISE_ERRORS_ARGS: + if arg in sys.argv: return True + return False + + +def get_long_description(package_root, filename="README.creole", raise_errors=None): + """ read README file and convert it on-the-fly to ReStructuredText. """ + if raise_errors is None: + raise_errors = should_raise_errors() + + if raise_errors: + # raise a error if a unknown node found + unknown_emit = raise_unknown_node + else: + # ignore unknown nodes + unknown_emit = transparent_unknown_nodes + + filepath = os.path.join(package_root, filename) + try: + # Read creole README + f = codecs.open(filepath, "r", encoding="utf-8") + long_description_origin = f.read().strip() + f.close() + + # convert creole into html + long_description_html = creole2html(long_description_origin) + + # convert html to ReSt + long_description_rest_unicode = html2rest( + long_description_html, + emitter_kwargs={"unknown_emit":unknown_emit} + ) + long_description_rest = long_description_rest_unicode.encode("utf-8") + except Exception, err: + if raise_errors: + raise + # Don't raise the error e.g. in ./setup install process + long_description_rest = "[Error: %s]\n%s" % ( + err, long_description_origin + ) + else: + if raise_errors: + # Test created ReSt code + from creole.rest2html.clean_writer import rest2html + rest2html(long_description_rest_unicode) + + return long_description_rest - for arg in self.RAISE_ERRORS_ARGS: - if arg in sys.argv: - return True - return False - - def read_long_description(self): - """ read README file and convert it to ReStructuredText. """ - if self.raise_errors is None: - self.raise_errors = self.should_raise_errors() - - if self.raise_errors: - # raise a error if a unknown node found - from creole.shared.unknown_tags import raise_unknown_node as unknown_emit - else: - # ignore unknown nodes - from creole.shared.unknown_tags import transparent_unknown_nodes as unknown_emit - - filepath = os.path.join(self.package_root, self.filename) - try: - # Read creole README - f = codecs.open(filepath, "r", encoding="utf-8") - self.long_description_origin = f.read().strip() - f.close() - - # convert creole into html - self.long_description_html = creole2html(self.long_description_origin) - - # convert html to ReSt - self.long_description_rest_unicode = html2rest( - self.long_description_html, - emitter_kwargs={"unknown_emit":unknown_emit} - ) - self.long_description_rest = self.long_description_rest_unicode.encode("utf-8") - except Exception, err: - if self.raise_errors: - raise - # Don't raise the error e.g. in ./setup install process - self.long_description_rest = "[Error: %s]\n%s" % ( - err, self.long_description_origin - ) - else: - if self.raise_errors: - # Test created ReSt code - from creole.rest2html.clean_writer import rest2html - rest2html(self.long_description_rest_unicode) - - def __str__(self): - if self.long_description_rest is None: - self.read_long_description() - return self.long_description_rest - - def __unicode__(self): - if self.long_description_rest_unicode is None: - self.read_long_description() - return self.long_description_rest_unicode +def _get_long_description(*args, **kwargs): + msg = "'GetLongDescription' is deprecated, use 'get_long_description' instead." + if should_raise_errors(): + raise DeprecationWarning(msg) + else: + warnings.warn(msg, DeprecationWarning) + return get_long_description(*args, **kwargs) +GetLongDescription = _get_long_description # for backward-compatibility if __name__ == "__main__": package_root = os.path.abspath("../") - long_description = GetLongDescription(package_root) + long_description = get_long_description(package_root) print long_description |