Skip to content

Commit

Permalink
New GetLongDescription() helper for setup.py, see: https://code.googl…
Browse files Browse the repository at this point in the history
  • Loading branch information
jedie committed Aug 26, 2011
1 parent a442f48 commit 31b4213
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 40 deletions.
8 changes: 8 additions & 0 deletions README.creole
Expand Up @@ -89,8 +89,16 @@ Contributers should take a look at this page:
* [[http://code.google.com/p/python-creole/wiki/DeveloperInfo]]
== Use creole in README ==

With python-creole you can convert a README on-the-fly from creole into ReStructuredText in setup.py
How to do this, read: https://code.google.com/p/python-creole/wiki/UseInSetup


= history

* v0.8
** New GetLongDescription() helper for setup.py, see: https://code.google.com/p/python-creole/wiki/UseInSetup
* v0.7.3
** Bugfix in html2rest:
*** table without {{{<th>}}} header
Expand Down
2 changes: 1 addition & 1 deletion creole/__init__.py
Expand Up @@ -20,7 +20,7 @@

from __future__ import division, absolute_import

__version__ = (0, 7, 3)
__version__ = (0, 8, 0)
__api__ = (1, 0) # Creole 1.0 spec - http://wikicreole.org/


Expand Down
135 changes: 135 additions & 0 deletions creole/setup_utils.py
@@ -0,0 +1,135 @@
# coding: utf-8

"""
utils for distutils setup
~~~~~~~~~~~~~~~~~~~~~~~~~
Get README.creole as ReStructuredText on-the-fly for setup.long_description
More information:
https://code.google.com/p/python-creole/wiki/UseInSetup
usage in setup.py e.g.:
---------------------------------------------------------------------------
#!/usr/bin/env python
# coding: utf-8
import os
import sys
from setuptools import setup, find_packages
try:
from creole.setup_utils import GetLongDescription
except ImportError:
if "register" in sys.argv or "sdist" in sys.argv or "--long-description" in sys.argv:
etype, evalue, etb = sys.exc_info()
evalue = etype("%s - Please install python-creole >= v0.8 - e.g.: pip install python-creole" % evalue)
raise etype, evalue, etb
GetLongDescription = None
PACKAGE_ROOT = os.path.dirname(os.path.abspath(__file__))
setup(
...
long_description=GetLongDescription(PACKAGE_ROOT),
...
)
---------------------------------------------------------------------------
:copyleft: 2011 by the python-creole team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""

import codecs
import os
import sys

from creole import creole2html, html2rest


class GetLongDescription(object):
"""
Read and convert README.creole lazy to ReStructuredText.
"""
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:
return True

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



if __name__ == "__main__":
package_root = os.path.abspath("../")
long_description = GetLongDescription(package_root)
print long_description
41 changes: 2 additions & 39 deletions setup.py
Expand Up @@ -16,6 +16,7 @@
from setuptools import setup, find_packages

from creole import VERSION_STRING
from creole.setup_utils import GetLongDescription


PACKAGE_ROOT = os.path.dirname(os.path.abspath(__file__))
Expand All @@ -31,49 +32,11 @@ def get_authors():
return authors


def get_long_description():
"""
returns README.creole as ReStructuredText.
Code from:
https://code.google.com/p/python-creole/wiki/UseInSetup
"""
desc_creole = ""
raise_errors = "register" in sys.argv or "sdist" in sys.argv or "--long-description" in sys.argv
try:
f = file(os.path.join(PACKAGE_ROOT, "README.creole"), "r")
desc_creole = f.read()
f.close()
desc_creole = unicode(desc_creole, 'utf-8').strip()

try:
from creole import creole2html, html2rest
except ImportError:
etype, evalue, etb = sys.exc_info()
evalue = etype("%s - Please install python-creole, e.g.: pip install python-creole" % evalue)
raise etype, evalue, etb

desc_html = creole2html(desc_creole)
long_description = html2rest(desc_html)
long_description = long_description.encode("utf-8")
except Exception, err:
if raise_errors:
raise
# Don't raise the error e.g. in ./setup install process
long_description = "[Error: %s]\n%s" % (err, desc_creole)

if raise_errors:
# Try if created ReSt code can be convertet into html
from creole.rest2html.clean_writer import rest2html
rest2html(long_description)

return long_description


setup(
name='python-creole',
version=VERSION_STRING,
description='python-creole is an open-source (GPL) markup converter in pure Python for: creole2html, html2creole, html2ReSt, html2textile',
long_description=get_long_description(),
long_description=GetLongDescription(PACKAGE_ROOT),
author=get_authors(),
maintainer="Jens Diemer",
url='http://code.google.com/p/python-creole/',
Expand Down

0 comments on commit 31b4213

Please sign in to comment.