/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/util/elementtree/ElementTree.py

  • Committer: v.ladeuil+lp at free
  • Date: 2006-12-01 15:06:29 UTC
  • mto: (2172.3.1 bzr.73948)
  • mto: This revision was merged to the branch mainline in revision 2181.
  • Revision ID: v.ladeuil+lp@free.fr-20061201150629-zjd2an87u0r7nhhw
The tests that would have help avoid bug #73948 and all that mess :)

* bzrlib/transport/http/response.py:
(handle_response): Translate a 416 http error code into a bzr
exception.

* bzrlib/transport/http/_urllib2_wrappers.py:
(HTTPDefaultErrorHandler.http_error_default): Translate a 416 http
error code into a bzr exception.

* bzrlib/transport/http/_pycurl.py:
(PyCurlTransport._curl_perform): It could happen that pycrul
itself detect a short read.

* bzrlib/transport/http/__init__.py:
(HttpTransportBase._retry_get): New method, factorizing the retry
logic.
(HttpTransportBase.readv): We can have exception during the
initial GET worth degrading the range requirements (i.e. retrying
the GET request with either single or not ranges).

* bzrlib/tests/test_transport_implementations.py:
(TransportTests.test_readv_short_read): InvalidRange can also be
raised.

* bzrlib/tests/test_http.py:
(TestRangeRequestServer.test_readv_invalid_ranges): Was named
test_readv_short_read, the new name make the intent
clearer. Depending of the code path used (urllib or pycurl), both
exceptions can be raised.

* bzrlib/tests/HttpServer.py:
(TestingHTTPRequestHandler.do_GET): If invalid ranges are
specified, returns a 416 instead of the whole file (both are valid
according to the RFC).

Show diffs side-by-side

added added

removed removed

Lines of Context:
572
572
    # @defreturn Element
573
573
 
574
574
    def parse(self, source, parser=None):
575
 
        if not hasattr(source, "read"):
 
575
        if getattr(source, "read", None) is None:
576
576
            source = open(source, "rb")
577
577
        if not parser:
578
578
            parser = XMLTreeBuilder()
651
651
 
652
652
    def write(self, file, encoding="us-ascii"):
653
653
        assert self._root is not None
654
 
        if not hasattr(file, "write"):
 
654
        if getattr(file, "write", None) is None:
655
655
            file = open(file, "wb")
656
656
        if not encoding:
657
657
            encoding = "us-ascii"
723
723
def iselement(element):
724
724
    # FIXME: not sure about this; might be a better idea to look
725
725
    # for tag/attrib/text attributes
726
 
    return isinstance(element, _ElementInterface) or hasattr(element, "tag")
 
726
    return isinstance(element, _ElementInterface) or (getattr(element, "tag", None) is not None)
727
727
 
728
728
##
729
729
# Writes an element tree or element structure to sys.stdout.  This
871
871
class iterparse:
872
872
 
873
873
    def __init__(self, source, events=None):
874
 
        if not hasattr(source, "read"):
 
874
        if getattr(source, "read", None) is None:
875
875
            source = open(source, "rb")
876
876
        self._file = source
877
877
        self._events = []
1037
1037
 
1038
1038
    def close(self):
1039
1039
        assert len(self._elem) == 0, "missing end tags"
1040
 
        assert self._last != None, "missing toplevel element"
 
1040
        assert self._last is not None, "missing toplevel element"
1041
1041
        return self._last
1042
1042
 
1043
1043
    def _flush(self):