Changeset 3941:dac35eb5c802 in livinglogic.python.xist

Show
Ignore:
Timestamp:
03/26/10 16:24:36 (10 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Revert back to the previous way of checking input/output types in parsing pipelines.

Location:
src/ll/xist
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • src/ll/xist/parsers.py

    r3933 r3941  
    150150 
    151151class PipelineMismatchError(TypeError): 
    152     def __init__(self, pipe, need, got): 
    153         self.pipe = pipe 
    154         self.need = need 
    155         self.got = got 
     152    def __init__(self, pipein, pipeout): 
     153        self.pipein = pipein 
     154        self.pipeout = pipeout 
    156155 
    157156    def __str__(self): 
    158         if self.got.__class__.__module__ == "__builtin__": 
    159             return "{0.pipe!r} got wrong input from {0.pipe.input!r}: need {0.need}, got {0.got.__class__.__name__}".format(self) 
    160         else: 
    161             return "{0.pipe!r} got wrong input from {0.pipe.input!r}: need {0.need}, got {0.got.__class__.__module__}.{0.got.__class__.__name__}".format(self) 
     157        return "{0.pipein!r} got wrong input from {0.pipeout!r}: need {0.pipein.intype}, got {0.pipeout.outtype}".format(self) 
    162158 
    163159 
     
    193189            else: 
    194190                raise TypeError("can't convert {0!r} to a source".format(other)) 
     191        if other.outtype != self.intype: 
     192            raise PipelineMismatchError(self, other) 
    195193        self.input = other 
    196194        return self 
     
    223221        self.url = url_.URL(url if url is not None else "STRING") 
    224222        self.data = data 
     223        self.outtype = "bytes" if isinstance(data, str) else "unicode" 
    225224 
    226225    def __iter__(self): 
     
    232231    Provides parser input from an iterator over strings. 
    233232    """ 
    234     def __init__(self, iterable, url=None): 
     233 
     234    def __init__(self, iterable, url=None, outtype="bytes"): 
    235235        """ 
    236236        Create a :class:`IterSource` object. :var:`iterable` must be an iterable 
     
    240240        self.url = url_.URL(url if url is not None else "ITER") 
    241241        self.iterable = iterable 
     242        self.outtype = outtype 
    242243 
    243244    def __iter__(self): 
     
    250251    :meth:`read` method). 
    251252    """ 
    252     def __init__(self, stream, url=None, bufsize=8192): 
     253 
     254    def __init__(self, stream, url=None, bufsize=8192, outtype="bytes"): 
    253255        """ 
    254256        Create a :class:`StreamSource` object. :var:`stream` must possess a 
     
    260262        self.stream = stream 
    261263        self.bufsize = bufsize 
     264        self.outtype = outtype 
    262265 
    263266    def __iter__(self): 
     
    274277    Provides parser input from a file. 
    275278    """ 
    276     def __init__(self, filename, bufsize=8192): 
     279 
     280    def __init__(self, filename, bufsize=8192, outtype="bytes"): 
    277281        """ 
    278282        Create a :class:`FileSource` object. :var:`filename` is the name of the 
     
    283287        self.url = url_.File(filename) 
    284288        self._filename = os.path.expanduser(filename) 
     289        self.outtype = outtype 
    285290 
    286291    def __iter__(self): 
     
    298303    Provides parser input from a URL. 
    299304    """ 
     305 
     306    outtype = "bytes" 
     307 
    300308    def __init__(self, name, bufsize=8192, *args, **kwargs): 
    301309        """ 
     
    331339    """ 
    332340 
     341    intype = "bytes" 
     342    outtype = "unicode" 
     343 
    333344    def __init__(self, input=None, encoding=None): 
    334345        """ 
     
    338349        self.encoding = encoding 
    339350 
    340     def _checkinput(self, data): 
     351    def _checkinput(self): 
    341352        if not isinstance(data, str): 
    342353            raise PipelineMismatchError(self, "bytes", data) 
     
    366377    """ 
    367378 
     379    intype = "unicode" 
     380    outtype = "bytes" 
     381 
    368382    def __init__(self, input=None, encoding=None): 
    369383        """ 
     
    400414    produces 8-bit strings. 
    401415    """ 
     416 
     417    intype = "bytes" 
     418    outtype = "bytes" 
    402419 
    403420    def __init__(self, input=None, fromencoding=None, toencoding=None): 
     
    483500    """ 
    484501 
    485     intype = "str" 
     502    intype = "bytes" 
    486503 
    487504    def __init__(self, input=None, encoding=None, xmldecl=False, doctype=False, loc=True, cdata=False, ns=False): 
     
    649666    """ 
    650667 
    651     intype = "str" 
     668    intype = "bytes" 
    652669    outtype = "events" 
    653670 
     
    740757         ('endtag', (u'a', 'http://www.w3.org/1999/xhtml'))] 
    741758    """ 
     759 
     760    intype = "events" 
     761    outtype = "nsevents" 
    742762 
    743763    def __init__(self, input=None, prefixes=None, **kwargs): 
     
    10481068    """ 
    10491069 
    1050     intype = "str" 
     1070    intype = "bytes" 
    10511071    outtype = "events" 
    10521072 
  • src/ll/xist/scripts/dtd2xsc.py

    r3933 r3941  
    152152    for entname in ents: 
    153153        if entname not in ("quot", "apos", "gt", "lt", "amp"): 
    154             ent = parsers.tree(dtd.resolve_ge(entname).value | parsers.Encoder("utf-8") | parsers.SGMLOP(encoding="utf-8") | parsers.Prefixes() | parsers.Instantiate()) 
     154            ent = parsers.tree(dtd.resolve_ge(entname).value | parsers.Encoder("utf-8") | parsers.SGMLOP(encoding="utf-8") | parsers.NS() | parsers.Instantiate()) 
    155155            ns.content.append(xnd.CharRef(entname, codepoint=ord(unicode(ent[0])[0]))) 
    156156