Example #1
0
                nodes.literal_block(block_text, block_text),
                line=lineno)
            raise SystemMessagePropagation(severe)
        source = options['url']
        try:
            csv_text = urllib2.urlopen(source).read()
        except (urllib2.URLError, IOError, OSError, ValueError), error:
            severe = state_machine.reporter.severe(
                'Problems with "%s" directive URL "%s":\n%s.' %
                (name, options['url'], error),
                nodes.literal_block(block_text, block_text),
                line=lineno)
            raise SystemMessagePropagation(severe)
        csv_file = io.StringInput(
            source=csv_text,
            source_path=source,
            encoding=encoding,
            error_handler=state.document.settings.input_encoding_error_handler)
        csv_data = csv_file.read().splitlines()
    else:
        error = state_machine.reporter.warning(
            'The "%s" directive requires content; none supplied.' % (name),
            nodes.literal_block(block_text, block_text),
            line=lineno)
        raise SystemMessagePropagation(error)
    return csv_data, source


def process_header_option(options, state_machine, lineno):
    source = state_machine.get_source(lineno - 1)
    table_head = []
Example #2
0
                                  (self.name, ErrorString(error)))
            attributes['source'] = path
        elif 'url' in self.options:
            source = self.options['url']
            # Do not import urllib2 at the top of the module because
            # it may fail due to broken SSL dependencies, and it takes
            # about 0.15 seconds to load.
            import urllib2
            try:
                raw_text = urllib2.urlopen(source).read()
            except (urllib2.URLError, IOError, OSError), error:
                raise self.severe(
                    u'Problems with "%s" directive URL "%s":\n%s.' %
                    (self.name, self.options['url'], ErrorString(error)))
            raw_file = io.StringInput(source=raw_text,
                                      source_path=source,
                                      encoding=encoding,
                                      error_handler=e_handler)
            try:
                text = raw_file.read()
            except UnicodeError, error:
                raise self.severe(u'Problem with "%s" directive:\n%s' %
                                  (self.name, ErrorString(error)))
            attributes['source'] = source
        else:
            # This will always fail because there is no content.
            self.assert_has_content()
        raw_node = nodes.raw('', text, **attributes)
        (raw_node.source,
         raw_node.line) = self.state_machine.get_source_and_line(self.lineno)
        return [raw_node]
Example #3
0
 def run(self):
     if (not self.state.document.settings.raw_enabled
             or (not self.state.document.settings.file_insertion_enabled and
                 ('file' in self.options or 'url' in self.options))):
         raise self.warning('"%s" directive disabled.' % self.name)
     attributes = {'format': ' '.join(self.arguments[0].lower().split())}
     encoding = self.options.get(
         'encoding', self.state.document.settings.input_encoding)
     e_handler = self.state.document.settings.input_encoding_error_handler
     if self.content:
         if 'file' in self.options or 'url' in self.options:
             raise self.error(
                 '"%s" directive may not both specify an external file '
                 'and have content.' % self.name)
         text = '\n'.join(self.content)
     elif 'file' in self.options:
         if 'url' in self.options:
             raise self.error(
                 'The "file" and "url" options may not be simultaneously '
                 'specified for the "%s" directive.' % self.name)
         source_dir = os.path.dirname(
             os.path.abspath(self.state.document.current_source))
         path = os.path.normpath(
             os.path.join(source_dir, self.options['file']))
         path = utils.relative_path(None, path)
         try:
             raw_file = io.FileInput(source_path=path,
                                     encoding=encoding,
                                     error_handler=e_handler)
             # TODO: currently, raw input files are recorded as
             # dependencies even if not used for the chosen output format.
             self.state.document.settings.record_dependencies.add(path)
         except IOError as error:
             raise self.severe(u'Problems with "%s" directive path:\n%s.' %
                               (self.name, ErrorString(error)))
         try:
             text = raw_file.read()
         except UnicodeError as error:
             raise self.severe(u'Problem with "%s" directive:\n%s' %
                               (self.name, ErrorString(error)))
         attributes['source'] = path
     elif 'url' in self.options:
         source = self.options['url']
         # Do not import urllib2 at the top of the module because
         # it may fail due to broken SSL dependencies, and it takes
         # about 0.15 seconds to load.
         if sys.version_info >= (3, 0):
             from urllib.request import urlopen
             from urllib.error import URLError
         else:
             from urllib2 import urlopen, URLError
         try:
             raw_text = urlopen(source).read()
         except (URLError, IOError, OSError) as error:
             raise self.severe(
                 u'Problems with "%s" directive URL "%s":\n%s.' %
                 (self.name, self.options['url'], ErrorString(error)))
         raw_file = io.StringInput(source=raw_text,
                                   source_path=source,
                                   encoding=encoding,
                                   error_handler=e_handler)
         try:
             text = raw_file.read()
         except UnicodeError as error:
             raise self.severe(u'Problem with "%s" directive:\n%s' %
                               (self.name, ErrorString(error)))
         attributes['source'] = source
     else:
         # This will always fail because there is no content.
         self.assert_has_content()
     raw_node = nodes.raw('', text, **attributes)
     (raw_node.source,
      raw_node.line) = self.state_machine.get_source_and_line(self.lineno)
     return [raw_node]
Example #4
0
                                  (self.name, error.__class__.__name__, error))
            attributes['source'] = path
        elif 'url' in self.options:
            source = self.options['url']
            # Do not import urllib2 at the top of the module because
            # it may fail due to broken SSL dependencies, and it takes
            # about 0.15 seconds to load.
            import urllib2
            try:
                raw_text = urllib2.urlopen(source).read()
            except (urllib2.URLError, IOError, OSError), error:
                raise self.severe(
                    'Problems with "%s" directive URL "%s":\n%s.' %
                    (self.name, self.options['url'], error))
            raw_file = io.StringInput(
                source=raw_text, source_path=source, encoding=encoding,
                error_handler=(self.state.document.settings.\
                               input_encoding_error_handler))
            try:
                text = raw_file.read()
            except UnicodeError, error:
                raise self.severe('Problem with "%s" directive:\n%s: %s' %
                                  (self.name, error.__class__.__name__, error))
            attributes['source'] = source
        else:
            # This will always fail because there is no content.
            self.assert_has_content()
        raw_node = nodes.raw('', text, **attributes)
        return [raw_node]


class Replace(Directive):
Example #5
0
 def get_csv_data(self):
     """
     Get CSV data from the directive content, from an external
     file, or from a URL reference.
     """
     encoding = self.options.get(
         'encoding', self.state.document.settings.input_encoding)
     error_handler = self.state.document.settings.input_encoding_error_handler
     if self.content:
         # CSV data is from directive content.
         if 'file' in self.options or 'url' in self.options:
             error = self.state_machine.reporter.error(
                 '"%s" directive may not both specify an external file and'
                 ' have content.' % self.name,
                 nodes.literal_block(self.block_text, self.block_text),
                 line=self.lineno)
             raise SystemMessagePropagation(error)
         source = self.content.source(0)
         csv_data = self.content
     elif 'file' in self.options:
         # CSV data is from an external file.
         if 'url' in self.options:
             error = self.state_machine.reporter.error(
                 'The "file" and "url" options may not be simultaneously'
                 ' specified for the "%s" directive.' % self.name,
                 nodes.literal_block(self.block_text, self.block_text),
                 line=self.lineno)
             raise SystemMessagePropagation(error)
         source_dir = os.path.dirname(
             os.path.abspath(self.state.document.current_source))
         source = os.path.normpath(
             os.path.join(source_dir, self.options['file']))
         source = utils.relative_path(None, source)
         try:
             self.state.document.settings.record_dependencies.add(source)
             csv_file = io.FileInput(source_path=source,
                                     encoding=encoding,
                                     error_handler=error_handler)
             csv_data = csv_file.read().splitlines()
         except IOError as error:
             severe = self.state_machine.reporter.severe(
                 'Problems with "%s" directive path:\n%s.' %
                 (self.name, SafeString(error)),
                 nodes.literal_block(self.block_text, self.block_text),
                 line=self.lineno)
             raise SystemMessagePropagation(severe)
     elif 'url' in self.options:
         # CSV data is from a URL.
         # Do not import urllib2 at the top of the module because
         # it may fail due to broken SSL dependencies, and it takes
         # about 0.15 seconds to load.
         import urllib.request, urllib.error, urllib.parse
         source = self.options['url']
         try:
             csv_text = urllib.request.urlopen(source).read()
         except (urllib.error.URLError, IOError, OSError,
                 ValueError) as error:
             severe = self.state_machine.reporter.severe(
                 'Problems with "%s" directive URL "%s":\n%s.' %
                 (self.name, self.options['url'], SafeString(error)),
                 nodes.literal_block(self.block_text, self.block_text),
                 line=self.lineno)
             raise SystemMessagePropagation(severe)
         csv_file = io.StringInput(
             source=csv_text, source_path=source, encoding=encoding,
             error_handler=(self.state.document.settings.\
                            input_encoding_error_handler))
         csv_data = csv_file.read().splitlines()
     else:
         error = self.state_machine.reporter.warning(
             'The "%s" directive requires content; none supplied.' %
             self.name,
             nodes.literal_block(self.block_text, self.block_text),
             line=self.lineno)
         raise SystemMessagePropagation(error)
     return csv_data, source
Example #6
0
import EffDirectives
import EffParser
import EffMap


class MIF:
    pass


writer = MIF
writer = None

if writer is MIF:
    import MIFwriter as EffWriter
    pub = core.Publisher(writer=EffWriter.Writer(EffMap.StyleMap))
else:
    pub = core.Publisher()
    pub.set_writer('pseudoxml')

inliner = EffParser.Inliner()
pub.set_reader('standalone', EffParser.Parser(inliner=inliner),
               'restructuredtext')
settings = pub.get_settings()
#settings.doctitle_xform = 0
settings.traceback = 1
pub.source = io.StringInput(reST_text)
pub.destination = io.StringOutput(encoding='utf-8')
content = pub.publish()

print content