From 37a0c6e8985bee9dd47d3cdbcc857c4c9ecf0f7d Mon Sep 17 00:00:00 2001 From: JinWang An Date: Wed, 30 Dec 2020 10:17:06 +0900 Subject: [PATCH] Imported Upstream version 4.4.1 --- CHANGES.txt | 12 + MANIFEST.in | 2 +- PKG-INFO | 86 +- README.rst | 2 +- doc/html/FAQ.html | 4 +- doc/html/api.html | 4 +- doc/html/api/abc.ABCMeta-class.html | 2 +- doc/html/api/api-objects.txt | 2 +- doc/html/api/class-tree.html | 2 +- .../api/cssselect.parser.SelectorError-class.html | 2 +- ...cssselect.parser.SelectorSyntaxError-class.html | 2 +- .../api/cssselect.xpath.ExpressionError-class.html | 2 +- doc/html/api/cssselect.xpath.XPathExpr-class.html | 2 +- doc/html/api/deprecated-index.html | 2 +- doc/html/api/exceptions.AssertionError-class.html | 2 +- doc/html/api/help.html | 2 +- doc/html/api/identifier-index-A.html | 2 +- doc/html/api/identifier-index-B.html | 2 +- doc/html/api/identifier-index-C.html | 2 +- doc/html/api/identifier-index-D.html | 2 +- doc/html/api/identifier-index-E.html | 2 +- doc/html/api/identifier-index-F.html | 2 +- doc/html/api/identifier-index-G.html | 2 +- doc/html/api/identifier-index-H.html | 2 +- doc/html/api/identifier-index-I.html | 2 +- doc/html/api/identifier-index-J.html | 2 +- doc/html/api/identifier-index-K.html | 2 +- doc/html/api/identifier-index-L.html | 2 +- doc/html/api/identifier-index-M.html | 2 +- doc/html/api/identifier-index-N.html | 2 +- doc/html/api/identifier-index-O.html | 2 +- doc/html/api/identifier-index-P.html | 2 +- doc/html/api/identifier-index-Q.html | 2 +- doc/html/api/identifier-index-R.html | 2 +- doc/html/api/identifier-index-S.html | 2 +- doc/html/api/identifier-index-T.html | 2 +- doc/html/api/identifier-index-U.html | 2 +- doc/html/api/identifier-index-V.html | 2 +- doc/html/api/identifier-index-W.html | 2 +- doc/html/api/identifier-index-X.html | 2 +- doc/html/api/identifier-index-Y.html | 2 +- doc/html/api/identifier-index-Z.html | 2 +- doc/html/api/identifier-index-_.html | 2 +- doc/html/api/identifier-index.html | 2 +- doc/html/api/lxml-module.html | 2 +- doc/html/api/lxml-pysrc.html | 2 +- doc/html/api/lxml.ElementInclude-module.html | 2 +- doc/html/api/lxml.ElementInclude-pysrc.html | 2 +- ...xml.ElementInclude.FatalIncludeError-class.html | 2 +- ...Include.LimitedRecursiveIncludeError-class.html | 2 +- doc/html/api/lxml.builder-module.html | 10 +- doc/html/api/lxml.builder-pysrc.html | 2 +- doc/html/api/lxml.builder.ElementMaker-class.html | 2 +- doc/html/api/lxml.cssselect-module.html | 2 +- doc/html/api/lxml.cssselect-pysrc.html | 2 +- doc/html/api/lxml.cssselect.CSSSelector-class.html | 2 +- .../lxml.cssselect.LxmlHTMLTranslator-class.html | 2 +- .../api/lxml.cssselect.LxmlTranslator-class.html | 2 +- doc/html/api/lxml.doctestcompare-module.html | 2 +- doc/html/api/lxml.doctestcompare-pysrc.html | 2 +- ...ml.doctestcompare.LHTMLOutputChecker-class.html | 2 +- ...xml.doctestcompare.LXMLOutputChecker-class.html | 2 +- .../lxml.doctestcompare._RestoreChecker-class.html | 2 +- doc/html/api/lxml.etree-module.html | 22 +- .../api/lxml.etree.AncestorsIterator-class.html | 2 +- ...ree.AttributeBasedElementClassLookup-class.html | 2 +- doc/html/api/lxml.etree.C14NError-class.html | 2 +- .../api/lxml.etree.C14NWriterTarget-class.html | 2 +- doc/html/api/lxml.etree.CDATA-class.html | 2 +- doc/html/api/lxml.etree.CommentBase-class.html | 2 +- .../lxml.etree.CustomElementClassLookup-class.html | 2 +- doc/html/api/lxml.etree.DTD-class.html | 2 +- doc/html/api/lxml.etree.DTDError-class.html | 2 +- doc/html/api/lxml.etree.DTDParseError-class.html | 2 +- .../api/lxml.etree.DTDValidateError-class.html | 2 +- doc/html/api/lxml.etree.DocInfo-class.html | 2 +- doc/html/api/lxml.etree.DocumentInvalid-class.html | 2 +- .../api/lxml.etree.ETCompatXMLParser-class.html | 2 +- doc/html/api/lxml.etree.ETXPath-class.html | 2 +- doc/html/api/lxml.etree.ElementBase-class.html | 2 +- .../api/lxml.etree.ElementChildIterator-class.html | 2 +- .../api/lxml.etree.ElementClassLookup-class.html | 2 +- ...lxml.etree.ElementDefaultClassLookup-class.html | 2 +- ...lxml.etree.ElementDepthFirstIterator-class.html | 2 +- ...ml.etree.ElementNamespaceClassLookup-class.html | 2 +- .../api/lxml.etree.ElementTextIterator-class.html | 2 +- doc/html/api/lxml.etree.EntityBase-class.html | 2 +- doc/html/api/lxml.etree.Error-class.html | 2 +- doc/html/api/lxml.etree.ErrorDomains-class.html | 2 +- doc/html/api/lxml.etree.ErrorLevels-class.html | 2 +- doc/html/api/lxml.etree.ErrorTypes-class.html | 2 +- ...xml.etree.FallbackElementClassLookup-class.html | 2 +- doc/html/api/lxml.etree.HTMLParser-class.html | 2 +- doc/html/api/lxml.etree.HTMLPullParser-class.html | 2 +- doc/html/api/lxml.etree.LxmlError-class.html | 2 +- .../api/lxml.etree.LxmlRegistryError-class.html | 2 +- doc/html/api/lxml.etree.LxmlSyntaxError-class.html | 2 +- .../lxml.etree.NamespaceRegistryError-class.html | 2 +- doc/html/api/lxml.etree.PIBase-class.html | 2 +- doc/html/api/lxml.etree.ParseError-class.html | 2 +- ....etree.ParserBasedElementClassLookup-class.html | 2 +- doc/html/api/lxml.etree.ParserError-class.html | 2 +- doc/html/api/lxml.etree.PyErrorLog-class.html | 2 +- .../lxml.etree.PythonElementClassLookup-class.html | 2 +- doc/html/api/lxml.etree.QName-class.html | 2 +- doc/html/api/lxml.etree.RelaxNG-class.html | 2 +- doc/html/api/lxml.etree.RelaxNGError-class.html | 2 +- .../api/lxml.etree.RelaxNGErrorTypes-class.html | 2 +- .../api/lxml.etree.RelaxNGParseError-class.html | 2 +- .../api/lxml.etree.RelaxNGValidateError-class.html | 2 +- doc/html/api/lxml.etree.Resolver-class.html | 2 +- doc/html/api/lxml.etree.Schematron-class.html | 2 +- doc/html/api/lxml.etree.SchematronError-class.html | 2 +- .../api/lxml.etree.SchematronParseError-class.html | 2 +- .../lxml.etree.SchematronValidateError-class.html | 2 +- .../api/lxml.etree.SerialisationError-class.html | 2 +- .../api/lxml.etree.SiblingsIterator-class.html | 2 +- doc/html/api/lxml.etree.TreeBuilder-class.html | 2 +- doc/html/api/lxml.etree.XInclude-class.html | 2 +- doc/html/api/lxml.etree.XIncludeError-class.html | 2 +- doc/html/api/lxml.etree.XMLParser-class.html | 2 +- doc/html/api/lxml.etree.XMLPullParser-class.html | 2 +- doc/html/api/lxml.etree.XMLSchema-class.html | 2 +- doc/html/api/lxml.etree.XMLSchemaError-class.html | 2 +- .../api/lxml.etree.XMLSchemaParseError-class.html | 2 +- .../lxml.etree.XMLSchemaValidateError-class.html | 2 +- doc/html/api/lxml.etree.XMLSyntaxError-class.html | 2 +- doc/html/api/lxml.etree.XPath-class.html | 2 +- .../lxml.etree.XPathDocumentEvaluator-class.html | 2 +- .../lxml.etree.XPathElementEvaluator-class.html | 2 +- doc/html/api/lxml.etree.XPathError-class.html | 2 +- doc/html/api/lxml.etree.XPathEvalError-class.html | 2 +- .../api/lxml.etree.XPathFunctionError-class.html | 2 +- .../api/lxml.etree.XPathResultError-class.html | 2 +- .../api/lxml.etree.XPathSyntaxError-class.html | 2 +- doc/html/api/lxml.etree.XSLT-class.html | 2 +- .../api/lxml.etree.XSLTAccessControl-class.html | 2 +- doc/html/api/lxml.etree.XSLTApplyError-class.html | 2 +- doc/html/api/lxml.etree.XSLTError-class.html | 2 +- doc/html/api/lxml.etree.XSLTExtension-class.html | 2 +- .../api/lxml.etree.XSLTExtensionError-class.html | 2 +- doc/html/api/lxml.etree.XSLTParseError-class.html | 2 +- doc/html/api/lxml.etree.XSLTSaveError-class.html | 2 +- doc/html/api/lxml.etree._Attrib-class.html | 2 +- doc/html/api/lxml.etree._BaseErrorLog-class.html | 2 +- doc/html/api/lxml.etree._Comment-class.html | 2 +- doc/html/api/lxml.etree._Document-class.html | 2 +- doc/html/api/lxml.etree._DomainErrorLog-class.html | 2 +- doc/html/api/lxml.etree._Element-class.html | 2 +- .../api/lxml.etree._ElementIterator-class.html | 2 +- .../lxml.etree._ElementMatchIterator-class.html | 2 +- .../api/lxml.etree._ElementStringResult-class.html | 2 +- .../api/lxml.etree._ElementTagMatcher-class.html | 2 +- doc/html/api/lxml.etree._ElementTree-class.html | 2 +- .../lxml.etree._ElementUnicodeResult-class.html | 2 +- doc/html/api/lxml.etree._Entity-class.html | 2 +- doc/html/api/lxml.etree._ErrorLog-class.html | 2 +- doc/html/api/lxml.etree._FeedParser-class.html | 2 +- doc/html/api/lxml.etree._IDDict-class.html | 2 +- doc/html/api/lxml.etree._ListErrorLog-class.html | 2 +- doc/html/api/lxml.etree._LogEntry-class.html | 2 +- .../lxml.etree._ProcessingInstruction-class.html | 2 +- .../api/lxml.etree._RotatingErrorLog-class.html | 2 +- .../api/lxml.etree._SaxParserTarget-class.html | 2 +- .../api/lxml.etree._TargetParserResult-class.html | 2 +- doc/html/api/lxml.etree._Validator-class.html | 2 +- .../api/lxml.etree._XPathEvaluatorBase-class.html | 2 +- ...xml.etree._XSLTProcessingInstruction-class.html | 2 +- doc/html/api/lxml.etree._XSLTResultTree-class.html | 2 +- doc/html/api/lxml.etree.htmlfile-class.html | 2 +- doc/html/api/lxml.etree.iterparse-class.html | 2 +- doc/html/api/lxml.etree.iterwalk-class.html | 2 +- doc/html/api/lxml.etree.xmlfile-class.html | 2 +- doc/html/api/lxml.html-module.html | 2 +- doc/html/api/lxml.html-pysrc.html | 2 +- doc/html/api/lxml.html.CheckboxGroup-class.html | 2 +- doc/html/api/lxml.html.CheckboxValues-class.html | 2 +- doc/html/api/lxml.html.Classes-class.html | 2 +- doc/html/api/lxml.html.ElementSoup-module.html | 2 +- doc/html/api/lxml.html.ElementSoup-pysrc.html | 2 +- doc/html/api/lxml.html.FieldsDict-class.html | 2 +- doc/html/api/lxml.html.FormElement-class.html | 2 +- doc/html/api/lxml.html.HTMLParser-class.html | 2 +- doc/html/api/lxml.html.HtmlComment-class.html | 2 +- doc/html/api/lxml.html.HtmlElement-class.html | 2 +- .../lxml.html.HtmlElementClassLookup-class.html | 2 +- doc/html/api/lxml.html.HtmlEntity-class.html | 2 +- doc/html/api/lxml.html.HtmlMixin-class.html | 2 +- .../lxml.html.HtmlProcessingInstruction-class.html | 2 +- doc/html/api/lxml.html.InputElement-class.html | 2 +- doc/html/api/lxml.html.InputGetter-class.html | 2 +- doc/html/api/lxml.html.InputMixin-class.html | 2 +- doc/html/api/lxml.html.LabelElement-class.html | 2 +- .../api/lxml.html.MultipleSelectOptions-class.html | 2 +- doc/html/api/lxml.html.RadioGroup-class.html | 2 +- doc/html/api/lxml.html.SelectElement-class.html | 2 +- doc/html/api/lxml.html.TextareaElement-class.html | 2 +- doc/html/api/lxml.html.XHTMLParser-class.html | 2 +- doc/html/api/lxml.html._MethodFunc-class.html | 2 +- doc/html/api/lxml.html.builder-module.html | 2 +- doc/html/api/lxml.html.builder-pysrc.html | 2 +- doc/html/api/lxml.html.clean-module.html | 2 +- doc/html/api/lxml.html.clean-pysrc.html | 2 +- doc/html/api/lxml.html.clean.Cleaner-class.html | 2 +- doc/html/api/lxml.html.defs-module.html | 2 +- doc/html/api/lxml.html.defs-pysrc.html | 2 +- doc/html/api/lxml.html.diff-module.html | 2 +- doc/html/api/lxml.html.diff-pysrc.html | 2 +- doc/html/api/lxml.html.diff.DEL_END-class.html | 2 +- doc/html/api/lxml.html.diff.DEL_START-class.html | 2 +- ...html.diff.InsensitiveSequenceMatcher-class.html | 2 +- doc/html/api/lxml.html.diff.NoDeletes-class.html | 2 +- doc/html/api/lxml.html.diff.href_token-class.html | 2 +- doc/html/api/lxml.html.diff.tag_token-class.html | 2 +- doc/html/api/lxml.html.diff.token-class.html | 2 +- doc/html/api/lxml.html.formfill-module.html | 2 +- doc/html/api/lxml.html.formfill-pysrc.html | 2 +- ...ml.html.formfill.DefaultErrorCreator-class.html | 2 +- .../api/lxml.html.formfill.FormNotFound-class.html | 2 +- doc/html/api/lxml.html.html5parser-module.html | 2 +- doc/html/api/lxml.html.html5parser-pysrc.html | 2 +- .../lxml.html.html5parser.HTMLParser-class.html | 2 +- .../lxml.html.html5parser.XHTMLParser-class.html | 2 +- doc/html/api/lxml.html.soupparser-module.html | 2 +- doc/html/api/lxml.html.soupparser-pysrc.html | 2 +- .../api/lxml.html.soupparser._PseudoTag-class.html | 2 +- doc/html/api/lxml.html.usedoctest-module.html | 2 +- doc/html/api/lxml.html.usedoctest-pysrc.html | 2 +- doc/html/api/lxml.includes-module.html | 2 +- doc/html/api/lxml.includes-pysrc.html | 2 +- doc/html/api/lxml.isoschematron-module.html | 2 +- doc/html/api/lxml.isoschematron-pysrc.html | 2 +- .../api/lxml.isoschematron.Schematron-class.html | 2 +- doc/html/api/lxml.objectify-module.html | 4 +- doc/html/api/lxml.objectify.BoolElement-class.html | 2 +- .../api/lxml.objectify.ElementMaker-class.html | 2 +- .../api/lxml.objectify.FloatElement-class.html | 2 +- doc/html/api/lxml.objectify.IntElement-class.html | 2 +- doc/html/api/lxml.objectify.LongElement-class.html | 2 +- doc/html/api/lxml.objectify.NoneElement-class.html | 2 +- .../api/lxml.objectify.NumberElement-class.html | 2 +- doc/html/api/lxml.objectify.ObjectPath-class.html | 2 +- ...xml.objectify.ObjectifiedDataElement-class.html | 2 +- .../lxml.objectify.ObjectifiedElement-class.html | 2 +- ...bjectify.ObjectifyElementClassLookup-class.html | 2 +- doc/html/api/lxml.objectify.PyType-class.html | 2 +- .../api/lxml.objectify.StringElement-class.html | 2 +- doc/html/api/lxml.pyclasslookup-module.html | 2 +- doc/html/api/lxml.pyclasslookup-pysrc.html | 2 +- doc/html/api/lxml.sax-module.html | 10 +- doc/html/api/lxml.sax-pysrc.html | 2 +- .../lxml.sax.ElementTreeContentHandler-class.html | 2 +- .../api/lxml.sax.ElementTreeProducer-class.html | 2 +- doc/html/api/lxml.sax.SaxError-class.html | 2 +- doc/html/api/lxml.tests-module.html | 2 +- doc/html/api/lxml.tests-pysrc.html | 2 +- doc/html/api/lxml.tests.common_imports-module.html | 2 +- doc/html/api/lxml.tests.common_imports-pysrc.html | 2 +- ....tests.common_imports.HelperTestCase-class.html | 2 +- ...l.tests.common_imports.LargeFileLike-class.html | 2 +- ....common_imports.LargeFileLikeUnicode-class.html | 2 +- ...l.tests.common_imports.SillyFileLike-class.html | 2 +- .../lxml.tests.common_imports.skipif-class.html | 2 +- .../api/lxml.tests.dummy_http_server-module.html | 2 +- .../api/lxml.tests.dummy_http_server-pysrc.html | 2 +- ...mmy_http_server.HTTPRequestCollector-class.html | 2 +- ...ml.tests.dummy_http_server.WebServer-class.html | 2 +- ...ts.dummy_http_server._RequestHandler-class.html | 2 +- doc/html/api/lxml.tests.selftest-module.html | 2 +- doc/html/api/lxml.tests.selftest-pysrc.html | 2 +- doc/html/api/lxml.tests.selftest2-module.html | 2 +- doc/html/api/lxml.tests.selftest2-pysrc.html | 2 +- doc/html/api/lxml.tests.test_builder-module.html | 2 +- doc/html/api/lxml.tests.test_builder-pysrc.html | 2 +- ...l.tests.test_builder.BuilderTestCase-class.html | 2 +- .../api/lxml.tests.test_classlookup-module.html | 2 +- .../api/lxml.tests.test_classlookup-pysrc.html | 2 +- ...test_classlookup.ClassLookupTestCase-class.html | 2 +- ...tests.test_classlookup.ProxyTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_css-module.html | 2 +- doc/html/api/lxml.tests.test_css-pysrc.html | 2 +- .../api/lxml.tests.test_css.CSSTestCase-class.html | 2 +- .../api/lxml.tests.test_doctestcompare-module.html | 2 +- .../api/lxml.tests.test_doctestcompare-pysrc.html | 2 +- ...st_doctestcompare.DoctestCompareTest-class.html | 2 +- ...tests.test_doctestcompare.DummyInput-class.html | 2 +- doc/html/api/lxml.tests.test_dtd-module.html | 2 +- doc/html/api/lxml.tests.test_dtd-pysrc.html | 2 +- ...lxml.tests.test_dtd.ETreeDtdTestCase-class.html | 2 +- .../api/lxml.tests.test_elementpath-module.html | 2 +- .../api/lxml.tests.test_elementpath-pysrc.html | 2 +- ...elementpath.EtreeElementPathTestCase-class.html | 2 +- .../api/lxml.tests.test_elementtree-module.html | 2 +- .../api/lxml.tests.test_elementtree-pysrc.html | 2 +- ...ttree.CElementTreeElementSlicingTest-class.html | 2 +- ...est_elementtree.CElementTreeTestCase-class.html | 2 +- ...t_elementtree.ETreeC14N2TostringTest-class.html | 2 +- ...test_elementtree.ETreeC14N2WriteTest-class.html | 2 +- ...tests.test_elementtree.ETreeC14NTest-class.html | 2 +- ..._elementtree.ETreeElementSlicingTest-class.html | 2 +- ...s.test_elementtree.ETreePullTestCase-class.html | 2 +- ...tests.test_elementtree.ETreeTestCase-class.html | 2 +- ...nttree.ElementTreeElementSlicingTest-class.html | 2 +- ...test_elementtree.ElementTreeTestCase-class.html | 2 +- ...xml.tests.test_elementtree._C14NTest-class.html | 2 +- ....test_elementtree._ETreeTestCaseBase-class.html | 2 +- ...test_elementtree._ElementSlicingTest-class.html | 2 +- ....test_elementtree._XMLPullParserTest-class.html | 2 +- doc/html/api/lxml.tests.test_errors-module.html | 2 +- doc/html/api/lxml.tests.test_errors-pysrc.html | 2 +- ...lxml.tests.test_errors.ErrorTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_etree-module.html | 2 +- doc/html/api/lxml.tests.test_etree-pysrc.html | 13940 +++++++++---------- ...l.tests.test_etree.ETreeC14NTestCase-class.html | 2 +- ...l.tests.test_etree.ETreeErrorLogTest-class.html | 2 +- ...l.tests.test_etree.ETreeOnlyTestCase-class.html | 2 +- ....tests.test_etree.ETreeWriteTestCase-class.html | 2 +- ...sts.test_etree.ETreeXIncludeTestCase-class.html | 2 +- ...ts.test_etree.ElementIncludeTestCase-class.html | 2 +- ...l.tests.test_etree.XMLPullParserTest-class.html | 2 +- ...l.tests.test_etree._XIncludeTestCase-class.html | 2 +- .../lxml.tests.test_external_document-module.html | 2 +- .../lxml.tests.test_external_document-pysrc.html | 2 +- ...al_document.ExternalDocumentTestCase-class.html | 2 +- .../api/lxml.tests.test_htmlparser-module.html | 2 +- doc/html/api/lxml.tests.test_htmlparser-pysrc.html | 2 +- ...s.test_htmlparser.HtmlParserTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_http_io-module.html | 2 +- doc/html/api/lxml.tests.test_http_io-pysrc.html | 2 +- ...ml.tests.test_http_io.HttpIOTestCase-class.html | 2 +- ...lxml.tests.test_incremental_xmlfile-module.html | 2 +- .../lxml.tests.test_incremental_xmlfile-pysrc.html | 2 +- ...emental_xmlfile.AsyncXmlFileTestCase-class.html | 2 +- ...ental_xmlfile.BytesIOXmlFileTestCase-class.html | 2 +- ...incremental_xmlfile.HtmlFileTestCase-class.html | 2 +- ...mlfile.SimpleFileLikeXmlFileTestCase-class.html | 2 +- ...leLikeXmlFileTestCase.SimpleFileLike-class.html | 2 +- ...ntal_xmlfile.TempPathXmlFileTestCase-class.html | 2 +- ...remental_xmlfile.TempXmlFileTestCase-class.html | 2 +- ...emental_xmlfile._XmlFileTestCaseBase-class.html | 2 +- doc/html/api/lxml.tests.test_io-module.html | 2 +- doc/html/api/lxml.tests.test_io-pysrc.html | 2 +- .../lxml.tests.test_io.ETreeIOTestCase-class.html | 2 +- ....tests.test_io.ElementTreeIOTestCase-class.html | 2 +- .../lxml.tests.test_io._IOTestCaseBase-class.html | 2 +- .../api/lxml.tests.test_isoschematron-module.html | 2 +- .../api/lxml.tests.test_isoschematron-pysrc.html | 2 +- ...chematron.ETreeISOSchematronTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_nsclasses-module.html | 2 +- doc/html/api/lxml.tests.test_nsclasses-pysrc.html | 2 +- ...lasses.ETreeNamespaceClassesTestCase-class.html | 2 +- ...NamespaceClassesTestCase.bluff_class-class.html | 2 +- ...mespaceClassesTestCase.default_class-class.html | 2 +- ...eNamespaceClassesTestCase.maeh_class-class.html | 2 +- doc/html/api/lxml.tests.test_objectify-module.html | 48 +- doc/html/api/lxml.tests.test_objectify-pysrc.html | 2 +- ...sts.test_objectify.ObjectifyTestCase-class.html | 2 +- .../api/lxml.tests.test_pyclasslookup-module.html | 2 +- .../api/lxml.tests.test_pyclasslookup-pysrc.html | 2 +- ..._pyclasslookup.PyClassLookupTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_relaxng-module.html | 2 +- doc/html/api/lxml.tests.test_relaxng-pysrc.html | 2 +- ...ts.test_relaxng.ETreeRelaxNGTestCase-class.html | 2 +- ....test_relaxng.RelaxNGCompactTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_sax-module.html | 2 +- doc/html/api/lxml.tests.test_sax-pysrc.html | 2 +- ...lxml.tests.test_sax.ETreeSaxTestCase-class.html | 2 +- ...l.tests.test_sax.NSPrefixSaxTestCase-class.html | 2 +- ....tests.test_sax.SimpleContentHandler-class.html | 2 +- .../api/lxml.tests.test_schematron-module.html | 2 +- doc/html/api/lxml.tests.test_schematron-pysrc.html | 2 +- ...t_schematron.ETreeSchematronTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_threading-module.html | 2 +- doc/html/api/lxml.tests.test_threading-pysrc.html | 2 +- ...est_threading.ThreadPipelineTestCase-class.html | 2 +- ...ipelineTestCase.ParseAndExtendWorker-class.html | 6 +- ...ipelineTestCase.ParseAndInjectWorker-class.html | 6 +- ...g.ThreadPipelineTestCase.ParseWorker-class.html | 6 +- ...ThreadPipelineTestCase.ReverseWorker-class.html | 2 +- ....ThreadPipelineTestCase.RotateWorker-class.html | 2 +- ...readPipelineTestCase.SerialiseWorker-class.html | 2 +- ...ding.ThreadPipelineTestCase.Validate-class.html | 2 +- ...eading.ThreadPipelineTestCase.Worker-class.html | 2 +- ...sts.test_threading.ThreadingTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_unicode-module.html | 2 +- doc/html/api/lxml.tests.test_unicode-pysrc.html | 2 +- ...tests.test_unicode.EncodingsTestCase-class.html | 2 +- ...l.tests.test_unicode.UnicodeTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_xmlschema-module.html | 2 +- doc/html/api/lxml.tests.test_xmlschema-pysrc.html | 2 +- ...hema.ETreeXMLSchemaResolversTestCase-class.html | 2 +- ...emaResolversTestCase.simple_resolver-class.html | 2 +- ...est_xmlschema.ETreeXMLSchemaTestCase-class.html | 2 +- .../api/lxml.tests.test_xpathevaluator-module.html | 2 +- .../api/lxml.tests.test_xpathevaluator-pysrc.html | 2 +- ...hevaluator.ETreeETXPathClassTestCase-class.html | 2 +- ...athevaluator.ETreeXPathClassTestCase-class.html | 2 +- ...athevaluator.ETreeXPathExsltTestCase-class.html | 2 +- ...st_xpathevaluator.ETreeXPathTestCase-class.html | 2 +- doc/html/api/lxml.tests.test_xslt-module.html | 2 +- doc/html/api/lxml.tests.test_xslt-pysrc.html | 2 +- ...l.tests.test_xslt.ETreeEXSLTTestCase-class.html | 2 +- ...est_xslt.ETreeXSLTExtElementTestCase-class.html | 2 +- ...s.test_xslt.ETreeXSLTExtFuncTestCase-class.html | 2 +- ...ml.tests.test_xslt.ETreeXSLTTestCase-class.html | 2 +- ...lxml.tests.test_xslt.Py3XSLTTestCase-class.html | 2 +- doc/html/api/lxml.usedoctest-module.html | 2 +- doc/html/api/lxml.usedoctest-pysrc.html | 2 +- doc/html/api/mimetools.Message-class.html | 2 +- doc/html/api/module-tree.html | 2 +- doc/html/api/str-class.html | 2 +- doc/html/api/xml.etree.ElementTree-module.html | 2 +- doc/html/api/xml.etree.ElementTree-pysrc.html | 2 +- .../api/xml.etree.ElementTree.Element-class.html | 2 +- .../xml.etree.ElementTree.ElementTree-class.html | 2 +- .../xml.etree.ElementTree.ParseError-class.html | 2 +- .../api/xml.etree.ElementTree.QName-class.html | 2 +- .../xml.etree.ElementTree.TreeBuilder-class.html | 2 +- .../api/xml.etree.ElementTree.XMLParser-class.html | 2 +- ...etree.ElementTree._IterParseIterator-class.html | 2 +- ...etree.ElementTree._SimpleElementPath-class.html | 2 +- doc/html/build.html | 4 +- doc/html/capi.html | 4 +- .../{changes-4.4.0.html => changes-4.4.1.html} | 807 +- doc/html/compatibility.html | 4 +- doc/html/credits.html | 4 +- doc/html/cssselect.html | 4 +- doc/html/element_classes.html | 4 +- doc/html/elementsoup.html | 4 +- doc/html/extensions.html | 4 +- doc/html/html5parser.html | 4 +- doc/html/index.html | 13 +- doc/html/installation.html | 4 +- doc/html/intro.html | 4 +- doc/html/lxml-source-howto.html | 4 +- doc/html/lxmlhtml.html | 4 +- doc/html/objectify.html | 4 +- doc/html/parsing.html | 4 +- doc/html/performance.html | 4 +- doc/html/resolvers.html | 4 +- doc/html/sax.html | 4 +- doc/html/sitemap.html | 2 +- doc/html/tutorial.html | 4 +- doc/html/validation.html | 4 +- doc/html/xpathxslt.html | 4 +- doc/main.txt | 10 +- setup.py | 5 +- src/lxml.egg-info/PKG-INFO | 86 +- src/lxml.egg-info/SOURCES.txt | 3 +- src/lxml/apihelpers.pxi | 15 +- src/lxml/etree.c | 3687 +++-- src/lxml/html/_diffcommand.py | 10 +- src/lxml/includes/lxml-version.h | 2 +- src/lxml/tests/c14n-20/world.txt | 1 + src/lxml/tests/test_etree.py | 41 +- version.txt | 2 +- 456 files changed, 9778 insertions(+), 9964 deletions(-) rename doc/html/{changes-4.4.0.html => changes-4.4.1.html} (99%) create mode 100644 src/lxml/tests/c14n-20/world.txt diff --git a/CHANGES.txt b/CHANGES.txt index 5231f99..dc9f33a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,18 @@ lxml changelog ============== +4.4.1 (2019-08-11) +================== + +Bugs fixed +---------- + +* LP#1838252: The order of an OrderedDict was lost in 4.4.0 when passing it as + attrib mapping during element creation. + +* LP#1838521: The package metadata now lists the supported Python versions. + + 4.4.0 (2019-07-27) ================== diff --git a/MANIFEST.in b/MANIFEST.in index 73db322..529fa04 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -9,7 +9,7 @@ include src/lxml/*.c src/lxml/html/*.c recursive-include src *.pyx *.pxd *.pxi *.py recursive-include src/lxml lxml.etree.h lxml.etree_api.h etree.h etree_api.h etree_defs.h lxml_endian.h recursive-include src/lxml/isoschematron *.rng *.xsl *.txt -recursive-include src/lxml/tests *.rng *.rnc *.xslt *.xml *.dtd *.xsd *.sch *.html +recursive-include src/lxml/tests *.rng *.rnc *.xslt *.xml *.dtd *.xsd *.sch *.html *.txt recursive-include src/lxml/html/tests *.data *.txt recursive-include samples *.xml recursive-include benchmark *.py diff --git a/PKG-INFO b/PKG-INFO index 3c28354..32ab494 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: lxml -Version: 4.4.0 +Version: 4.4.1 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. Home-page: http://lxml.de/ Author: lxml dev team @@ -38,90 +38,16 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr as soon as a maintenance branch has been established. Note that this requires Cython to be installed at an appropriate version for the build. - 4.4.0 (2019-07-27) + 4.4.1 (2019-08-11) ================== - Features added - -------------- - - * ``Element.clear()`` accepts a new keyword argument ``keep_tail=True`` to - clear everything but the tail text. This is helpful in some document-style - use cases. - - * When creating attributes or namespaces from a dict in Python 3.6+, lxml now - preserves the original insertion order of that dict, instead of always sorting - the items by name. A similar change was made for ElementTree in CPython 3.8. - See https://bugs.python.org/issue34160 - - * Integer elements in ``lxml.objectify`` implement the ``__index__()`` special method. - - * GH#269: Read-only elements in XSLT were missing the ``nsmap`` property. - Original patch by Jan Pazdziora. - - * ElementInclude can now restrict the maximum inclusion depth via a ``max_depth`` - argument to prevent content explosion. It is limited to 6 by default. - - * The ``target`` object of the XMLParser can have ``start_ns()`` and ``end_ns()`` - callback methods to listen to namespace declarations. - - * The ``TreeBuilder`` has new arguments ``comment_factory`` and ``pi_factory`` to - pass factories for creating comments and processing instructions, as well as - flag arguments ``insert_comments`` and ``insert_pis`` to discard them from the - tree when set to false. - - * A `C14N 2.0 `_ implementation was added as - ``etree.canonicalize()``, a corresponding ``C14NWriterTarget`` class, and - a ``c14n2`` serialisation method. - Bugs fixed ---------- - * When writing to file paths that contain the URL escape character '%', the file - path could wrongly be mangled by URL unescaping and thus write to a different - file or directory. Code that writes to file paths that are provided by untrusted - sources, but that must work with previous versions of lxml, should best either - reject paths that contain '%' characters, or otherwise make sure that the path - does not contain maliciously injected '%XX' URL hex escapes for paths like '../'. - - * Assigning to Element child slices with negative step could insert the slice at - the wrong position, starting too far on the left. - - * Assigning to Element child slices with overly large step size could take very - long, regardless of the length of the actual slice. - - * Assigning to Element child slices of the wrong size could sometimes fail to - raise a ValueError (like a list assignment would) and instead assign outside - of the original slice bounds or leave parts of it unreplaced. - - * The ``comment`` and ``pi`` events in ``iterwalk()`` were never triggered, and - instead, comments and processing instructions in the tree were reported as - ``start`` elements. Also, when walking an ElementTree (as opposed to its root - element), comments and PIs outside of the root element are now reported. - - * LP#1827833: The RelaxNG compact syntax support was broken with recent versions - of ``rnc2rng``. - - * LP#1758553: The HTML elements ``source`` and ``track`` were added to the list - of empty tags in ``lxml.html.defs``. - - * Registering a prefix other than "xml" for the XML namespace is now rejected. - - * Failing to write XSLT output to a file could raise a misleading exception. - It now raises ``IOError``. - - Other changes - ------------- - - * Support for Python 3.4 was removed. - - * When using ``Element.find*()`` with prefix-namespace mappings, the empty string - is now accepted to define a default namespace, in addition to the previously - supported ``None`` prefix. Empty strings are more convenient since they keep - all prefix keys in a namespace dict strings, which simplifies sorting etc. + * LP#1838252: The order of an OrderedDict was lost in 4.4.0 when passing it as + attrib mapping during element creation. - * The ``ElementTree.write_c14n()`` method has been deprecated in favour of the - long preferred ``ElementTree.write(f, method="c14n")``. It will be removed - in a future release. + * LP#1838521: The package metadata now lists the supported Python versions. @@ -134,7 +60,6 @@ Classifier: Programming Language :: Cython Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 @@ -143,6 +68,7 @@ Classifier: Operating System :: OS Independent Classifier: Topic :: Text Processing :: Markup :: HTML Classifier: Topic :: Text Processing :: Markup :: XML Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.* Provides-Extra: cssselect Provides-Extra: html5 Provides-Extra: htmlsoup diff --git a/README.rst b/README.rst index 9cb4a7d..2761c7c 100644 --- a/README.rst +++ b/README.rst @@ -45,7 +45,7 @@ fast Python XML processing. :height: 47 :alt: Donate to the lxml project -.. _`doc/main.txt`: http://lxml.de/ +.. _`doc/main.txt`: https://github.com/lxml/lxml/blob/master/doc/main.txt .. _`INSTALL.txt`: http://lxml.de/installation.html `Travis-CI `_ and `AppVeyor `_ diff --git a/doc/html/FAQ.html b/doc/html/FAQ.html index 2a93cec..b08d79e 100644 --- a/doc/html/FAQ.html +++ b/doc/html/FAQ.html @@ -26,7 +26,7 @@ function hide_menu() {
-

lxml FAQ - Frequently Asked Questions

+

lxml FAQ - Frequently Asked Questions

Frequently asked questions on lxml. See also the notes on compatibility to ElementTree.

@@ -1021,7 +1021,7 @@ map it to your namespace. See also the question above.

diff --git a/doc/html/api.html b/doc/html/api.html index 3217686..6e2ef37 100644 --- a/doc/html/api.html +++ b/doc/html/api.html @@ -24,7 +24,7 @@ function hide_menu() {
-

APIs specific to lxml.etree

+

APIs specific to lxml.etree

lxml.etree tries to follow established APIs wherever possible. Sometimes, however, the need to expose a feature in an easy way led to the invention of a @@ -540,7 +540,7 @@ resolvers, you have to stick to the external Python module.

diff --git a/doc/html/api/abc.ABCMeta-class.html b/doc/html/api/abc.ABCMeta-class.html index e7b3014..9504185 100644 --- a/doc/html/api/abc.ABCMeta-class.html +++ b/doc/html/api/abc.ABCMeta-class.html @@ -427,7 +427,7 @@ even via super()).

Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 E Element factory for generating XML d   - __pyx_capi__ = {'ET': <capsule object "PyObject *" at 0x7f32d9... + __pyx_capi__ = {'ET': <capsule object "PyObject *" at 0x7f1f37... @@ -249,8 +249,8 @@ The E Element factory for generating XML d
Value:
-{'ET': <capsule object "PyObject *" at 0x7f32d9a99d20>,
- 'partial': <capsule object "PyObject *" at 0x7f32d9a99d50>}
+{'ET': <capsule object "PyObject *" at 0x7f1f379755d0>,
+ 'partial': <capsule object "PyObject *" at 0x7f1f37975600>}
 
@@ -289,7 +289,7 @@ The E Element factory for generating XML d Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 namespace to the Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 CSSSelector Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 namespaces keyword argument:

Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019
Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 want and got. Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 lxml.etree module implements the exten

Version: - 4.4.0 + 4.4.1

@@ -1752,7 +1752,7 @@ standard Python logging package.   - LXML_VERSION = (4, 4, 0, 0) + LXML_VERSION = (4, 4, 1, 0) @@ -1768,13 +1768,13 @@ standard Python logging package.   __pyx_capi__ = {'adoptExternalDocument': <capsule object "stru... @@ -2562,13 +2562,13 @@ function will only set the global error log of the current thread.

Value:
 {'adoptExternalDocument': <capsule object "struct LxmlElementTree *(xm\
-lDoc *, PyObject *, int)" at 0x7f32dddb9030>,
+lDoc *, PyObject *, int)" at 0x7f1f3c2f5210>,
  'appendChild': <capsule object "void (struct LxmlElement *, struct Lx\
-mlElement *)" at 0x7f32dddb9810>,
+mlElement *)" at 0x7f1f3c2f59f0>,
  'appendChildToElement': <capsule object "int (struct LxmlElement *, s\
-truct LxmlElement *)" at 0x7f32dddb9840>,
+truct LxmlElement *)" at 0x7f1f3c2f5a20>,
  'attributeValue': <capsule object "PyObject *(xmlNode *, xmlAttr *)" \
-at 0x7f32dddb94e0>,
+at 0x7f1f3c2f56c0>,
 ...
 
@@ -2634,7 +2634,7 @@ at 0x7f32dddb94e0>, Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 smart_strings=False.

Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019
Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 base_url.

Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019
Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 base_url.

Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019
Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Element.attrib p Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 error_log property Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 <xsl:output> Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 'GET' Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 form.set('novalidate') Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 <option> elemen Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 .value Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 -z0-9%&\?;=~ Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 lxml.etree.

Version: - 4.4.0 + 4.4.1

@@ -1137,7 +1137,7 @@ elements. Pass 'string', for example, to make string values the default.

Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019   - __pyx_capi__ = {'_getNsTag': <capsule object "PyObject *(PyObj... + __pyx_capi__ = {'_getNsTag': <capsule object "PyObject *(PyObj... @@ -282,8 +282,8 @@ b0>}">{'
Value:
-{'_getNsTag': <capsule object "PyObject *(PyObject *)" at 0x7f32d9188a\
-b0>}
+{'_getNsTag': <capsule object "PyObject *(PyObject *)" at 0x7f1f376363\
+60>}
 
@@ -322,7 +322,7 @@ b0>} Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 Generated by Epydoc 3.0.1 - on Sat Jul 27 12:35:58 2019 + on Sun Aug 11 08:28:51 2019 9 10 from __future__ import absolute_import 11 - 12 import os. 12 from collections import OrderedDict + 13 import os.path - 13 import unittest - 14 import 14 import unittest + 15 import copy - 15 import sys - 16 import re - 17 import gc - 18 import operator - 19 import tempfile + 16 import sys + 17 import re + 18 import gc + 19 import operator 20 import textwrap 21 import zlib 22 import gzip @@ -1185,10 +1185,10 @@ xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink( lxml.etree._Element.keys lxml.etree._IDDict.keys lxml.html.FieldsDict.keys -lxml.html.InputGetter.keys" class="py-name" href="#" onclick="return doclink('link-302', 'keys', 'link-302');">keys = ["attr%d" % i for i in range(10)] +lxml.html.InputGetter.keys" class="py-name" href="#" onclick="return doclink('link-302', 'keys', 'link-302');">keys = ["attr%d" % i for i in range(12, 4, -1)] 290 values = ["TEST-%d" % i for i in range(10)] +lxml.etree._IDDict.values" class="py-name" href="#" onclick="return doclink('link-303', 'values', 'link-303');">values = ["TEST-%d" % i for i in range(12, 4, -1)] 291 items = list(zip(values()) 298 - 299 root2 = 299 attr_order = [ + 300 ('attr_99', 'TOAST-1'), + 301 ('attr_98', 'TOAST-2'), + 302 ] + 303 ordered_dict_types = [OrderedDict, lambda x:x] + 304 if sys.version_info >= (3, 6): + 305 ordered_dict_types.append(dict) + 306 else: + 307 # Keyword arguments are not ordered in Py<3.6, and thus get sorted. + 308 attr_order.sort() + 309 attr_order += items + 310 expected_keys = [attr[0] for attr in attr_order] + 311 expected_values = [attr[1] for attr in attr_order] + 312 expected_items = list(zip(expected_keys, expected_values)) + 313 + 314 for dict_type in ordered_dict_types: + 315 root2 = Element("root2", root.Element("root2", dict_type(root.attrib, - 300 attr_99='TOAST-1', attr_98='TOAST-2') - 301 - 302 if sys.version_info >= (3, 6): - 303 self.assertEqual(['attr_99', 'attr_98'] + keys, - 304 root2.attrib), + 316 attr_99='TOAST-1', attr_98='TOAST-2') + 317 + 318 try: + 319 self.assertSequenceEqual(expected_keys, root2.attrib.attrib.keys()) - 305 self.assertEqual(['TOAST-1', 'TOAST-2'] + values, - 306 root2.keys()) + 320 self.assertSequenceEqual(expected_values, root2.attrib.values()) - 307 else: - 308 self.assertEqual(['attr_98', 'attr_99'] + keys, - 309 root2. 321 self.assertSequenceEqual(expected_items, root2.attrib.keys()) - 310 self.assertEqual(['TOAST-2', 'TOAST-1'] + values, - 311 root2.attrib.values()) - 312 - 313 self.assertEqual(attrib.items()) + 322 except AssertionError as exc: + 323 exc.args = ("Order of '%s': %s" % (dict_type.__name__, exc.args[0]),) + exc.args[1:] + 324 raise + 325 + 326 self.assertEqual(keys, root.keys, root.attrib.attrib.keys()) - 314 self.assertEqual(keys()) + 327 self.assertEqual(values, root.values, root.attrib.attrib.values()) - 315 -
316 - def test_attribute_set_invalid(self): -
317 # ElementTree accepts arbitrary attribute values - 318 # lxml.etree allows only strings, or None for (html5) boolean attributes - 319 values()) +
328 +
329 - def test_attribute_set_invalid(self): +
330 # ElementTree accepts arbitrary attribute values + 331 # lxml.etree allows only strings, or None for (html5) boolean attributes + 332 Element = self.Element = self.etree.etree.Element - 320 root = Element + 333 root = Element("root") - 321 self.assertRaises(TypeError, root.Element("root") + 334 self.assertRaises(TypeError, root.set, "newattr", 5) - 322 self.assertRaises(TypeError, root.set, "newattr", 5) + 335 self.assertRaises(TypeError, root.set, "newattr", object) - 323 self.assertRaises(TypeError, root.set, "newattr", object) + 336 self.assertRaises(TypeError, root.set, "newattr", None) - 324 self.assertRaises(TypeError, root.set, "newattr", None) + 337 self.assertRaises(TypeError, root.set, "newattr") -
325 -
326 - def test_strip_attributes(self): -
327 set, "newattr") +
338 +
339 - def test_strip_attributes(self): +
340 XML = self.XML = self.etree.etree.XML - 328 xml = _bytes('<test a="5" b="10" c="20"><x a="4" b="2"/></test>') - 329 - 330 root = XML + 341 xml = _bytes('<test a="5" b="10" c="20"><x a="4" b="2"/></test>') + 342 + 343 root = XML(xml) - 331 self.XML(xml) + 344 self.etree.strip_attributes(root, 'a') - 332 self.assertEqual(_bytes('<test b="10" c="20"><x b="2"></x></test>'), - 333 self._writeElement(root)) - 334 - 335 root = etree.strip_attributes(root, 'a') + 345 self.assertEqual(_bytes('<test b="10" c="20"><x b="2"></x></test>'), + 346 self._writeElement(root)) + 347 + 348 root = XML(xml) - 336 self.XML(xml) + 349 self.etree.strip_attributes(root, 'b', 'c') - 337 self.assertEqual(_bytes('<test a="5"><x a="4"></x></test>'), - 338 self._writeElement(root)) -
339 -
340 - def test_strip_attributes_ns(self): -
341 etree.strip_attributes(root, 'b', 'c') + 350 self.assertEqual(_bytes('<test a="5"><x a="4"></x></test>'), + 351 self._writeElement(root)) +
352 +
353 - def test_strip_attributes_ns(self): +
354 XML = self.XML = self.etree.etree.XML - 342 xml = _bytes('<test xmlns:n="http://test/ns" a="6" b="10" c="20" n:a="5"><x a="4" n:b="2"/></test>') - 343 - 344 root = XML + 355 xml = _bytes('<test xmlns:n="http://test/ns" a="6" b="10" c="20" n:a="5"><x a="4" n:b="2"/></test>') + 356 + 357 root = XML(xml) - 345 self.XML(xml) + 358 self.etree.strip_attributes(root, 'a') - 346 self.assertEqual( - 347 _bytes('<test xmlns:n="http://test/ns" b="10" c="20" n:a="5"><x n:b="2"></x></test>'), - 348 self._writeElement(root)) - 349 - 350 root = etree.strip_attributes(root, 'a') + 359 self.assertEqual( + 360 _bytes('<test xmlns:n="http://test/ns" b="10" c="20" n:a="5"><x n:b="2"></x></test>'), + 361 self._writeElement(root)) + 362 + 363 root = XML(xml) - 351 self.XML(xml) + 364 self.etree.strip_attributes(root, '{http://test/ns}a', 'c') - 352 self.assertEqual( - 353 _bytes('<test xmlns:n="http://test/ns" a="6" b="10"><x a="4" n:b="2"></x></test>'), - 354 self._writeElement(root)) - 355 - 356 root = etree.strip_attributes(root, '{http://test/ns}a', 'c') + 365 self.assertEqual( + 366 _bytes('<test xmlns:n="http://test/ns" a="6" b="10"><x a="4" n:b="2"></x></test>'), + 367 self._writeElement(root)) + 368 + 369 root = XML(xml) - 357 self.XML(xml) + 370 self.etree.strip_attributes(root, '{http://test/ns}*') - 358 self.assertEqual( - 359 _bytes('<test xmlns:n="http://test/ns" a="6" b="10" c="20"><x a="4"></x></test>'), - 360 self._writeElement(root)) -
361 -
362 - def test_strip_elements(self): -
363 etree.strip_attributes(root, '{http://test/ns}*') + 371 self.assertEqual( + 372 _bytes('<test xmlns:n="http://test/ns" a="6" b="10" c="20"><x a="4"></x></test>'), + 373 self._writeElement(root)) +
374 +
375 - def test_strip_elements(self): +
376 XML = self.XML = self.etree.etree.XML - 364 xml = _bytes('<test><a><b><c/></b></a><x><a><b/><c/></a></x></test>') - 365 - 366 root = XML + 377 xml = _bytes('<test><a><b><c/></b></a><x><a><b/><c/></a></x></test>') + 378 + 379 root = XML(xml) - 367 self.XML(xml) + 380 self.etree.strip_elements(root, 'a') - 368 self.assertEqual(_bytes('<test><x></x></test>'), - 369 self._writeElement(root)) - 370 - 371 root = etree.strip_elements(root, 'a') + 381 self.assertEqual(_bytes('<test><x></x></test>'), + 382 self._writeElement(root)) + 383 + 384 root = XML(xml) - 372 self.XML(xml) + 385 self.etree.strip_elements(root, 'b', 'c', 'X', 'Y', 'Z') - 373 self.assertEqual(_bytes('<test><a></a><x><a></a></x></test>'), - 374 self._writeElement(root)) - 375 - 376 root = etree.strip_elements(root, 'b', 'c', 'X', 'Y', 'Z') + 386 self.assertEqual(_bytes('<test><a></a><x><a></a></x></test>'), + 387 self._writeElement(root)) + 388 + 389 root = XML(xml) - 377 self.XML(xml) + 390 self.etree.strip_elements(root, 'c') - 378 self.assertEqual(_bytes('<test><a><b></b></a><x><a><b></b></a></x></test>'), - 379 self._writeElement(root)) -
380 -
381 - def test_strip_elements_ns(self): -
382 etree.strip_elements(root, 'c') + 391 self.assertEqual(_bytes('<test><a><b></b></a><x><a><b></b></a></x></test>'), + 392 self._writeElement(root)) +
393 +
394 - def test_strip_elements_ns(self): +
395 XML = self.XML = self.etree.etree.XML - 383 xml = _bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"/>C</b>BT</n:a>AT<x>X<a>A<b xmlns="urn:a"/>BT<c xmlns="urn:x"/>CT</a>AT</x>XT</test>') - 384 - 385 root = XML + 396 xml = _bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"/>C</b>BT</n:a>AT<x>X<a>A<b xmlns="urn:a"/>BT<c xmlns="urn:x"/>CT</a>AT</x>XT</test>') + 397 + 398 root = XML(xml) - 386 self.XML(xml) + 399 self.etree.strip_elements(root, 'a') - 387 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>C</b>BT</n:a>AT<x>X</x>XT</test>'), - 388 self._writeElement(root)) - 389 - 390 root = etree.strip_elements(root, 'a') + 400 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>C</b>BT</n:a>AT<x>X</x>XT</test>'), + 401 self._writeElement(root)) + 402 + 403 root = XML(xml) - 391 self.XML(xml) + 404 self.etree.strip_elements(root, '{urn:a}b', 'c') - 392 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>C</b>BT</n:a>AT<x>X<a>A<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), - 393 self._writeElement(root)) - 394 - 395 root = etree.strip_elements(root, '{urn:a}b', 'c') + 405 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>C</b>BT</n:a>AT<x>X<a>A<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), + 406 self._writeElement(root)) + 407 + 408 root = XML(xml) - 396 self.XML(xml) + 409 self.etree.strip_elements(root, '{urn:a}*', 'c') - 397 self.assertEqual(_bytes('<test>TEST<x>X<a>A<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), - 398 self._writeElement(root)) - 399 - 400 root = etree.strip_elements(root, '{urn:a}*', 'c') + 410 self.assertEqual(_bytes('<test>TEST<x>X<a>A<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), + 411 self._writeElement(root)) + 412 + 413 root = XML(xml) - 401 self.XML(xml) + 414 self.etree.strip_elements(root, '{urn:a}*', 'c', with_tail=False) - 402 self.assertEqual(_bytes('<test>TESTAT<x>X<a>ABT<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), - 403 self._writeElement(root)) -
404 -
405 - def test_strip_tags(self): -
406 etree.strip_elements(root, '{urn:a}*', 'c', with_tail=False) + 415 self.assertEqual(_bytes('<test>TESTAT<x>X<a>ABT<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), + 416 self._writeElement(root)) +
417 +
418 - def test_strip_tags(self): +
419 XML = self.XML = self.etree.etree.XML - 407 xml = _bytes('<test>TEST<a>A<b>B<c/>CT</b>BT</a>AT<x>X<a>A<b/>BT<c/>CT</a>AT</x>XT</test>') - 408 - 409 root = XML + 420 xml = _bytes('<test>TEST<a>A<b>B<c/>CT</b>BT</a>AT<x>X<a>A<b/>BT<c/>CT</a>AT</x>XT</test>') + 421 + 422 root = XML(xml) - 410 self.XML(xml) + 423 self.etree.strip_tags(root, 'a') - 411 self.assertEqual(_bytes('<test>TESTA<b>B<c></c>CT</b>BTAT<x>XA<b></b>BT<c></c>CTAT</x>XT</test>'), - 412 self._writeElement(root)) - 413 - 414 root = etree.strip_tags(root, 'a') + 424 self.assertEqual(_bytes('<test>TESTA<b>B<c></c>CT</b>BTAT<x>XA<b></b>BT<c></c>CTAT</x>XT</test>'), + 425 self._writeElement(root)) + 426 + 427 root = XML(xml) - 415 self.XML(xml) + 428 self.etree.strip_tags(root, 'b', 'c', 'X', 'Y', 'Z') - 416 self.assertEqual(_bytes('<test>TEST<a>ABCTBT</a>AT<x>X<a>ABTCT</a>AT</x>XT</test>'), - 417 self._writeElement(root)) - 418 - 419 root = etree.strip_tags(root, 'b', 'c', 'X', 'Y', 'Z') + 429 self.assertEqual(_bytes('<test>TEST<a>ABCTBT</a>AT<x>X<a>ABTCT</a>AT</x>XT</test>'), + 430 self._writeElement(root)) + 431 + 432 root = XML(xml) - 420 self.XML(xml) + 433 self.etree.strip_tags(root, 'c') - 421 self.assertEqual(_bytes('<test>TEST<a>A<b>BCT</b>BT</a>AT<x>X<a>A<b></b>BTCT</a>AT</x>XT</test>'), - 422 self._writeElement(root)) -
423 -
424 - def test_strip_tags_pi_comment(self): -
425 etree.strip_tags(root, 'c') + 434 self.assertEqual(_bytes('<test>TEST<a>A<b>BCT</b>BT</a>AT<x>X<a>A<b></b>BTCT</a>AT</x>XT</test>'), + 435 self._writeElement(root)) +
436 +
437 - def test_strip_tags_pi_comment(self): +
438 XML = self.XML = self.etree.etree.XML - 426 PI = self.XML + 439 PI = self.etree.ProcessingInstruction - 427 Comment = self.etree.ProcessingInstruction + 440 Comment = self.etree.Comment - 428 xml = _bytes('<!--comment1-->\n<?PI1?>\n<test>TEST<!--comment2-->XT<?PI2?></test>\n<!--comment3-->\n<?PI1?>') - 429 - 430 root = etree.Comment + 441 xml = _bytes('<!--comment1-->\n<?PI1?>\n<test>TEST<!--comment2-->XT<?PI2?></test>\n<!--comment3-->\n<?PI1?>') + 442 + 443 root = XML(xml) - 431 self.XML(xml) + 444 self.etree.strip_tags(root, PI) - 432 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TEST<!--comment2-->XT</test>\n<!--comment3-->\n<?PI1?>'), - 433 self._writeElement(root)) - 434 - 435 root = etree.strip_tags(root, PI) + 445 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TEST<!--comment2-->XT</test>\n<!--comment3-->\n<?PI1?>'), + 446 self._writeElement(root)) + 447 + 448 root = XML(xml) - 436 self.XML(xml) + 449 self.etree.strip_tags(root, Comment) - 437 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TESTXT<?PI2?></test>\n<!--comment3-->\n<?PI1?>'), - 438 self._writeElement(root)) - 439 - 440 root = etree.strip_tags(root, Comment) + 450 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TESTXT<?PI2?></test>\n<!--comment3-->\n<?PI1?>'), + 451 self._writeElement(root)) + 452 + 453 root = XML(xml) - 441 self.XML(xml) + 454 self.etree.strip_tags(root, PI, Comment) - 442 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TESTXT</test>\n<!--comment3-->\n<?PI1?>'), - 443 self._writeElement(root)) - 444 - 445 root = etree.strip_tags(root, PI, Comment) + 455 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TESTXT</test>\n<!--comment3-->\n<?PI1?>'), + 456 self._writeElement(root)) + 457 + 458 root = XML(xml) - 446 self.XML(xml) + 459 self.etree.strip_tags(root, Comment, PI) - 447 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TESTXT</test>\n<!--comment3-->\n<?PI1?>'), - 448 self._writeElement(root)) -
449 -
451 etree.strip_tags(root, Comment, PI) + 460 self.assertEqual(_bytes('<!--comment1-->\n<?PI1?>\n<test>TESTXT</test>\n<!--comment3-->\n<?PI1?>'), + 461 self._writeElement(root)) +
462 +
464 XML = self.XML = self.etree.etree.XML - 452 XML + 465 ElementTree = self.ElementTree = self.etree.etree.ElementTree - 453 PI = self.ElementTree + 466 PI = self.etree.ProcessingInstruction - 454 Comment = self.etree.ProcessingInstruction + 467 Comment = self.etree.Comment - 455 xml = _bytes('<!--comment1-->\n<?PI1?>\n<test>TEST<!--comment2-->XT<?PI2?></test>\n<!--comment3-->\n<?PI1?>') - 456 - 457 root = etree.Comment + 468 xml = _bytes('<!--comment1-->\n<?PI1?>\n<test>TEST<!--comment2-->XT<?PI2?></test>\n<!--comment3-->\n<?PI1?>') + 469 + 470 root = XML(xml) - 458 self.XML(xml) + 471 self.etree.strip_tags(etree.strip_tags(ElementTree(root), PI) - 459 self.assertEqual(_bytes('<!--comment1-->\n<test>TEST<!--comment2-->XT</test>\n<!--comment3-->'), - 460 self._writeElement(root)) - 461 - 462 root = ElementTree(root), PI) + 472 self.assertEqual(_bytes('<!--comment1-->\n<test>TEST<!--comment2-->XT</test>\n<!--comment3-->'), + 473 self._writeElement(root)) + 474 + 475 root = XML(xml) - 463 self.XML(xml) + 476 self.etree.strip_tags(etree.strip_tags(ElementTree(root), Comment) - 464 self.assertEqual(_bytes('<?PI1?>\n<test>TESTXT<?PI2?></test>\n<?PI1?>'), - 465 self._writeElement(root)) - 466 - 467 root = ElementTree(root), Comment) + 477 self.assertEqual(_bytes('<?PI1?>\n<test>TESTXT<?PI2?></test>\n<?PI1?>'), + 478 self._writeElement(root)) + 479 + 480 root = XML(xml) - 468 self.XML(xml) + 481 self.etree.strip_tags(etree.strip_tags(ElementTree(root), PI, Comment) - 469 self.assertEqual(_bytes('<test>TESTXT</test>'), - 470 self._writeElement(root)) - 471 - 472 root = ElementTree(root), PI, Comment) + 482 self.assertEqual(_bytes('<test>TESTXT</test>'), + 483 self._writeElement(root)) + 484 + 485 root = XML(xml) - 473 self.XML(xml) + 486 self.etree.strip_tags(etree.strip_tags(ElementTree(root), Comment, PI) - 474 self.assertEqual(_bytes('<test>TESTXT</test>'), - 475 self._writeElement(root)) -
476 -
477 - def test_strip_tags_doc_style(self): -
478 ElementTree(root), Comment, PI) + 487 self.assertEqual(_bytes('<test>TESTXT</test>'), + 488 self._writeElement(root)) +
489 +
490 - def test_strip_tags_doc_style(self): +
491 XML = self.XML = self.etree.etree.XML - 479 xml = _bytes(''' - 480 <div> - 481 <div> - 482 I like <strong>sheep</strong>. - 483 <br/> - 484 I like lots of <strong>sheep</strong>. - 485 <br/> - 486 Click <a href="http://www.sheep.com">here</a> - 487 for <a href="http://www.sheep.com">those</a> sheep. - 488 <br/> - 489 </div> - 490 </div> - 491 '''.strip()) - 492 - 493 root = XML + 492 xml = _bytes(''' + 493 <div> + 494 <div> + 495 I like <strong>sheep</strong>. + 496 <br/> + 497 I like lots of <strong>sheep</strong>. + 498 <br/> + 499 Click <a href="http://www.sheep.com">here</a> + 500 for <a href="http://www.sheep.com">those</a> sheep. + 501 <br/> + 502 </div> + 503 </div> + 504 '''.strip()) + 505 + 506 root = XML(xml) - 494 self.XML(xml) + 507 self.etree.strip_tags(root, 'a') - 495 self.assertEqual(re.sub(_bytes('</?a[^>]*>'), _bytes(''), xml).replace(_bytes('<br/>'), _bytes('<br></br>')), - 496 self._writeElement(root)) - 497 - 498 root = etree.strip_tags(root, 'a') + 508 self.assertEqual(re.sub(_bytes('</?a[^>]*>'), _bytes(''), xml).replace(_bytes('<br/>'), _bytes('<br></br>')), + 509 self._writeElement(root)) + 510 + 511 root = XML(xml) - 499 self.XML(xml) + 512 self.etree.strip_tags(root, 'a', 'br') - 500 self.assertEqual(re.sub(_bytes('</?a[^>]*>'), _bytes(''), - 501 re.sub(_bytes('<br[^>]*>'), _bytes(''), xml)), - 502 self._writeElement(root)) -
503 -
504 - def test_strip_tags_ns(self): -
505 etree.strip_tags(root, 'a', 'br') + 513 self.assertEqual(re.sub(_bytes('</?a[^>]*>'), _bytes(''), + 514 re.sub(_bytes('<br[^>]*>'), _bytes(''), xml)), + 515 self._writeElement(root)) +
516 +
517 - def test_strip_tags_ns(self): +
518 XML = self.XML = self.etree.etree.XML - 506 xml = _bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"/>CT</b>BT</n:a>AT<x>X<a>A<b xmlns="urn:a"/>BT<c xmlns="urn:x"/>CT</a>AT</x>XT</test>') - 507 - 508 root = XML + 519 xml = _bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"/>CT</b>BT</n:a>AT<x>X<a>A<b xmlns="urn:a"/>BT<c xmlns="urn:x"/>CT</a>AT</x>XT</test>') + 520 + 521 root = XML(xml) - 509 self.XML(xml) + 522 self.etree.strip_tags(root, 'a') - 510 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>CT</b>BT</n:a>AT<x>XA<b xmlns="urn:a"></b>BT<c xmlns="urn:x"></c>CTAT</x>XT</test>'), - 511 self._writeElement(root)) - 512 - 513 root = etree.strip_tags(root, 'a') + 523 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>CT</b>BT</n:a>AT<x>XA<b xmlns="urn:a"></b>BT<c xmlns="urn:x"></c>CTAT</x>XT</test>'), + 524 self._writeElement(root)) + 525 + 526 root = XML(xml) - 514 self.XML(xml) + 527 self.etree.strip_tags(root, '{urn:a}b', 'c') - 515 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>CT</b>BT</n:a>AT<x>X<a>ABT<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), - 516 self._writeElement(root)) - 517 - 518 root = etree.strip_tags(root, '{urn:a}b', 'c') + 528 self.assertEqual(_bytes('<test>TEST<n:a xmlns:n="urn:a">A<b>B<c xmlns="urn:c"></c>CT</b>BT</n:a>AT<x>X<a>ABT<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), + 529 self._writeElement(root)) + 530 + 531 root = XML(xml) - 519 self.XML(xml) + 532 self.etree.strip_tags(root, '{urn:a}*', 'c') - 520 self.assertEqual(_bytes('<test>TESTA<b>B<c xmlns="urn:c"></c>CT</b>BTAT<x>X<a>ABT<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), - 521 self._writeElement(root)) -
522 -
523 - def test_strip_tags_and_remove(self): -
524 # previously crashed - 525 etree.strip_tags(root, '{urn:a}*', 'c') + 533 self.assertEqual(_bytes('<test>TESTA<b>B<c xmlns="urn:c"></c>CT</b>BTAT<x>X<a>ABT<c xmlns="urn:x"></c>CT</a>AT</x>XT</test>'), + 534 self._writeElement(root)) +
535 +
536 - def test_strip_tags_and_remove(self): +
537 # previously crashed + 538 HTML = self.HTML = self.etree.etree.HTML - 526 root = HTML + 539 root = HTML(_bytes('<div><h1>title</h1> <b>foo</b> <p>boo</p></div>'))[0][0] - 527 self.assertEqual(_bytes('<div><h1>title</h1> <b>foo</b> <p>boo</p></div>'), - 528 self.HTML(_bytes('<div><h1>title</h1> <b>foo</b> <p>boo</p></div>'))[0][0] + 540 self.assertEqual(_bytes('<div><h1>title</h1> <b>foo</b> <p>boo</p></div>'), + 541 self.etree.tostring(root)) - 529 self.etree.tostring(root)) + 542 self.etree.strip_tags(root, 'b') - 530 self.assertEqual(_bytes('<div><h1>title</h1> foo <p>boo</p></div>'), - 531 self.etree.strip_tags(root, 'b') + 543 self.assertEqual(_bytes('<div><h1>title</h1> foo <p>boo</p></div>'), + 544 self.etree.tostring(root)) - 532 root.etree.tostring(root)) + 545 root.remove(root[0]) - 533 self.assertEqual(_bytes('<div><p>boo</p></div>'), - 534 self.remove(root[0]) + 546 self.assertEqual(_bytes('<div><p>boo</p></div>'), + 547 self.etree.tostring(root)) -
535 -
536 - def test_pi(self): -
537 # lxml.etree separates target and text - 538 etree.tostring(root)) +
548 +
549 - def test_pi(self): +
550 # lxml.etree separates target and text + 551 Element = self.Element = self.etree.etree.Element - 539 SubElement = self.Element + 552 SubElement = self.etree.SubElement - 540 ProcessingInstruction = self.etree.SubElement + 553 ProcessingInstruction = self.etree.ProcessingInstruction - 541 - 542 a = etree.ProcessingInstruction + 554 + 555 a = Element('a') - 543 a.append(ProcessingInstruction('foo', 'some more text')) - 544 self.assertEqual(a[0].target, 'foo') - 545 self.assertEqual(a[0].Element('a') + 556 a.append(ProcessingInstruction('foo', 'some more text')) + 557 self.assertEqual(a[0].target, 'foo') + 558 self.assertEqual(a[0].text, 'some more text') -
546 -
547 - def test_pi_parse(self): -
548 text, 'some more text') +
559 +
560 - def test_pi_parse(self): +
561 XML = self.XML = self.etree.etree.XML - 549 root = XML + 562 root = XML(_bytes("<test><?mypi my test ?></test>")) - 550 self.assertEqual(root[0].target, "mypi") - 551 self.assertEqual(root[0].XML(_bytes("<test><?mypi my test ?></test>")) + 563 self.assertEqual(root[0].target, "mypi") + 564 self.assertEqual(root[0].text, "my test ") -
552 -
554 text, "my test ") +
565 +
567 XML = self.XML = self.etree.etree.XML - 555 root = XML + 568 root = XML(_bytes("<test><?mypi my='1' test=\" abc \" quotes=\"' '\" only names ?></test>")) - 556 self.assertEqual(root[0].target, "mypi") - 557 self.assertEqual(root[0].XML(_bytes("<test><?mypi my='1' test=\" abc \" quotes=\"' '\" only names ?></test>")) + 569 self.assertEqual(root[0].target, "mypi") + 570 self.assertEqual(root[0].get('my'), "1") - 558 self.assertEqual(root[0].get('my'), "1") + 571 self.assertEqual(root[0].get('test'), " abc ") - 559 self.assertEqual(root[0].get('test'), " abc ") + 572 self.assertEqual(root[0].get('quotes'), "' '") - 560 self.assertEqual(root[0].get('quotes'), "' '") + 573 self.assertEqual(root[0].get('only'), None) - 561 self.assertEqual(root[0].get('only'), None) + 574 self.assertEqual(root[0].get('names'), None) - 562 self.assertEqual(root[0].get('names'), None) + 575 self.assertEqual(root[0].get('nope'), None) -
563 -
565 get('nope'), None) +
576 +
578 XML = self.XML = self.etree.etree.XML - 566 root = XML + 579 root = XML(_bytes("<test><?mypi my='1' test=\" abc \" quotes=\"' '\" only names ?></test>")) - 567 self.assertEqual(root[0].target, "mypi") - 568 self.assertEqual(root[0].XML(_bytes("<test><?mypi my='1' test=\" abc \" quotes=\"' '\" only names ?></test>")) + 580 self.assertEqual(root[0].target, "mypi") + 581 self.assertEqual(root[0].attrib['my'], "1") - 569 self.assertEqual(root[0].attrib['my'], "1") + 582 self.assertEqual(root[0].attrib['test'], " abc ") - 570 self.assertEqual(root[0].attrib['test'], " abc ") + 583 self.assertEqual(root[0].attrib['quotes'], "' '") - 571 self.assertRaises(KeyError, root[0].attrib['quotes'], "' '") + 584 self.assertRaises(KeyError, root[0].attrib.attrib.__getitem__, 'only') - 572 self.assertRaises(KeyError, root[0].__getitem__, 'only') + 585 self.assertRaises(KeyError, root[0].attrib.attrib.__getitem__, 'names') - 573 self.assertRaises(KeyError, root[0].__getitem__, 'names') + 586 self.assertRaises(KeyError, root[0].attrib.attrib.__getitem__, 'nope') -
574 -
575 - def test_deepcopy_pi(self): -
576 # previously caused a crash - 577 ProcessingInstruction = self.__getitem__, 'nope') +
587 +
588 - def test_deepcopy_pi(self): +
589 # previously caused a crash + 590 ProcessingInstruction = self.etree.ProcessingInstruction - 578 - 579 a = ProcessingInstruction("PI", "ONE") - 580 b = etree.ProcessingInstruction + 591 + 592 a = ProcessingInstruction("PI", "ONE") + 593 b = copy.deepcopy(a) - 581 b.copy.deepcopy(a) + 594 b.text = "ANOTHER" - 582 - 583 self.assertEqual('ONE', a.text = "ANOTHER" + 595 + 596 self.assertEqual('ONE', a.text) - 584 self.assertEqual('ANOTHER', b.text) + 597 self.assertEqual('ANOTHER', b.text) -
585 -
587 text) +
598 +
600 XML = self.XML = self.etree.etree.XML - 588 tostring = self.XML + 601 tostring = self.etree.tostring - 589 root = etree.tostring + 602 root = XML(_bytes("<?mypi my test ?><test/><!--comment -->")) - 590 tree1 = self.XML(_bytes("<?mypi my test ?><test/><!--comment -->")) + 603 tree1 = self.etree.etree.ElementTree(root) - 591 self.assertEqual(_bytes("<?mypi my test ?><test/><!--comment -->"), - 592 tostring(tree1)) - 593 - 594 tree2 = ElementTree(root) + 604 self.assertEqual(_bytes("<?mypi my test ?><test/><!--comment -->"), + 605 tostring(tree1)) + 606 + 607 tree2 = copy.deepcopy(tree1) - 595 self.assertEqual(_bytes("<?mypi my test ?><test/><!--comment -->"), - 596 tostring(tree2)) - 597 - 598 root2 = copy.deepcopy(tree1) + 608 self.assertEqual(_bytes("<?mypi my test ?><test/><!--comment -->"), + 609 tostring(tree2)) + 610 + 611 root2 = copy.deepcopy(tree1.getroot()) - 599 self.assertEqual(_bytes("<test/>"), - 600 tostring(root2)) -
601 -
603 copy.deepcopy(tree1.getroot()) + 612 self.assertEqual(_bytes("<test/>"), + 613 tostring(root2)) +
614 +
616 XML = self.XML = self.etree.etree.XML - 604 tostring = self.XML + 617 tostring = self.etree.tostring - 605 xml = _bytes('<!DOCTYPE test [\n<!ENTITY entity "tasty">\n]>\n<test/>') - 606 root = etree.tostring + 618 xml = _bytes('<!DOCTYPE test [\n<!ENTITY entity "tasty">\n]>\n<test/>') + 619 root = XML(xml) - 607 tree1 = self.XML(xml) + 620 tree1 = self.etree.etree.ElementTree(root) - 608 self.assertEqual(xml, tostring(tree1)) - 609 - 610 tree2 = ElementTree(root) + 621 self.assertEqual(xml, tostring(tree1)) + 622 + 623 tree2 = copy.deepcopy(tree1) - 611 self.assertEqual(xml, tostring(tree2)) - 612 - 613 root2 = copy.deepcopy(tree1) + 624 self.assertEqual(xml, tostring(tree2)) + 625 + 626 root2 = copy.deepcopy(tree1.getroot()) - 614 self.assertEqual(_bytes("<test/>"), - 615 tostring(root2)) -
616 -
617 - def test_deepcopy_pi_dtd(self): -
618 copy.deepcopy(tree1.getroot()) + 627 self.assertEqual(_bytes("<test/>"), + 628 tostring(root2)) +
629 +
630 - def test_deepcopy_pi_dtd(self): +
631 XML = self.XML = self.etree.etree.XML - 619 tostring = self.XML + 632 tostring = self.etree.tostring - 620 xml = _bytes('<!-- comment --><!DOCTYPE test [\n<!ENTITY entity "tasty">\n]>\n<test/>') - 621 root = etree.tostring + 633 xml = _bytes('<!-- comment --><!DOCTYPE test [\n<!ENTITY entity "tasty">\n]>\n<test/>') + 634 root = XML(xml) - 622 tree1 = self.XML(xml) + 635 tree1 = self.etree.etree.ElementTree(root) - 623 self.assertEqual(xml, tostring(tree1)) - 624 - 625 tree2 = ElementTree(root) + 636 self.assertEqual(xml, tostring(tree1)) + 637 + 638 tree2 = copy.deepcopy(tree1) - 626 self.assertEqual(xml, tostring(tree2)) -
627 -
628 - def test_parse_remove_comments(self): -
629 copy.deepcopy(tree1) + 639 self.assertEqual(xml, tostring(tree2)) +
640 +
641 - def test_parse_remove_comments(self): +
642 fromstring = self.fromstring = self.etree.etree.fromstring - 630 tostring = self.fromstring + 643 tostring = self.etree.tostring - 631 etree.tostring + 644 XMLParser = self.XMLParser = self.etree.etree.XMLParser - 632 - 633 xml = _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') - 634 parser = XMLParser + 645 + 646 xml = _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') + 647 parser = XMLParser(remove_comments=True) - 635 root = XMLParser(remove_comments=True) + 648 root = fromstring(xml, parser) - 636 self.assertEqual( - 637 _bytes('<a><b><c/></b></a>'), - 638 tostring(root)) -
639 -
640 - def test_parse_remove_pis(self): -
641 fromstring(xml, parser) + 649 self.assertEqual( + 650 _bytes('<a><b><c/></b></a>'), + 651 tostring(root)) +
652 +
653 - def test_parse_remove_pis(self): +
654 parse = self.parse = self.etree.etree.parse - 642 tostring = self.parse + 655 tostring = self.etree.tostring - 643 etree.tostring + 656 XMLParser = self.XMLParser = self.etree.etree.XMLParser - 644 - 645 xml = _bytes('<?test?><a><?A?><b><?B?><c/></b><?C?></a><?tail?>') - 646 - 647 f = BytesIO(xml) - 648 tree = XMLParser + 657 + 658 xml = _bytes('<?test?><a><?A?><b><?B?><c/></b><?C?></a><?tail?>') + 659 + 660 f = BytesIO(xml) + 661 tree = parse(f) - 649 self.assertEqual( - 650 xml, - 651 tostring(tree)) - 652 - 653 parser = parse(f) + 662 self.assertEqual( + 663 xml, + 664 tostring(tree)) + 665 + 666 parser = XMLParser(remove_pis=True) - 654 tree = XMLParser(remove_pis=True) + 667 tree = parse(f, parser) - 655 self.assertEqual( - 656 _bytes('<a><b><c/></b></a>'), - 657 tostring(tree)) -
658 -
660 # ET raises IOError only - 661 parse(f, parser) + 668 self.assertEqual( + 669 _bytes('<a><b><c/></b></a>'), + 670 tostring(tree)) +
671 +
673 # ET raises IOError only + 674 parse = self.parse = self.etree.etree.parse - 662 self.assertRaises(TypeError, parse + 675 self.assertRaises(TypeError, parse, 'notthere.xml', object()) -
663 -
665 # ET removes comments - 666 iterparse = self.parse, 'notthere.xml', object()) +
676 +
678 # ET removes comments + 679 iterparse = self.etree.iterparse - 667 tostring = self.etree.iterparse + 680 tostring = self.etree.tostring - 668 - 669 f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') - 670 events = list(iterparse(f)) - 671 root = events[-1][1] - 672 self.assertEqual(3, len(events)) - 673 self.assertEqual( - 674 _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>'), - 675 tostring(root)) -
676 -
677 - def test_iterparse_comments(self): -
678 # ET removes comments - 679 iterparse = self.etree.tostring + 681 + 682 f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') + 683 events = list(iterparse(f)) + 684 root = events[-1][1] + 685 self.assertEqual(3, len(events)) + 686 self.assertEqual( + 687 _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>'), + 688 tostring(root)) +
689 +
690 - def test_iterparse_comments(self): +
691 # ET removes comments + 692 iterparse = self.etree.iterparse - 680 tostring = self.etree.iterparse + 693 tostring = self.etree.tostring - 681 - 682 def name(event, el): - 683 if event == 'comment': - 684 return el.etree.tostring + 694 + 695 def name(event, el): + 696 if event == 'comment': + 697 return el.text - 685 else: - 686 return el.text + 698 else: + 699 return el.tag -
687 - 688 f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') - 689 events = list(iterparse(f, events=('end', 'comment'))) - 690 root = events[-1][1] - 691 self.assertEqual(6, len(events)) - 692 self.assertEqual(['A', ' B ', 'c', 'b', 'C', 'a'], - 693 [ tag + 700 + 701 f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') + 702 events = list(iterparse(f, events=('end', 'comment'))) + 703 root = events[-1][1] + 704 self.assertEqual(6, len(events)) + 705 self.assertEqual(['A', ' B ', 'c', 'b', 'C', 'a'], + 706 [ name(*item) for item in events ]) - 694 self.assertEqual( - 695 _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>'), - 696 tostring(root)) - 697 -
698 - def test_iterparse_pis(self): -
699 # ET removes pis - 700 iterparse = self.name(*item) for item in events ]) + 707 self.assertEqual( + 708 _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>'), + 709 tostring(root)) +
710 +
711 - def test_iterparse_pis(self): +
712 # ET removes pis + 713 iterparse = self.etree.iterparse - 701 tostring = self.etree.iterparse + 714 tostring = self.etree.tostring - 702 etree.tostring + 715 ElementTree = self.ElementTree = self.etree.etree.ElementTree - 703 - 704 def name(event, el): - 705 if event == 'pi': - 706 return el.target, el.ElementTree + 716 + 717 def name(event, el): + 718 if event == 'pi': + 719 return el.target, el.text - 707 else: - 708 return el.text + 720 else: + 721 return el.tag -
709 - 710 f = BytesIO('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>') - 711 events = list(iterparse(f, events=('end', 'pi'))) - 712 root = events[-2][1] - 713 self.assertEqual(8, len(events)) - 714 self.assertEqual([('pia','a'), ('pib','b'), ('pic','c'), 'c', 'b', - 715 ('pid','d'), 'a', ('pie','e')], - 716 [ tag + 722 + 723 f = BytesIO('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>') + 724 events = list(iterparse(f, events=('end', 'pi'))) + 725 root = events[-2][1] + 726 self.assertEqual(8, len(events)) + 727 self.assertEqual([('pia','a'), ('pib','b'), ('pic','c'), 'c', 'b', + 728 ('pid','d'), 'a', ('pie','e')], + 729 [ name(*item) for item in events ]) - 717 self.assertEqual( - 718 _bytes('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>'), - 719 tostring(name(*item) for item in events ]) + 730 self.assertEqual( + 731 _bytes('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>'), + 732 tostring(ElementTree(root))) - 720 -
722 iterparse = self.ElementTree(root))) +
733 +
735 iterparse = self.etree.iterparse - 723 tostring = self.etree.iterparse + 736 tostring = self.etree.tostring - 724 - 725 f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') - 726 events = list(iterparse(f, remove_comments=True, - 727 events=('end', 'comment'))) - 728 root = events[-1][1] - 729 self.assertEqual(3, len(events)) - 730 self.assertEqual(['c', 'b', 'a'], - 731 [ el.etree.tostring + 737 + 738 f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>') + 739 events = list(iterparse(f, remove_comments=True, + 740 events=('end', 'comment'))) + 741 root = events[-1][1] + 742 self.assertEqual(3, len(events)) + 743 self.assertEqual(['c', 'b', 'a'], + 744 [ el.tag for (event, el) in events ]) - 732 self.assertEqual( - 733 _bytes('<a><b><c/></b></a>'), - 734 tostring(root)) -
735 -
736 - def test_iterparse_broken(self): -
737 iterparse = self.tag for (event, el) in events ]) + 745 self.assertEqual( + 746 _bytes('<a><b><c/></b></a>'), + 747 tostring(root)) +
748 +
749 - def test_iterparse_broken(self): +
750 iterparse = self.etree.iterparse - 738 f = BytesIO('<a><b><c/></a>') - 739 # ET raises ExpatError, lxml raises XMLSyntaxError - 740 self.assertRaises(self.etree.iterparse + 751 f = BytesIO('<a><b><c/></a>') + 752 # ET raises ExpatError, lxml raises XMLSyntaxError + 753 self.assertRaises(self.etree.XMLSyntaxError, list, iterparse(f)) -
741 -
743 iterparse = self.etree.XMLSyntaxError, list, iterparse(f)) +
754 +
756 iterparse = self.etree.iterparse - 744 f = BytesIO('<a><b><c/></a>') - 745 it = iterparse(f, events=('start', 'end'), recover=True) - 746 events = [(ev, el.etree.iterparse + 757 f = BytesIO('<a><b><c/></a>') + 758 it = iterparse(f, events=('start', 'end'), recover=True) + 759 events = [(ev, el.tag) for ev, el in it] - 747 root = it.root - 748 self.assertTrue(root is not None) - 749 - 750 self.assertEqual(1, events.count(('start', 'a'))) - 751 self.assertEqual(1, events.count(('end', 'a'))) - 752 - 753 self.assertEqual(1, events.count(('start', 'b'))) - 754 self.assertEqual(1, events.count(('end', 'b'))) - 755 - 756 self.assertEqual(1, events.count(('start', 'c'))) - 757 self.assertEqual(1, events.count(('end', 'c'))) -
758 -
760 iterparse = self.tag) for ev, el in it] + 760 root = it.root + 761 self.assertTrue(root is not None) + 762 + 763 self.assertEqual(1, events.count(('start', 'a'))) + 764 self.assertEqual(1, events.count(('end', 'a'))) + 765 + 766 self.assertEqual(1, events.count(('start', 'b'))) + 767 self.assertEqual(1, events.count(('end', 'b'))) + 768 + 769 self.assertEqual(1, events.count(('start', 'c'))) + 770 self.assertEqual(1, events.count(('end', 'c'))) +
771 +
773 iterparse = self.etree.iterparse - 761 f = BytesIO('<a><b><c/></d><b><c/></a></b>') - 762 it = iterparse(f, events=('start', 'end'), recover=True) - 763 events = [(ev, el.etree.iterparse + 774 f = BytesIO('<a><b><c/></d><b><c/></a></b>') + 775 it = iterparse(f, events=('start', 'end'), recover=True) + 776 events = [(ev, el.tag) for ev, el in it] - 764 root = it.root - 765 self.assertTrue(root is not None) - 766 - 767 self.assertEqual(1, events.count(('start', 'a'))) - 768 self.assertEqual(1, events.count(('end', 'a'))) - 769 - 770 self.assertEqual(2, events.count(('start', 'b'))) - 771 self.assertEqual(2, events.count(('end', 'b'))) - 772 - 773 self.assertEqual(2, events.count(('start', 'c'))) - 774 self.assertEqual(2, events.count(('end', 'c'))) -
775 -
776 - def test_iterparse_strip(self): -
777 iterparse = self.tag) for ev, el in it] + 777 root = it.root + 778 self.assertTrue(root is not None) + 779 + 780 self.assertEqual(1, events.count(('start', 'a'))) + 781 self.assertEqual(1, events.count(('end', 'a'))) + 782 + 783 self.assertEqual(2, events.count(('start', 'b'))) + 784 self.assertEqual(2, events.count(('end', 'b'))) + 785 + 786 self.assertEqual(2, events.count(('start', 'c'))) + 787 self.assertEqual(2, events.count(('end', 'c'))) +
788 +
789 - def test_iterparse_strip(self): +
790 iterparse = self.etree.iterparse - 778 f = BytesIO(""" - 779 <a> \n \n <b> b test </b> \n - 780 - 781 \n\t <c> \n </c> </a> \n """) - 782 iterator = iterparse(f, remove_blank_text=True) - 783 etree.iterparse + 791 f = BytesIO(""" + 792 <a> \n \n <b> b test </b> \n + 793 + 794 \n\t <c> \n </c> </a> \n """) + 795 iterator = iterparse(f, remove_blank_text=True) + 796 text = [ (element.text = [ (element.text, element.tail) - 784 for event, element in iterator ] - 785 self.assertEqual( - 786 [(" b test ", None), (" \n ", None), (None, None)], - 787 text, element.tail) + 797 for event, element in iterator ] + 798 self.assertEqual( + 799 [(" b test ", None), (" \n ", None), (None, None)], + 800 text) -
788 -
789 - def test_iterparse_tag(self): -
790 iterparse = self.text) +
801 +
802 - def test_iterparse_tag(self): +
803 iterparse = self.etree.iterparse - 791 f = BytesIO('<a><b><d/></b><c/></a>') - 792 - 793 iterator = iterparse(f, etree.iterparse + 804 f = BytesIO('<a><b><d/></b><c/></a>') + 805 + 806 iterator = iterparse(f, tag="b", events=('start', 'end')) - 794 events = list(iterator) - 795 root = iterator.root - 796 self.assertEqual( - 797 [('start', root[0]), ('end', root[0])], - 798 events) -
799 -
800 - def test_iterparse_tag_all(self): -
801 iterparse = self.tag="b", events=('start', 'end')) + 807 events = list(iterator) + 808 root = iterator.root + 809 self.assertEqual( + 810 [('start', root[0]), ('end', root[0])], + 811 events) +
812 +
813 - def test_iterparse_tag_all(self): +
814 iterparse = self.etree.iterparse - 802 f = BytesIO('<a><b><d/></b><c/></a>') - 803 - 804 iterator = iterparse(f, etree.iterparse + 815 f = BytesIO('<a><b><d/></b><c/></a>') + 816 + 817 iterator = iterparse(f, tag="*", events=('start', 'end')) - 805 events = list(iterator) - 806 self.assertEqual( - 807 8, - 808 len(events)) -
809 -
810 - def test_iterparse_tag_ns(self): -
811 iterparse = self.tag="*", events=('start', 'end')) + 818 events = list(iterator) + 819 self.assertEqual( + 820 8, + 821 len(events)) +
822 +
823 - def test_iterparse_tag_ns(self): +
824 iterparse = self.etree.iterparse - 812 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') - 813 - 814 iterator = iterparse(f, etree.iterparse + 825 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') + 826 + 827 iterator = iterparse(f, tag="{urn:test:1}b", events=('start', 'end')) - 815 events = list(iterator) - 816 root = iterator.root - 817 self.assertEqual( - 818 [('start', root[0]), ('end', root[0])], - 819 events) -
820 -
821 - def test_iterparse_tag_ns_empty(self): -
822 iterparse = self.tag="{urn:test:1}b", events=('start', 'end')) + 828 events = list(iterator) + 829 root = iterator.root + 830 self.assertEqual( + 831 [('start', root[0]), ('end', root[0])], + 832 events) +
833 +
834 - def test_iterparse_tag_ns_empty(self): +
835 iterparse = self.etree.iterparse - 823 f = BytesIO('<a><b><d/></b><c/></a>') - 824 iterator = iterparse(f, etree.iterparse + 836 f = BytesIO('<a><b><d/></b><c/></a>') + 837 iterator = iterparse(f, tag="{}b", events=('start', 'end')) - 825 events = list(iterator) - 826 root = iterator.root - 827 self.assertEqual( - 828 [('start', root[0]), ('end', root[0])], - 829 events) - 830 - 831 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') - 832 iterator = iterparse(f, tag="{}b", events=('start', 'end')) + 838 events = list(iterator) + 839 root = iterator.root + 840 self.assertEqual( + 841 [('start', root[0]), ('end', root[0])], + 842 events) + 843 + 844 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') + 845 iterator = iterparse(f, tag="{}b", events=('start', 'end')) - 833 events = list(iterator) - 834 root = iterator.root - 835 self.assertEqual([], events) -
836 -
837 - def test_iterparse_tag_ns_all(self): -
838 iterparse = self.tag="{}b", events=('start', 'end')) + 846 events = list(iterator) + 847 root = iterator.root + 848 self.assertEqual([], events) +
849 +
850 - def test_iterparse_tag_ns_all(self): +
851 iterparse = self.etree.iterparse - 839 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') - 840 iterator = iterparse(f, etree.iterparse + 852 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') + 853 iterator = iterparse(f, tag="{urn:test:1}*", events=('start', 'end')) - 841 events = list(iterator) - 842 self.assertEqual(8, len(events)) -
843 -
845 iterparse = self.tag="{urn:test:1}*", events=('start', 'end')) + 854 events = list(iterator) + 855 self.assertEqual(8, len(events)) +
856 +
858 iterparse = self.etree.iterparse - 846 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') - 847 iterator = iterparse(f, etree.iterparse + 859 f = BytesIO('<a xmlns="urn:test:1"><b><d/></b><c/></a>') + 860 iterator = iterparse(f, tag="{}*", events=('start', 'end')) - 848 events = list(iterator) - 849 self.assertEqual([], events) - 850 - 851 f = BytesIO('<a><b><d/></b><c/></a>') - 852 iterator = iterparse(f, tag="{}*", events=('start', 'end')) + 861 events = list(iterator) + 862 self.assertEqual([], events) + 863 + 864 f = BytesIO('<a><b><d/></b><c/></a>') + 865 iterator = iterparse(f, tag="{}*", events=('start', 'end')) - 853 events = list(iterator) - 854 self.assertEqual(8, len(events)) -
855 -
857 tag="{}*", events=('start', 'end')) + 866 events = list(iterator) + 867 self.assertEqual(8, len(events)) +
868 +
870 text = _str('Søk på nettet') - 858 wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>" - 859 xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, text = _str('Søk på nettet') + 871 wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>" + 872 xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, text) - 860 ).encode('iso-8859-1') - 861 - 862 self.assertRaises(self.text) + 873 ).encode('iso-8859-1') + 874 + 875 self.assertRaises(self.etree.ParseError, - 863 list, self.etree.ParseError, + 876 list, self.etree.iterparse(BytesIO(xml_latin1))) -
864 -
866 etree.iterparse(BytesIO(xml_latin1))) +
877 +
879 text = _str('Søk på nettet', text = _str('Søk på nettet', encoding="UTF-8") - 867 wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>" - 868 xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, encoding="UTF-8") + 880 wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>" + 881 xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, text) - 869 ).encode('iso-8859-1') - 870 - 871 iterator = self.text) + 882 ).encode('iso-8859-1') + 883 + 884 iterator = self.etree.iterparse(BytesIO(xml_latin1), - 872 etree.iterparse(BytesIO(xml_latin1), + 885 encoding="iso-8859-1") - 873 self.assertEqual(1, len(list(iterator))) - 874 - 875 a = iterator.root - 876 self.assertEqual(a.encoding="iso-8859-1") + 886 self.assertEqual(1, len(list(iterator))) + 887 + 888 a = iterator.root + 889 self.assertEqual(a.text, text, text) -
877 -
878 - def test_iterparse_keep_cdata(self): -
879 tostring = self.text) +
890 +
891 - def test_iterparse_keep_cdata(self): +
892 tostring = self.etree.tostring - 880 f = BytesIO('<root><![CDATA[test]]></root>') - 881 context = self.etree.tostring + 893 f = BytesIO('<root><![CDATA[test]]></root>') + 894 context = self.etree.iterparse(f, strip_cdata=False) - 882 content = [ el.etree.iterparse(f, strip_cdata=False) + 895 content = [ el.text for event,el in context ] - 883 - 884 self.assertEqual(['test'], content) - 885 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), - 886 tostring(context.root)) -
887 -
889 self.assertRaises( - 890 LookupError, self.text for event,el in context ] + 896 + 897 self.assertEqual(['test'], content) + 898 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), + 899 tostring(context.root)) +
900 +
902 self.assertRaises( + 903 LookupError, self.etree.etree.XMLParser, XMLParser, encoding="hopefully unknown") -
891 -
892 - def test_parser_encoding(self): -
893 self.encoding="hopefully unknown") +
904 +
905 - def test_parser_encoding(self): +
906 self.etree.etree.XMLParser(XMLParser(encoding="ascii") - 894 self.encoding="ascii") + 907 self.etree.etree.XMLParser(XMLParser(encoding="utf-8") - 895 self.encoding="utf-8") + 908 self.etree.etree.XMLParser(XMLParser(encoding="iso-8859-1") -
896 -
897 - def test_feed_parser_recover(self): -
898 parser = self.encoding="iso-8859-1") +
909 +
910 - def test_feed_parser_recover(self): +
911 parser = self.etree.etree.XMLParser(recover=True) - 899 - 900 parser.feed('<?xml version=') - 901 parser.feed('"1.0"?><ro') - 902 parser.feed('ot><') - 903 parser.feed('a test="works"') - 904 parser.feed('><othertag/></root') # <a> not closed! - 905 parser.feed('>') - 906 - 907 root = parser.XMLParser(recover=True) + 912 + 913 parser.feed('<?xml version=') + 914 parser.feed('"1.0"?><ro') + 915 parser.feed('ot><') + 916 parser.feed('a test="works"') + 917 parser.feed('><othertag/></root') # <a> not closed! + 918 parser.feed('>') + 919 + 920 root = parser.close() - 908 - 909 self.assertEqual(root.close() + 921 + 922 self.assertEqual(root.tag, "root") - 910 self.assertEqual(len(root), 1) - 911 self.assertEqual(root[0].tag, "root") + 923 self.assertEqual(len(root), 1) + 924 self.assertEqual(root[0].tag, "a") - 912 self.assertEqual(root[0].tag, "a") + 925 self.assertEqual(root[0].get("test"), "works") - 913 self.assertEqual(len(root[0]), 1) - 914 self.assertEqual(root[0][0].get("test"), "works") + 926 self.assertEqual(len(root[0]), 1) + 927 self.assertEqual(root[0][0].tag, "othertag") -
915 # FIXME: would be nice to get some errors logged ... - 916 #self.assertTrue(len(parser.error_log) > 0, "error log is empty") - 917 -
919 # test that recover mode plays nicely with the no-id-dict setup - 920 parser = self.tag, "othertag") +
928 # FIXME: would be nice to get some errors logged ... + 929 #self.assertTrue(len(parser.error_log) > 0, "error log is empty") + 930 +
932 # test that recover mode plays nicely with the no-id-dict setup + 933 parser = self.etree.etree.XMLParser(recover=True, collect_ids=False) - 921 - 922 parser.feed('<?xml version=') - 923 parser.feed('"1.0"?><ro') - 924 parser.feed('ot xml:id="123"><') - 925 parser.feed('a test="works" xml:id=') - 926 parser.feed('"321"><othertag/></root') # <a> not closed! - 927 parser.feed('>') - 928 - 929 root = parser.XMLParser(recover=True, collect_ids=False) + 934 + 935 parser.feed('<?xml version=') + 936 parser.feed('"1.0"?><ro') + 937 parser.feed('ot xml:id="123"><') + 938 parser.feed('a test="works" xml:id=') + 939 parser.feed('"321"><othertag/></root') # <a> not closed! + 940 parser.feed('>') + 941 + 942 root = parser.close() - 930 - 931 self.assertEqual(root.close() + 943 + 944 self.assertEqual(root.tag, "root") - 932 self.assertEqual(len(root), 1) - 933 self.assertEqual(root[0].tag, "root") + 945 self.assertEqual(len(root), 1) + 946 self.assertEqual(root[0].tag, "a") - 934 self.assertEqual(root[0].tag, "a") + 947 self.assertEqual(root[0].get("test"), "works") - 935 self.assertEqual(root[0].get("test"), "works") + 948 self.assertEqual(root[0].attrib, { - 936 'test': 'works', - 937 '{http://www.w3.org/XML/1998/namespace}id': '321'}) - 938 self.assertEqual(len(root[0]), 1) - 939 self.assertEqual(root[0][0].tag, "othertag") -
940 # FIXME: would be nice to get some errors logged ... - 941 #self.assertTrue(len(parser.error_log) > 0, "error log is empty") - 942 -
944 assertEqual = self.assertEqual - 945 assertFalse = self.assertFalse - 946 - 947 events = [] - 948 class Target(object): - 949 def start(self, tag, attrib): - 950 events.append("start") - 951 assertFalse(attrib, { + 949 'test': 'works', + 950 '{http://www.w3.org/XML/1998/namespace}id': '321'}) + 951 self.assertEqual(len(root[0]), 1) + 952 self.assertEqual(root[0][0].tag, "othertag") +
953 # FIXME: would be nice to get some errors logged ... + 954 #self.assertTrue(len(parser.error_log) > 0, "error log is empty") + 955 +
957 assertEqual = self.assertEqual + 958 assertFalse = self.assertFalse + 959 + 960 events = [] + 961 class Target(object): + 962 def start(self, tag, attrib): + 963 events.append("start") + 964 assertFalse(attrib) - 952 assertEqual("TAG", attrib) + 965 assertEqual("TAG", tag) -
953 def end(self, tag): - 954 events.append("end") - 955 assertEqual("TAG", tag) + 966 def end(self, tag): + 967 events.append("end") + 968 assertEqual("TAG", tag) - 956 def close(self): - 957 return "DONE" # no Element! - 958 - 959 parser = self.tag) + 969 def close(self): + 970 return "DONE" # no Element! + 971 + 972 parser = self.etree.etree.XMLParser(target=Target()) - 960 tree = self.XMLParser(target=Target()) + 973 tree = self.etree.etree.ElementTree() - 961 - 962 self.assertRaises(TypeError, - 963 tree.ElementTree() + 974 + 975 self.assertRaises(TypeError, + 976 tree.parse, BytesIO("<TAG/>"), parser=parser) - 964 self.assertEqual(["start", "end"], events) - 965 -
967 # ET doesn't call .close() on errors - 968 events = [] - 969 class Target(object): - 970 def start(self, tag, attrib): - 971 events.append("start-" + parse, BytesIO("<TAG/>"), parser=parser) + 977 self.assertEqual(["start", "end"], events) +
978 +
980 # ET doesn't call .close() on errors + 981 events = [] + 982 class Target(object): + 983 def start(self, tag, attrib): + 984 events.append("start-" + tag) -
972 def end(self, tag): - 973 events.append("end-" + tag) + 985 def end(self, tag): + 986 events.append("end-" + tag) - 974 if tag) + 987 if tag == 'a': - 975 raise ValueError("dead and gone") - 976 def data(self, data): - 977 events.append("data-" + data) - 978 def close(self): - 979 events.append("close") - 980 return "DONE" - 981 - 982 parser = self.tag == 'a': + 988 raise ValueError("dead and gone") + 989 def data(self, data): + 990 events.append("data-" + data) + 991 def close(self): + 992 events.append("close") + 993 return "DONE" + 994 + 995 parser = self.etree.etree.XMLParser(target=Target()) - 983 - 984 try: - 985 parser.feed(_bytes('<root>A<a>ca</a>B</root>')) - 986 done = parser.XMLParser(target=Target()) + 996 + 997 try: + 998 parser.feed(_bytes('<root>A<a>ca</a>B</root>')) + 999 done = parser.close() - 987 self.fail("error expected, but parsing succeeded") - 988 except ValueError: - 989 done = 'value error received as expected' - 990 - 991 self.assertEqual(["start-root", "data-A", "start-a", - 992 "data-ca", "end-a", "close"], - 993 events) - 994 -
996 # ET doesn't call .close() on errors - 997 events = [] - 998 class Target(object): - 999 def start(self, tag, attrib): -1000 events.append("start-" + close() +1000 self.fail("error expected, but parsing succeeded") +1001 except ValueError: +1002 done = 'value error received as expected' +1003 +1004 self.assertEqual(["start-root", "data-A", "start-a", +1005 "data-ca", "end-a", "close"], +1006 events) +
1007 +
1009 # ET doesn't call .close() on errors +1010 events = [] +1011 class Target(object): +1012 def start(self, tag, attrib): +1013 events.append("start-" + tag) -
1001 def end(self, tag): -1002 events.append("end-" + tag) +1014 def end(self, tag): +1015 events.append("end-" + tag) -1003 if tag) +1016 if tag == 'a': -1004 raise ValueError("dead and gone") -1005 def data(self, data): -1006 events.append("data-" + data) -1007 def close(self): -1008 events.append("close") -1009 return "DONE" -1010 -1011 parser = self.tag == 'a': +1017 raise ValueError("dead and gone") +1018 def data(self, data): +1019 events.append("data-" + data) +1020 def close(self): +1021 events.append("close") +1022 return "DONE" +1023 +1024 parser = self.etree.etree.XMLParser(target=Target()) -1012 -1013 try: -1014 done = self.XMLParser(target=Target()) +1025 +1026 try: +1027 done = self.etree.etree.fromstring(_bytes('<root>A<a>ca</a>B</root>'), -1015 parser=parser) -1016 self.fail("error expected, but parsing succeeded") -1017 except ValueError: -1018 done = 'value error received as expected' -1019 -1020 self.assertEqual(["start-root", "data-A", "start-a", -1021 "data-ca", "end-a", "close"], -1022 events) -1023 -
1025 # test that target parsing works nicely with the no-id-hash setup -1026 events = [] -1027 class Target(object): -1028 def start(self, tag, attrib): -1029 events.append("start-" + fromstring(_bytes('<root>A<a>ca</a>B</root>'), +1028 parser=parser) +1029 self.fail("error expected, but parsing succeeded") +1030 except ValueError: +1031 done = 'value error received as expected' +1032 +1033 self.assertEqual(["start-root", "data-A", "start-a", +1034 "data-ca", "end-a", "close"], +1035 events) +
1036 +
1038 # test that target parsing works nicely with the no-id-hash setup +1039 events = [] +1040 class Target(object): +1041 def start(self, tag, attrib): +1042 events.append("start-" + tag) -
1030 def end(self, tag): -1031 events.append("end-" + tag) +1043 def end(self, tag): +1044 events.append("end-" + tag) -1032 def data(self, data): -1033 events.append("data-" + data) -1034 def comment(self, text): -1035 events.append("comment-" + tag) +1045 def data(self, data): +1046 events.append("data-" + data) +1047 def comment(self, text): +1048 events.append("comment-" + text) -1036 def close(self): -1037 return "DONE" -1038 -1039 parser = self.text) +1049 def close(self): +1050 return "DONE" +1051 +1052 parser = self.etree.etree.XMLParser(target=Target(), collect_ids=False) -1040 -1041 parser.feed(_bytes('<!--a--><root xml:id="123">A<!--b-->')) -1042 parser.feed(_bytes('<sub xml:id="321"/>B</root>')) -1043 done = parser.XMLParser(target=Target(), collect_ids=False) +1053 +1054 parser.feed(_bytes('<!--a--><root xml:id="123">A<!--b-->')) +1055 parser.feed(_bytes('<sub xml:id="321"/>B</root>')) +1056 done = parser.close() -1044 -1045 self.assertEqual("DONE", done) -1046 self.assertEqual(["comment-a", "start-root", "data-A", "comment-b", -1047 "start-sub", "end-sub", "data-B", "end-root"], -1048 events) -1049 -
1050 - def test_parser_target_comment(self): -
1051 events = [] -1052 class Target(object): -1053 def start(self, tag, attrib): -1054 events.append("start-" + close() +1057 +1058 self.assertEqual("DONE", done) +1059 self.assertEqual(["comment-a", "start-root", "data-A", "comment-b", +1060 "start-sub", "end-sub", "data-B", "end-root"], +1061 events) +
1062 +
1063 - def test_parser_target_comment(self): +
1064 events = [] +1065 class Target(object): +1066 def start(self, tag, attrib): +1067 events.append("start-" + tag) -
1055 def end(self, tag): -1056 events.append("end-" + tag) +1068 def end(self, tag): +1069 events.append("end-" + tag) -1057 def data(self, data): -1058 events.append("data-" + data) -1059 def comment(self, text): -1060 events.append("comment-" + tag) +1070 def data(self, data): +1071 events.append("data-" + data) +1072 def comment(self, text): +1073 events.append("comment-" + text) -1061 def close(self): -1062 return "DONE" -1063 -1064 parser = self.text) +1074 def close(self): +1075 return "DONE" +1076 +1077 parser = self.etree.etree.XMLParser(target=Target()) -1065 -1066 parser.feed(_bytes('<!--a--><root>A<!--b--><sub/><!--c-->B</root><!--d-->')) -1067 done = parser.XMLParser(target=Target()) +1078 +1079 parser.feed(_bytes('<!--a--><root>A<!--b--><sub/><!--c-->B</root><!--d-->')) +1080 done = parser.close() -1068 -1069 self.assertEqual("DONE", done) -1070 self.assertEqual(["comment-a", "start-root", "data-A", "comment-b", -1071 "start-sub", "end-sub", "comment-c", "data-B", -1072 "end-root", "comment-d"], -1073 events) -1074 -
1075 - def test_parser_target_pi(self): -
1076 events = [] -1077 class Target(object): -1078 def start(self, tag, attrib): -1079 events.append("start-" + close() +1081 +1082 self.assertEqual("DONE", done) +1083 self.assertEqual(["comment-a", "start-root", "data-A", "comment-b", +1084 "start-sub", "end-sub", "comment-c", "data-B", +1085 "end-root", "comment-d"], +1086 events) +
1087 +
1088 - def test_parser_target_pi(self): +
1089 events = [] +1090 class Target(object): +1091 def start(self, tag, attrib): +1092 events.append("start-" + tag) -
1080 def end(self, tag): -1081 events.append("end-" + tag) +1093 def end(self, tag): +1094 events.append("end-" + tag) -1082 def data(self, data): -1083 events.append("data-" + data) -1084 def pi(self, target, data): -1085 events.append("pi-" + target + "-" + data) -1086 def close(self): -1087 return "DONE" -1088 -1089 parser = self.tag) +1095 def data(self, data): +1096 events.append("data-" + data) +1097 def pi(self, target, data): +1098 events.append("pi-" + target + "-" + data) +1099 def close(self): +1100 return "DONE" +1101 +1102 parser = self.etree.etree.XMLParser(target=Target()) -1090 -1091 parser.feed(_bytes('<?test a?><root>A<?test b?>B</root><?test c?>')) -1092 done = parser.XMLParser(target=Target()) +1103 +1104 parser.feed(_bytes('<?test a?><root>A<?test b?>B</root><?test c?>')) +1105 done = parser.close() -1093 -1094 self.assertEqual("DONE", done) -1095 self.assertEqual(["pi-test-a", "start-root", "data-A", "pi-test-b", -1096 "data-B", "end-root", "pi-test-c"], -1097 events) -1098 -
1099 - def test_parser_target_cdata(self): -
1100 events = [] -1101 class Target(object): -1102 def start(self, tag, attrib): -1103 events.append("start-" + close() +1106 +1107 self.assertEqual("DONE", done) +1108 self.assertEqual(["pi-test-a", "start-root", "data-A", "pi-test-b", +1109 "data-B", "end-root", "pi-test-c"], +1110 events) +
1111 +
1112 - def test_parser_target_cdata(self): +
1113 events = [] +1114 class Target(object): +1115 def start(self, tag, attrib): +1116 events.append("start-" + tag) -
1104 def end(self, tag): -1105 events.append("end-" + tag) +1117 def end(self, tag): +1118 events.append("end-" + tag) -1106 def data(self, data): -1107 events.append("data-" + data) -1108 def close(self): -1109 return "DONE" -1110 -1111 parser = self.tag) +1119 def data(self, data): +1120 events.append("data-" + data) +1121 def close(self): +1122 return "DONE" +1123 +1124 parser = self.etree.etree.XMLParser(target=Target(), -1112 strip_cdata=False) -1113 -1114 parser.feed(_bytes('<root>A<a><![CDATA[ca]]></a>B</root>')) -1115 done = parser.XMLParser(target=Target(), +1125 strip_cdata=False) +1126 +1127 parser.feed(_bytes('<root>A<a><![CDATA[ca]]></a>B</root>')) +1128 done = parser.close() -1116 -1117 self.assertEqual("DONE", done) -1118 self.assertEqual(["start-root", "data-A", "start-a", -1119 "data-ca", "end-a", "data-B", "end-root"], -1120 events) -1121 -
1122 - def test_parser_target_recover(self): -
1123 events = [] -1124 class Target(object): -1125 def start(self, tag, attrib): -1126 events.append("start-" + close() +1129 +1130 self.assertEqual("DONE", done) +1131 self.assertEqual(["start-root", "data-A", "start-a", +1132 "data-ca", "end-a", "data-B", "end-root"], +1133 events) +
1134 +
1135 - def test_parser_target_recover(self): +
1136 events = [] +1137 class Target(object): +1138 def start(self, tag, attrib): +1139 events.append("start-" + tag) -
1127 def end(self, tag): -1128 events.append("end-" + tag) +1140 def end(self, tag): +1141 events.append("end-" + tag) -1129 def data(self, data): -1130 events.append("data-" + data) -1131 def close(self): -1132 events.append("close") -1133 return "DONE" -1134 -1135 parser = self.tag) +1142 def data(self, data): +1143 events.append("data-" + data) +1144 def close(self): +1145 events.append("close") +1146 return "DONE" +1147 +1148 parser = self.etree.etree.XMLParser(target=Target(), -1136 recover=True) -1137 -1138 parser.feed(_bytes('<root>A<a>ca</a>B</not-root>')) -1139 done = parser.XMLParser(target=Target(), +1149 recover=True) +1150 +1151 parser.feed(_bytes('<root>A<a>ca</a>B</not-root>')) +1152 done = parser.close() -1140 -1141 self.assertEqual("DONE", done) -1142 self.assertEqual(["start-root", "data-A", "start-a", -1143 "data-ca", "end-a", "data-B", -1144 "end-root", "close"], -1145 events) -1146 -
1147 - def test_iterwalk_tag(self): -
1148 iterwalk = self.close() +1153 +1154 self.assertEqual("DONE", done) +1155 self.assertEqual(["start-root", "data-A", "start-a", +1156 "data-ca", "end-a", "data-B", +1157 "end-root", "close"], +1158 events) +
1159 +
1160 - def test_iterwalk_tag(self): +
1161 iterwalk = self.etree.iterwalk -1149 root = self.etree.iterwalk +1162 root = self.etree.etree.XML(_bytes('<a><b><d/></b><c/></a>')) -1150 -1151 iterator = iterwalk(root, XML(_bytes('<a><b><d/></b><c/></a>')) +1163 +1164 iterator = iterwalk(root, tag="b", events=('start', 'end')) -1152 events = list(iterator) -1153 self.assertEqual( -1154 [('start', root[0]), ('end', root[0])], -1155 events) -
1156 -
1157 - def test_iterwalk_tag_all(self): -
1158 iterwalk = self.tag="b", events=('start', 'end')) +1165 events = list(iterator) +1166 self.assertEqual( +1167 [('start', root[0]), ('end', root[0])], +1168 events) +
1169 +
1170 - def test_iterwalk_tag_all(self): +
1171 iterwalk = self.etree.iterwalk -1159 root = self.etree.iterwalk +1172 root = self.etree.etree.XML(_bytes('<a><b><d/></b><c/></a>')) -1160 -1161 iterator = iterwalk(root, XML(_bytes('<a><b><d/></b><c/></a>')) +1173 +1174 iterator = iterwalk(root, tag="*", events=('start', 'end')) -1162 events = list(iterator) -1163 self.assertEqual( -1164 8, -1165 len(events)) -
1166 -
1167 - def test_iterwalk(self): -
1168 iterwalk = self.tag="*", events=('start', 'end')) +1175 events = list(iterator) +1176 self.assertEqual( +1177 8, +1178 len(events)) +
1179 +
1180 - def test_iterwalk(self): +
1181 iterwalk = self.etree.iterwalk -1169 root = self.etree.iterwalk +1182 root = self.etree.etree.XML(_bytes('<a><b></b><c/></a>')) -1170 -1171 events = list(iterwalk(root)) -1172 self.assertEqual( -1173 [('end', root[0]), ('end', root[1]), ('end', root)], -1174 events) -
1175 -
1177 iterwalk = self.XML(_bytes('<a><b></b><c/></a>')) +1183 +1184 events = list(iterwalk(root)) +1185 self.assertEqual( +1186 [('end', root[0]), ('end', root[1]), ('end', root)], +1187 events) +
1188 +
1190 iterwalk = self.etree.iterwalk -1178 root = self.etree.iterwalk +1191 root = self.etree.etree.XML( -1179 b'<!--C0--><a><!--Ca--><b><!--Cb--></b><!--Cc--><c/></a><!--C99-->') -1180 -1181 iterator = iterwalk(root, events=('start', 'end', 'comment')) -1182 events = list(iterator) -1183 self.assertEqual( -1184 [('start', root), ('comment', root[0]), -1185 ('start', root[1]), ('comment', root[1][0]), ('end', root[1]), -1186 ('comment', root[2]), ('start', root[3]), ('end', root[3]), -1187 ('end', root), -1188 ], -1189 events) -
1190 -
1191 - def test_iterwalk_comments_tree(self): -
1192 iterwalk = self.XML( +1192 b'<!--C0--><a><!--Ca--><b><!--Cb--></b><!--Cc--><c/></a><!--C99-->') +1193 +1194 iterator = iterwalk(root, events=('start', 'end', 'comment')) +1195 events = list(iterator) +1196 self.assertEqual( +1197 [('start', root), ('comment', root[0]), +1198 ('start', root[1]), ('comment', root[1][0]), ('end', root[1]), +1199 ('comment', root[2]), ('start', root[3]), ('end', root[3]), +1200 ('end', root), +1201 ], +1202 events) +
1203 +
1204 - def test_iterwalk_comments_tree(self): +
1205 iterwalk = self.etree.iterwalk -1193 root = self.etree.iterwalk +1206 root = self.etree.etree.XML( -1194 b'<!--C0--><a><!--Ca--><b><!--Cb--></b><!--Cc--><c/></a><!--C99-->') -1195 -1196 iterator = iterwalk(self.XML( +1207 b'<!--C0--><a><!--Ca--><b><!--Cb--></b><!--Cc--><c/></a><!--C99-->') +1208 +1209 iterator = iterwalk(self.etree.etree.ElementTree(root), events=('start', 'end', 'comment')) -1197 events = list(iterator) -1198 self.assertEqual( -1199 [('comment', root.getprevious()), -1200 ('start', root), ('comment', root[0]), # <a> -1201 ('start', root[1]), ('comment', root[1][0]), ('end', root[1]), # <b> -1202 ('comment', root[2]), ('start', root[3]), ('end', root[3]), # <c> -1203 ('end', root), ('comment', root.getnext()), -1204 ], -1205 events) -
1206 -
1208 iterwalk = self.ElementTree(root), events=('start', 'end', 'comment')) +1210 events = list(iterator) +1211 self.assertEqual( +1212 [('comment', root.getprevious()), +1213 ('start', root), ('comment', root[0]), # <a> +1214 ('start', root[1]), ('comment', root[1][0]), ('end', root[1]), # <b> +1215 ('comment', root[2]), ('start', root[3]), ('end', root[3]), # <c> +1216 ('end', root), ('comment', root.getnext()), +1217 ], +1218 events) +
1219 +
1221 iterwalk = self.etree.iterwalk -1209 root = self.etree.iterwalk +1222 root = self.etree.etree.XML( -1210 b'<?C0?><a><?Ca?><b><?Cb?></b><?Cc?><c/></a><?C99?>') -1211 -1212 iterator = iterwalk(root, events=('start', 'end', 'pi')) -1213 events = list(iterator) -1214 self.assertEqual( -1215 [('start', root), ('pi', root[0]), -1216 ('start', root[1]), ('pi', root[1][0]), ('end', root[1]), -1217 ('pi', root[2]), ('start', root[3]), ('end', root[3]), -1218 ('end', root), -1219 ], -1220 events) -
1221 -
1222 - def test_iterwalk_pis_tree(self): -
1223 iterwalk = self.XML( +1223 b'<?C0?><a><?Ca?><b><?Cb?></b><?Cc?><c/></a><?C99?>') +1224 +1225 iterator = iterwalk(root, events=('start', 'end', 'pi')) +1226 events = list(iterator) +1227 self.assertEqual( +1228 [('start', root), ('pi', root[0]), +1229 ('start', root[1]), ('pi', root[1][0]), ('end', root[1]), +1230 ('pi', root[2]), ('start', root[3]), ('end', root[3]), +1231 ('end', root), +1232 ], +1233 events) +
1234 +
1235 - def test_iterwalk_pis_tree(self): +
1236 iterwalk = self.etree.iterwalk -1224 root = self.etree.iterwalk +1237 root = self.etree.etree.XML( -1225 b'<?C0?><a><?Ca?><b><?Cb?></b><?Cc?><c/></a><?C99?>') -1226 -1227 iterator = iterwalk(self.XML( +1238 b'<?C0?><a><?Ca?><b><?Cb?></b><?Cc?><c/></a><?C99?>') +1239 +1240 iterator = iterwalk(self.etree.etree.ElementTree(root), events=('start', 'end', 'pi')) -1228 events = list(iterator) -1229 self.assertEqual( -1230 [('pi', root.getprevious()), -1231 ('start', root), ('pi', root[0]), # <a> -1232 ('start', root[1]), ('pi', root[1][0]), ('end', root[1]), # <b> -1233 ('pi', root[2]), ('start', root[3]), ('end', root[3]), # <c> -1234 ('end', root), ('pi', root.getnext()), -1235 ], -1236 events) -
1237 -
1239 iterwalk = self.ElementTree(root), events=('start', 'end', 'pi')) +1241 events = list(iterator) +1242 self.assertEqual( +1243 [('pi', root.getprevious()), +1244 ('start', root), ('pi', root[0]), # <a> +1245 ('start', root[1]), ('pi', root[1][0]), ('end', root[1]), # <b> +1246 ('pi', root[2]), ('start', root[3]), ('end', root[3]), # <c> +1247 ('end', root), ('pi', root.getnext()), +1248 ], +1249 events) +
1250 +
1252 iterwalk = self.etree.iterwalk -1240 root = self.etree.iterwalk +1253 root = self.etree.etree.XML( -1241 b'<!--C0--><?C0?><!--C1--><a><?Ca?><b><!--Cb--></b><?Cc?><c/></a><!--C99--><?C99?>') -1242 -1243 iterator = iterwalk(self.XML( +1254 b'<!--C0--><?C0?><!--C1--><a><?Ca?><b><!--Cb--></b><?Cc?><c/></a><!--C99--><?C99?>') +1255 +1256 iterator = iterwalk(self.etree.etree.ElementTree(root), events=('start', 'end', 'pi', 'comment')) -1244 events = list(iterator) -1245 self.assertEqual( -1246 [('comment', root.getprevious().getprevious().getprevious()), -1247 ('pi', root.getprevious().getprevious()), -1248 ('comment', root.getprevious()), -1249 ('start', root), ('pi', root[0]), # <a> -1250 ('start', root[1]), ('comment', root[1][0]), ('end', root[1]), # <b> -1251 ('pi', root[2]), ('start', root[3]), ('end', root[3]), # <c> -1252 ('end', root), ('comment', root.getnext()), ('pi', root.getnext().getnext()), -1253 ], -1254 events) -
1255 -
1257 iterwalk = self.ElementTree(root), events=('start', 'end', 'pi', 'comment')) +1257 events = list(iterator) +1258 self.assertEqual( +1259 [('comment', root.getprevious().getprevious().getprevious()), +1260 ('pi', root.getprevious().getprevious()), +1261 ('comment', root.getprevious()), +1262 ('start', root), ('pi', root[0]), # <a> +1263 ('start', root[1]), ('comment', root[1][0]), ('end', root[1]), # <b> +1264 ('pi', root[2]), ('start', root[3]), ('end', root[3]), # <c> +1265 ('end', root), ('comment', root.getnext()), ('pi', root.getnext().getnext()), +1266 ], +1267 events) +
1268 +
1270 iterwalk = self.etree.iterwalk -1258 root = self.etree.iterwalk +1271 root = self.etree.etree.XML( -1259 b'<!--C0--><?C0?><!--C1--><a><?Ca?><b><!--Cb--></b><?Cc?><c/></a><!--C99--><?C99?>') -1260 -1261 iterator = iterwalk(self.XML( +1272 b'<!--C0--><?C0?><!--C1--><a><?Ca?><b><!--Cb--></b><?Cc?><c/></a><!--C99--><?C99?>') +1273 +1274 iterator = iterwalk(self.etree.etree.ElementTree(root), events=('start', 'end')) -1262 events = list(iterator) -1263 self.assertEqual( -1264 [('start', root), # <a> -1265 ('start', root[1]), ('end', root[1]), # <b> -1266 ('start', root[3]), ('end', root[3]), # <c> -1267 ('end', root), -1268 ], -1269 events) -
1270 -
1271 - def test_iterwalk_start(self): -
1272 iterwalk = self.ElementTree(root), events=('start', 'end')) +1275 events = list(iterator) +1276 self.assertEqual( +1277 [('start', root), # <a> +1278 ('start', root[1]), ('end', root[1]), # <b> +1279 ('start', root[3]), ('end', root[3]), # <c> +1280 ('end', root), +1281 ], +1282 events) +
1283 +
1284 - def test_iterwalk_start(self): +
1285 iterwalk = self.etree.iterwalk -1273 root = self.etree.iterwalk +1286 root = self.etree.etree.XML(_bytes('<a><b></b><c/></a>')) -1274 -1275 iterator = iterwalk(root, events=('start',)) -1276 events = list(iterator) -1277 self.assertEqual( -1278 [('start', root), ('start', root[0]), ('start', root[1])], -1279 events) -
1280 -
1281 - def test_iterwalk_start_end(self): -
1282 iterwalk = self.XML(_bytes('<a><b></b><c/></a>')) +1287 +1288 iterator = iterwalk(root, events=('start',)) +1289 events = list(iterator) +1290 self.assertEqual( +1291 [('start', root), ('start', root[0]), ('start', root[1])], +1292 events) +
1293 +
1294 - def test_iterwalk_start_end(self): +
1295 iterwalk = self.etree.iterwalk -1283 root = self.etree.iterwalk +1296 root = self.etree.etree.XML(_bytes('<a><b></b><c/></a>')) -1284 -1285 iterator = iterwalk(root, events=('start','end')) -1286 events = list(iterator) -1287 self.assertEqual( -1288 [('start', root), ('start', root[0]), ('end', root[0]), -1289 ('start', root[1]), ('end', root[1]), ('end', root)], -1290 events) -
1291 -
1292 - def test_iterwalk_start_tags(self): -
1293 iterwalk = self.XML(_bytes('<a><b></b><c/></a>')) +1297 +1298 iterator = iterwalk(root, events=('start','end')) +1299 events = list(iterator) +1300 self.assertEqual( +1301 [('start', root), ('start', root[0]), ('end', root[0]), +1302 ('start', root[1]), ('end', root[1]), ('end', root)], +1303 events) +
1304 +
1305 - def test_iterwalk_start_tags(self): +
1306 iterwalk = self.etree.iterwalk -1294 root = self.etree.iterwalk +1307 root = self.etree.etree.XML(_bytes('<a><b></b><c/><b><d/></b></a>')) -1295 -1296 iterator = iterwalk(root, events=('start',), XML(_bytes('<a><b></b><c/><b><d/></b></a>')) +1308 +1309 iterator = iterwalk(root, events=('start',), tag='b') -1297 events = list(iterator) -1298 self.assertEqual( -1299 [('start', root[0]), ('start', root[2])], -1300 events) -
1301 -
1303 iterwalk = self.tag='b') +1310 events = list(iterator) +1311 self.assertEqual( +1312 [('start', root[0]), ('start', root[2])], +1313 events) +
1314 +
1316 iterwalk = self.etree.iterwalk -1304 root = self.etree.iterwalk +1317 root = self.etree.etree.XML(_bytes('<a><b></b><c/><b><d/></b></a>')) -1305 -1306 iterator = iterwalk(root, events=('start', 'end'), XML(_bytes('<a><b></b><c/><b><d/></b></a>')) +1318 +1319 iterator = iterwalk(root, events=('start', 'end'), tag='b') -1307 events = list(iterator) -1308 self.assertEqual( -1309 [('start', root[0]), ('end', root[0]), ('start', root[2]), ('end', root[2])], -1310 events) -
1311 -
1313 iterwalk = self.tag='b') +1320 events = list(iterator) +1321 self.assertEqual( +1322 [('start', root[0]), ('end', root[0]), ('start', root[2]), ('end', root[2])], +1323 events) +
1324 +
1326 iterwalk = self.etree.iterwalk -1314 root = self.etree.iterwalk +1327 root = self.etree.etree.XML(_bytes('<a><b></b><c/><b><d/></b></a>')) -1315 -1316 iterator = iterwalk(root, events=('start', 'end'), XML(_bytes('<a><b></b><c/><b><d/></b></a>')) +1328 +1329 iterator = iterwalk(root, events=('start', 'end'), tag=('b', 'a')) -1317 events = list(iterator) -1318 self.assertEqual( -1319 [('start', root), -1320 ('start', root[0]), ('end', root[0]), -1321 ('start', root[2]), ('end', root[2]), -1322 ('end', root), -1323 ], -1324 events) -
1325 -
1326 - def test_iterwalk_clear(self): -
1327 iterwalk = self.tag=('b', 'a')) +1330 events = list(iterator) +1331 self.assertEqual( +1332 [('start', root), +1333 ('start', root[0]), ('end', root[0]), +1334 ('start', root[2]), ('end', root[2]), +1335 ('end', root), +1336 ], +1337 events) +
1338 +
1339 - def test_iterwalk_clear(self): +
1340 iterwalk = self.etree.iterwalk -1328 root = self.etree.iterwalk +1341 root = self.etree.etree.XML(_bytes('<a><b></b><c/></a>')) -1329 -1330 iterator = iterwalk(root) -1331 for event, elem in iterator: -1332 elem.XML(_bytes('<a><b></b><c/></a>')) +1342 +1343 iterator = iterwalk(root) +1344 for event, elem in iterator: +1345 elem.clear() -1333 -1334 self.assertEqual(0, -1335 len(root)) -
1336 -
1337 - def test_iterwalk_attrib_ns(self): -
1338 iterwalk = self.clear() +1346 +1347 self.assertEqual(0, +1348 len(root)) +
1349 +
1350 - def test_iterwalk_attrib_ns(self): +
1351 iterwalk = self.etree.iterwalk -1339 root = self.etree.iterwalk +1352 root = self.etree.etree.XML(_bytes('<a xmlns="ns1"><b><c xmlns="ns2"/></b></a>')) -1340 -1341 attr_name = '{testns}bla' -1342 events = [] -1343 iterator = iterwalk(root, events=('start','end','start-ns','end-ns')) -1344 for event, elem in iterator: -1345 events.append(event) -1346 if event == 'start': -1347 if elem.XML(_bytes('<a xmlns="ns1"><b><c xmlns="ns2"/></b></a>')) +1353 +1354 attr_name = '{testns}bla' +1355 events = [] +1356 iterator = iterwalk(root, events=('start','end','start-ns','end-ns')) +1357 for event, elem in iterator: +1358 events.append(event) +1359 if event == 'start': +1360 if elem.tag != '{ns1}a': -1348 elem.tag != '{ns1}a': +1361 elem.set(attr_name, 'value') -1349 -1350 self.assertEqual( -1351 ['start-ns', 'start', 'start', 'start-ns', 'start', -1352 'end', 'end-ns', 'end', 'end', 'end-ns'], -1353 events) -1354 -1355 self.assertEqual( -1356 None, -1357 root.set(attr_name, 'value') +1362 +1363 self.assertEqual( +1364 ['start-ns', 'start', 'start', 'start-ns', 'start', +1365 'end', 'end-ns', 'end', 'end', 'end-ns'], +1366 events) +1367 +1368 self.assertEqual( +1369 None, +1370 root.get(attr_name)) -1358 self.assertEqual( -1359 'value', -1360 root[0].get(attr_name)) +1371 self.assertEqual( +1372 'value', +1373 root[0].get(attr_name)) -
1361 -
1362 - def test_iterwalk_end_skip(self): -
1363 iterwalk = self.get(attr_name)) +
1374 +
1375 - def test_iterwalk_end_skip(self): +
1376 iterwalk = self.etree.iterwalk -1364 root = self.etree.iterwalk +1377 root = self.etree.etree.XML(_bytes('<a><b><c/></b><d><e/></d></a>')) -1365 -1366 iterator = iterwalk(root) -1367 tags = [] -1368 for event, elem in iterator: -1369 tags.append(elem.XML(_bytes('<a><b><c/></b><d><e/></d></a>')) +1378 +1379 iterator = iterwalk(root) +1380 tags = [] +1381 for event, elem in iterator: +1382 tags.append(elem.tag) -1370 # requesting a skip after an 'end' event should never have an effect -1371 iterator.skip_subtree() -1372 -1373 self.assertEqual(['c', 'b', 'e', 'd', 'a'], tags) -
1374 -
1376 iterwalk = self.tag) +1383 # requesting a skip after an 'end' event should never have an effect +1384 iterator.skip_subtree() +1385 +1386 self.assertEqual(['c', 'b', 'e', 'd', 'a'], tags) +
1387 +
1389 iterwalk = self.etree.iterwalk -1377 root = self.etree.iterwalk +1390 root = self.etree.etree.XML(_bytes('<a><b><c/></b><d><e/></d></a>')) -1378 -1379 iterator = iterwalk(root, events=('start', 'end')) -1380 tags = [] -1381 for event, elem in iterator: -1382 tags.append((event, elem.XML(_bytes('<a><b><c/></b><d><e/></d></a>')) +1391 +1392 iterator = iterwalk(root, events=('start', 'end')) +1393 tags = [] +1394 for event, elem in iterator: +1395 tags.append((event, elem.tag)) -1383 if elem.tag)) +1396 if elem.tag in ('b', 'e'): -1384 # skipping should only have an effect on 'start', not on 'end' -1385 iterator.skip_subtree() -1386 -1387 self.assertEqual( -1388 [('start', 'a'), -1389 ('start', 'b'), ('end', 'b'), # ignored child 'c' -1390 ('start', 'd'), -1391 ('start', 'e'), ('end', 'e'), -1392 ('end', 'd'), -1393 ('end', 'a')], -1394 tags) -
1395 -
1396 - def test_iterwalk_ns_skip(self): -
1397 iterwalk = self.tag in ('b', 'e'): +1397 # skipping should only have an effect on 'start', not on 'end' +1398 iterator.skip_subtree() +1399 +1400 self.assertEqual( +1401 [('start', 'a'), +1402 ('start', 'b'), ('end', 'b'), # ignored child 'c' +1403 ('start', 'd'), +1404 ('start', 'e'), ('end', 'e'), +1405 ('end', 'd'), +1406 ('end', 'a')], +1407 tags) +
1408 +
1409 - def test_iterwalk_ns_skip(self): +
1410 iterwalk = self.etree.iterwalk -1398 root = self.etree.iterwalk +1411 root = self.etree.etree.XML(_bytes( -1399 '<a xmlns="ns1"><b xmlns="nsb"><c xmlns="ns2"/></b><d xmlns="ns2"><e/></d></a>')) -1400 -1401 events = [] -1402 iterator = iterwalk(root, events=('start','start-ns','end-ns')) -1403 for event, elem in iterator: -1404 if event in ('start-ns', 'end-ns'): -1405 events.append((event, elem)) -1406 if event == 'start-ns' and elem == ('', 'nsb'): -1407 events.append('skip') -1408 iterator.skip_subtree() -1409 else: -1410 events.append((event, elem.XML(_bytes( +1412 '<a xmlns="ns1"><b xmlns="nsb"><c xmlns="ns2"/></b><d xmlns="ns2"><e/></d></a>')) +1413 +1414 events = [] +1415 iterator = iterwalk(root, events=('start','start-ns','end-ns')) +1416 for event, elem in iterator: +1417 if event in ('start-ns', 'end-ns'): +1418 events.append((event, elem)) +1419 if event == 'start-ns' and elem == ('', 'nsb'): +1420 events.append('skip') +1421 iterator.skip_subtree() +1422 else: +1423 events.append((event, elem.tag)) -1411 -1412 self.assertEqual( -1413 [('start-ns', ('', 'ns1')), -1414 ('start', '{ns1}a'), -1415 ('start-ns', ('', 'nsb')), -1416 'skip', -1417 ('start', '{nsb}b'), -1418 ('end-ns', None), -1419 ('start-ns', ('', 'ns2')), -1420 ('start', '{ns2}d'), -1421 ('start', '{ns2}e'), -1422 ('end-ns', None), -1423 ('end-ns', None) -1424 ], -1425 events) -
1426 -
1427 - def test_iterwalk_getiterator(self): -
1428 iterwalk = self.tag)) +1424 +1425 self.assertEqual( +1426 [('start-ns', ('', 'ns1')), +1427 ('start', '{ns1}a'), +1428 ('start-ns', ('', 'nsb')), +1429 'skip', +1430 ('start', '{nsb}b'), +1431 ('end-ns', None), +1432 ('start-ns', ('', 'ns2')), +1433 ('start', '{ns2}d'), +1434 ('start', '{ns2}e'), +1435 ('end-ns', None), +1436 ('end-ns', None) +1437 ], +1438 events) +
1439 +
1440 - def test_iterwalk_getiterator(self): +
1441 iterwalk = self.etree.iterwalk -1429 root = self.etree.iterwalk +1442 root = self.etree.etree.XML(_bytes('<a><b><d/></b><c/></a>')) -1430 -1431 counts = [] -1432 for event, elem in iterwalk(root): -1433 counts.append(len(list(elem.getiterator()))) -1434 self.assertEqual( -1435 [1,2,1,4], -1436 counts) -
1437 -
1438 - def test_resolve_string_dtd(self): -
1439 XML(_bytes('<a><b><d/></b><c/></a>')) +1443 +1444 counts = [] +1445 for event, elem in iterwalk(root): +1446 counts.append(len(list(elem.getiterator()))) +1447 self.assertEqual( +1448 [1,2,1,4], +1449 counts) +
1450 +
1451 - def test_resolve_string_dtd(self): +
1452 parse = self.parse = self.etree.etree.parse -1440 parser = self.parse +1453 parser = self.etree.etree.XMLParser(dtd_validation=True) -1441 assertEqual = self.assertEqual -1442 test_url = _str("__nosuch.dtd") -1443 -1444 class MyResolver(self.etree.Resolver): -1445 def resolve(self, url, id, context): -1446 assertEqual(url, test_url) -1447 return self.resolve_string( -1448 _str('''<!ENTITY myentity "%s"> -1449 <!ELEMENT doc ANY>''') % url, context) -
1450 -1451 parser.resolvers.XMLParser(dtd_validation=True) +1454 assertEqual = self.assertEqual +1455 test_url = _str("__nosuch.dtd") +1456 +1457 class MyResolver(self.etree.Resolver): +1458 def resolve(self, url, id, context): +1459 assertEqual(url, test_url) +1460 return self.resolve_string( +1461 _str('''<!ENTITY myentity "%s"> +1462 <!ELEMENT doc ANY>''') % url, context) +1463 +1464 parser.resolvers.add(MyResolver()) -1452 -1453 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url -1454 tree = add(MyResolver()) +1465 +1466 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url +1467 tree = parse(StringIO(xml), parser) -1455 root = tree.getroot() -1456 self.assertEqual(root.parse(StringIO(xml), parser) +1468 root = tree.getroot() +1469 self.assertEqual(root.text, test_url) -1457 -
1458 - def test_resolve_bytes_dtd(self): -
1459 text, test_url) +
1470 +
1471 - def test_resolve_bytes_dtd(self): +
1472 parse = self.parse = self.etree.etree.parse -1460 parser = self.parse +1473 parser = self.etree.etree.XMLParser(dtd_validation=True) -1461 assertEqual = self.assertEqual -1462 test_url = _str("__nosuch.dtd") -1463 -1464 class MyResolver(self.etree.Resolver): -1465 def resolve(self, url, id, context): -1466 assertEqual(url, test_url) -1467 return self.resolve_string( -1468 (_str('''<!ENTITY myentity "%s"> -1469 <!ELEMENT doc ANY>''') % url).encode('utf-8'), -1470 context) -
1471 -1472 parser.resolvers.XMLParser(dtd_validation=True) +1474 assertEqual = self.assertEqual +1475 test_url = _str("__nosuch.dtd") +1476 +1477 class MyResolver(self.etree.Resolver): +1478 def resolve(self, url, id, context): +1479 assertEqual(url, test_url) +1480 return self.resolve_string( +1481 (_str('''<!ENTITY myentity "%s"> +1482 <!ELEMENT doc ANY>''') % url).encode('utf-8'), +1483 context) +1484 +1485 parser.resolvers.add(MyResolver()) -1473 -1474 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url -1475 tree = add(MyResolver()) +1486 +1487 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url +1488 tree = parse(StringIO(xml), parser) -1476 root = tree.getroot() -1477 self.assertEqual(root.parse(StringIO(xml), parser) +1489 root = tree.getroot() +1490 self.assertEqual(root.text, test_url) -1478 -
1479 - def test_resolve_filelike_dtd(self): -
1480 text, test_url) +
1491 +
1492 - def test_resolve_filelike_dtd(self): +
1493 parse = self.parse = self.etree.etree.parse -1481 parser = self.parse +1494 parser = self.etree.etree.XMLParser(dtd_validation=True) -1482 assertEqual = self.assertEqual -1483 test_url = _str("__nosuch.dtd") -1484 -1485 class MyResolver(self.etree.Resolver): -1486 def resolve(self, url, id, context): -1487 assertEqual(url, test_url) -1488 return self.resolve_file( -1489 SillyFileLike( -1490 _str('''<!ENTITY myentity "%s"> -1491 <!ELEMENT doc ANY>''') % url), context) -
1492 -1493 parser.resolvers.XMLParser(dtd_validation=True) +1495 assertEqual = self.assertEqual +1496 test_url = _str("__nosuch.dtd") +1497 +1498 class MyResolver(self.etree.Resolver): +1499 def resolve(self, url, id, context): +1500 assertEqual(url, test_url) +1501 return self.resolve_file( +1502 SillyFileLike( +1503 _str('''<!ENTITY myentity "%s"> +1504 <!ELEMENT doc ANY>''') % url), context) +1505 +1506 parser.resolvers.add(MyResolver()) -1494 -1495 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url -1496 tree = add(MyResolver()) +1507 +1508 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url +1509 tree = parse(StringIO(xml), parser) -1497 root = tree.getroot() -1498 self.assertEqual(root.parse(StringIO(xml), parser) +1510 root = tree.getroot() +1511 self.assertEqual(root.text, test_url) -1499 -
1500 - def test_resolve_filename_dtd(self): -
1501 text, test_url) +
1512 +
1513 - def test_resolve_filename_dtd(self): +
1514 parse = self.parse = self.etree.etree.parse -1502 parser = self.parse +1515 parser = self.etree.etree.XMLParser(attribute_defaults=True) -1503 assertEqual = self.assertEqual -1504 test_url = _str("__nosuch.dtd") -1505 -1506 class MyResolver(self.etree.Resolver): -1507 def resolve(self, url, id, context): -1508 assertEqual(url, test_url) -1509 return self.resolve_filename( -1510 fileInTestDir('test.dtd'), context) -
1511 -1512 parser.resolvers.XMLParser(attribute_defaults=True) +1516 assertEqual = self.assertEqual +1517 test_url = _str("__nosuch.dtd") +1518 +1519 class MyResolver(self.etree.Resolver): +1520 def resolve(self, url, id, context): +1521 assertEqual(url, test_url) +1522 return self.resolve_filename( +1523 fileInTestDir('test.dtd'), context) +1524 +1525 parser.resolvers.add(MyResolver()) -1513 -1514 xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url -1515 tree = add(MyResolver()) +1526 +1527 xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url +1528 tree = parse(StringIO(xml), parser) -1516 root = tree.getroot() -1517 self.assertEqual( -1518 root.parse(StringIO(xml), parser) +1529 root = tree.getroot() +1530 self.assertEqual( +1531 root.attrib, {'default': 'valueA'}) -1519 self.assertEqual( -1520 root[0].attrib, {'default': 'valueA'}) +1532 self.assertEqual( +1533 root[0].attrib, {'default': 'valueB'}) -1521 -
1523 attrib, {'default': 'valueB'}) +
1534 +
1536 parse = self.parse = self.etree.etree.parse -1524 parser = self.parse +1537 parser = self.etree.etree.XMLParser(attribute_defaults=True) -1525 assertEqual = self.assertEqual -1526 test_url = _str("__nosuch.dtd") -1527 -1528 class MyResolver(self.etree.Resolver): -1529 def resolve(self, url, id, context): -1530 expected = fileUrlInTestDir(test_url) -1531 url = url.replace('file://', 'file:') # depends on libxml2 version -1532 expected = expected.replace('file://', 'file:') -1533 assertEqual(url, expected) -1534 return self.resolve_filename( -1535 fileUrlInTestDir('test.dtd'), context) -
1536 -1537 parser.resolvers.XMLParser(attribute_defaults=True) +1538 assertEqual = self.assertEqual +1539 test_url = _str("__nosuch.dtd") +1540 +1541 class MyResolver(self.etree.Resolver): +1542 def resolve(self, url, id, context): +1543 expected = fileUrlInTestDir(test_url) +1544 url = url.replace('file://', 'file:') # depends on libxml2 version +1545 expected = expected.replace('file://', 'file:') +1546 assertEqual(url, expected) +1547 return self.resolve_filename( +1548 fileUrlInTestDir('test.dtd'), context) +1549 +1550 parser.resolvers.add(MyResolver()) -1538 -1539 xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url -1540 tree = add(MyResolver()) +1551 +1552 xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url +1553 tree = parse(StringIO(xml), parser, -1541 base_url=fileUrlInTestDir('__test.xml')) -1542 root = tree.getroot() -1543 self.assertEqual( -1544 root.parse(StringIO(xml), parser, +1554 base_url=fileUrlInTestDir('__test.xml')) +1555 root = tree.getroot() +1556 self.assertEqual( +1557 root.attrib, {'default': 'valueA'}) -1545 self.assertEqual( -1546 root[0].attrib, {'default': 'valueA'}) +1558 self.assertEqual( +1559 root[0].attrib, {'default': 'valueB'}) -1547 -
1548 - def test_resolve_file_dtd(self): -
1549 attrib, {'default': 'valueB'}) +
1560 +
1561 - def test_resolve_file_dtd(self): +
1562 parse = self.parse = self.etree.etree.parse -1550 parser = self.parse +1563 parser = self.etree.etree.XMLParser(attribute_defaults=True) -1551 assertEqual = self.assertEqual -1552 test_url = _str("__nosuch.dtd") -1553 -1554 class MyResolver(self.etree.Resolver): -1555 def resolve(self, url, id, context): -1556 assertEqual(url, test_url) -1557 return self.resolve_file( -1558 open(fileInTestDir('test.dtd'), 'rb'), context) -
1559 -1560 parser.resolvers.XMLParser(attribute_defaults=True) +1564 assertEqual = self.assertEqual +1565 test_url = _str("__nosuch.dtd") +1566 +1567 class MyResolver(self.etree.Resolver): +1568 def resolve(self, url, id, context): +1569 assertEqual(url, test_url) +1570 return self.resolve_file( +1571 open(fileInTestDir('test.dtd'), 'rb'), context) +1572 +1573 parser.resolvers.add(MyResolver()) -1561 -1562 xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url -1563 tree = add(MyResolver()) +1574 +1575 xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url +1576 tree = parse(StringIO(xml), parser) -1564 root = tree.getroot() -1565 self.assertEqual( -1566 root.parse(StringIO(xml), parser) +1577 root = tree.getroot() +1578 self.assertEqual( +1579 root.attrib, {'default': 'valueA'}) -1567 self.assertEqual( -1568 root[0].attrib, {'default': 'valueA'}) +1580 self.assertEqual( +1581 root[0].attrib, {'default': 'valueB'}) -1569 -
1570 - def test_resolve_empty(self): -
1571 attrib, {'default': 'valueB'}) +
1582 +
1583 - def test_resolve_empty(self): +
1584 parse = self.parse = self.etree.etree.parse -1572 parser = self.parse +1585 parser = self.etree.etree.XMLParser(load_dtd=True) -1573 assertEqual = self.assertEqual -1574 test_url = _str("__nosuch.dtd") -1575 -1576 class check(object): -1577 resolved = False -
1578 -1579 class MyResolver(self.etree.Resolver): -1580 def resolve(self, url, id, context): -1581 assertEqual(url, test_url) -1582 check.resolved = True -1583 return self.resolve_empty(context) -1584 -1585 parser.resolvers.XMLParser(load_dtd=True) +1586 assertEqual = self.assertEqual +1587 test_url = _str("__nosuch.dtd") +1588 +1589 class check(object): +1590 resolved = False +1591 +1592 class MyResolver(self.etree.Resolver): +1593 def resolve(self, url, id, context): +1594 assertEqual(url, test_url) +1595 check.resolved = True +1596 return self.resolve_empty(context) +1597 +1598 parser.resolvers.add(MyResolver()) -1586 -1587 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url -1588 self.assertRaises(add(MyResolver()) +1599 +1600 xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url +1601 self.assertRaises(etree.XMLSyntaxError, etree.XMLSyntaxError, parse, StringIO(xml), parser) -1589 self.assertTrue(check.resolved) -1590 -
1591 - def test_resolve_error(self): -
1592 parse, StringIO(xml), parser) +1602 self.assertTrue(check.resolved) +
1603 +
1604 - def test_resolve_error(self): +
1605 parse = self.parse = self.etree.etree.parse -1593 parser = self.parse +1606 parser = self.etree.etree.XMLParser(dtd_validation=True) -1594 -1595 class _LocalException(Exception): -1596 pass -
1597 -1598 class MyResolver(self.etree.Resolver): -1599 def resolve(self, url, id, context): -1600 raise _LocalException -1601 -1602 parser.resolvers.XMLParser(dtd_validation=True) +1607 +1608 class _LocalException(Exception): +1609 pass +1610 +1611 class MyResolver(self.etree.Resolver): +1612 def resolve(self, url, id, context): +1613 raise _LocalException +1614 +1615 parser.resolvers.add(MyResolver()) -1603 -1604 xml = '<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>' -1605 self.assertRaises(_LocalException, add(MyResolver()) +1616 +1617 xml = '<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>' +1618 self.assertRaises(_LocalException, parse, BytesIO(xml), parser) -1606 -
1607 - def test_entity_parse(self): -
1608 parse, BytesIO(xml), parser) +
1619 +
1620 - def test_entity_parse(self): +
1621 parse = self.parse = self.etree.etree.parse -1609 tostring = self.parse +1622 tostring = self.etree.tostring -1610 parser = self.etree.tostring +1623 parser = self.etree.etree.XMLParser(resolve_entities=False) -1611 Entity = self.XMLParser(resolve_entities=False) +1624 Entity = self.etree.Entity -1612 -1613 xml = _bytes('<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>') -1614 tree = etree.Entity +1625 +1626 xml = _bytes('<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>') +1627 tree = parse(BytesIO(xml), parser) -1615 root = tree.getroot() -1616 self.assertEqual(root[0].parse(BytesIO(xml), parser) +1628 root = tree.getroot() +1629 self.assertEqual(root[0].tag, Entity) -1617 self.assertEqual(root[0].tag, Entity) +1630 self.assertEqual(root[0].text, "&myentity;") -1618 self.assertEqual(root[0].tail, None) -1619 self.assertEqual(root[0].text, "&myentity;") +1631 self.assertEqual(root[0].tail, None) +1632 self.assertEqual(root[0].name, "myentity") -1620 -1621 self.assertEqual(_bytes('<doc>&myentity;</doc>'), -1622 tostring(root)) -
1623 -
1624 - def test_entity_restructure(self): -
1625 xml = _bytes('''<!DOCTYPE root [ <!ENTITY nbsp "&#160;"> ]> -1626 <root> -1627 <child1/> -1628 <child2/> -1629 <child3>&nbsp;</child3> -1630 </root>''') -1631 -1632 parser = self.name, "myentity") +1633 +1634 self.assertEqual(_bytes('<doc>&myentity;</doc>'), +1635 tostring(root)) +
1636 +
1637 - def test_entity_restructure(self): +
1638 xml = _bytes('''<!DOCTYPE root [ <!ENTITY nbsp "&#160;"> ]> +1639 <root> +1640 <child1/> +1641 <child2/> +1642 <child3>&nbsp;</child3> +1643 </root>''') +1644 +1645 parser = self.etree.etree.XMLParser(resolve_entities=False) -1633 root = XMLParser(resolve_entities=False) +1646 root = etree.etree.fromstring(xml, parser) -1634 self.assertEqual([ el.fromstring(xml, parser) +1647 self.assertEqual([ el.tag for el in root ], -1635 ['child1', 'child2', 'child3']) -1636 -1637 root[0] = root[-1] -1638 self.assertEqual([ el.tag for el in root ], +1648 ['child1', 'child2', 'child3']) +1649 +1650 root[0] = root[-1] +1651 self.assertEqual([ el.tag for el in root ], -1639 ['child3', 'child2']) -1640 self.assertEqual(root[0][0].tag for el in root ], +1652 ['child3', 'child2']) +1653 self.assertEqual(root[0][0].text, '&nbsp;') -1641 self.assertEqual(root[0][0].text, '&nbsp;') +1654 self.assertEqual(root[0][0].name, 'nbsp') -
1642 -
1643 - def test_entity_append(self): -
1644 Entity = self.name, 'nbsp') +
1655 +
1656 - def test_entity_append(self): +
1657 Entity = self.etree.Entity -1645 etree.Entity +1658 Element = self.Element = self.etree.etree.Element -1646 tostring = self.Element +1659 tostring = self.etree.tostring -1647 -1648 root = etree.tostring +1660 +1661 root = Element("root") -1649 root.append( Entity("test") ) -1650 -1651 self.assertEqual(root[0].Element("root") +1662 root.append( Entity("test") ) +1663 +1664 self.assertEqual(root[0].tag, Entity) -1652 self.assertEqual(root[0].tag, Entity) +1665 self.assertEqual(root[0].text, "&test;") -1653 self.assertEqual(root[0].tail, None) -1654 self.assertEqual(root[0].text, "&test;") +1666 self.assertEqual(root[0].tail, None) +1667 self.assertEqual(root[0].name, "test") -1655 -1656 self.assertEqual(_bytes('<root>&test;</root>'), -1657 tostring(root)) -
1658 -
1659 - def test_entity_append_parsed(self): -
1660 Entity = self.name, "test") +1668 +1669 self.assertEqual(_bytes('<root>&test;</root>'), +1670 tostring(root)) +
1671 +
1672 - def test_entity_append_parsed(self): +
1673 Entity = self.etree.Entity -1661 etree.Entity +1674 Element = self.Element = self.etree.etree.Element -1662 parser = self.Element +1675 parser = self.etree.etree.XMLParser(resolve_entities=False) -1663 entity = self.XMLParser(resolve_entities=False) +1676 entity = self.etree.etree.XML('''<!DOCTYPE data [ -1664 <!ENTITY a "a"> -1665 <!ENTITY b "&a;"> -1666 ]> -1667 <data>&b;</data> -1668 ''', parser) -1669 -1670 el = XML('''<!DOCTYPE data [ +1677 <!ENTITY a "a"> +1678 <!ENTITY b "&a;"> +1679 ]> +1680 <data>&b;</data> +1681 ''', parser) +1682 +1683 el = Element('test') -1671 el.append(entity) -1672 self.assertEqual(el.Element('test') +1684 el.append(entity) +1685 self.assertEqual(el.tag, 'test') -1673 self.assertEqual(el[0].tag, 'test') +1686 self.assertEqual(el[0].tag, 'data') -1674 self.assertEqual(el[0][0].tag, 'data') +1687 self.assertEqual(el[0][0].tag, Entity) -1675 self.assertEqual(el[0][0].tag, Entity) +1688 self.assertEqual(el[0][0].name, 'b') -
1676 -
1677 - def test_entity_values(self): -
1678 Entity = self.name, 'b') +
1689 +
1690 - def test_entity_values(self): +
1691 Entity = self.etree.Entity -1679 self.assertEqual(Entity("test").etree.Entity +1692 self.assertEqual(Entity("test").text, '&test;') -1680 self.assertEqual(Entity("#17683").text, '&test;') +1693 self.assertEqual(Entity("#17683").text, '&#17683;') -1681 self.assertEqual(Entity("#x1768").text, '&#17683;') +1694 self.assertEqual(Entity("#x1768").text, '&#x1768;') -1682 self.assertEqual(Entity("#x98AF").text, '&#x1768;') +1695 self.assertEqual(Entity("#x98AF").text, '&#x98AF;') -
1683 -
1684 - def test_entity_error(self): -
1685 Entity = self.text, '&#x98AF;') +
1696 +
1697 - def test_entity_error(self): +
1698 Entity = self.etree.Entity -1686 self.assertRaises(ValueError, Entity, 'a b c') -1687 self.assertRaises(ValueError, Entity, 'a,b') -1688 self.assertRaises(ValueError, Entity, 'a\0b') -1689 self.assertRaises(ValueError, Entity, '#abc') -1690 self.assertRaises(ValueError, Entity, '#xxyz') -
1691 -
1692 - def test_cdata(self): -
1693 CDATA = self.etree.Entity +1699 self.assertRaises(ValueError, Entity, 'a b c') +1700 self.assertRaises(ValueError, Entity, 'a,b') +1701 self.assertRaises(ValueError, Entity, 'a\0b') +1702 self.assertRaises(ValueError, Entity, '#abc') +1703 self.assertRaises(ValueError, Entity, '#xxyz') +
1704 +
1705 - def test_cdata(self): +
1706 CDATA = self.etree.CDATA -1694 etree.CDATA +1707 Element = self.Element = self.etree.etree.Element -1695 tostring = self.Element +1708 tostring = self.etree.tostring -1696 -1697 root = etree.tostring +1709 +1710 root = Element("root") -1698 root.Element("root") +1711 root.text = CDATA('test') -1699 -1700 self.assertEqual('test', -1701 root.text = CDATA('test') +1712 +1713 self.assertEqual('test', +1714 root.text) -1702 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), -1703 tostring(root)) -
1704 -
1705 - def test_cdata_tail(self): -
1706 CDATA = self.text) +1715 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), +1716 tostring(root)) +
1717 +
1718 - def test_cdata_tail(self): +
1719 CDATA = self.etree.CDATA -1707 etree.CDATA +1720 Element = self.Element = self.etree.etree.Element -1708 SubElement = self.Element +1721 SubElement = self.etree.SubElement -1709 tostring = self.etree.SubElement +1722 tostring = self.etree.tostring -1710 -1711 root = etree.tostring +1723 +1724 root = Element("root") -1712 child = SubElement(root, 'child') -1713 child.tail = CDATA('test') -1714 -1715 self.assertEqual('test', child.tail) -1716 self.assertEqual(_bytes('<root><child/><![CDATA[test]]></root>'), -1717 tostring(root)) -1718 -1719 root = Element("root") +1725 child = SubElement(root, 'child') +1726 child.tail = CDATA('test') +1727 +1728 self.assertEqual('test', child.tail) +1729 self.assertEqual(_bytes('<root><child/><![CDATA[test]]></root>'), +1730 tostring(root)) +1731 +1732 root = Element("root") -1720 root.tail = CDATA('test') -1721 -1722 self.assertEqual('test', root.tail) -1723 self.assertEqual(_bytes('<root/><![CDATA[test]]>'), -1724 tostring(root)) -
1725 -
1726 - def test_cdata_type(self): -
1727 CDATA = self.Element("root") +1733 root.tail = CDATA('test') +1734 +1735 self.assertEqual('test', root.tail) +1736 self.assertEqual(_bytes('<root/><![CDATA[test]]>'), +1737 tostring(root)) +
1738 +
1739 - def test_cdata_type(self): +
1740 CDATA = self.etree.CDATA -1728 etree.CDATA +1741 Element = self.Element = self.etree.etree.Element -1729 root = Element +1742 root = Element("root") -1730 -1731 root.Element("root") +1743 +1744 root.text = CDATA("test") -1732 self.assertEqual('test', root.text = CDATA("test") +1745 self.assertEqual('test', root.text) -1733 -1734 root.text) +1746 +1747 root.text = CDATA(_str("test")) -1735 self.assertEqual('test', root.text = CDATA(_str("test")) +1748 self.assertEqual('test', root.text) -1736 -1737 self.assertRaises(TypeError, CDATA, 1) -
1738 -
1739 - def test_cdata_errors(self): -
1740 CDATA = self.text) +1749 +1750 self.assertRaises(TypeError, CDATA, 1) +
1751 +
1752 - def test_cdata_errors(self): +
1753 CDATA = self.etree.CDATA -1741 etree.CDATA +1754 Element = self.Element = self.etree.etree.Element -1742 -1743 root = Element +1755 +1756 root = Element("root") -1744 cdata = CDATA('test') -1745 -1746 self.assertRaises(TypeError, -1747 root.Element("root") +1757 cdata = CDATA('test') +1758 +1759 self.assertRaises(TypeError, +1760 root.set, 'attr', cdata) -1748 self.assertRaises(TypeError, -1749 operator.setitem, root.set, 'attr', cdata) +1761 self.assertRaises(TypeError, +1762 operator.setitem, root.attrib, 'attr', cdata) -
1750 -
1751 - def test_cdata_parser(self): -
1752 tostring = self.attrib, 'attr', cdata) +
1763 +
1764 - def test_cdata_parser(self): +
1765 tostring = self.etree.tostring -1753 parser = self.etree.tostring +1766 parser = self.etree.etree.XMLParser(strip_cdata=False) -1754 root = self.XMLParser(strip_cdata=False) +1767 root = self.etree.etree.XML(_bytes('<root><![CDATA[test]]></root>'), parser) -1755 -1756 self.assertEqual('test', root.XML(_bytes('<root><![CDATA[test]]></root>'), parser) +1768 +1769 self.assertEqual('test', root.text) -1757 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), -1758 tostring(root)) -
1759 -
1760 - def test_cdata_xpath(self): -
1761 tostring = self.text) +1770 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), +1771 tostring(root)) +
1772 +
1773 - def test_cdata_xpath(self): +
1774 tostring = self.etree.tostring -1762 parser = self.etree.tostring +1775 parser = self.etree.etree.XMLParser(strip_cdata=False) -1763 root = self.XMLParser(strip_cdata=False) +1776 root = self.etree.etree.XML(_bytes('<root><![CDATA[test]]></root>'), parser) -1764 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), -1765 tostring(root)) -1766 -1767 self.assertEqual(['test'], root.XML(_bytes('<root><![CDATA[test]]></root>'), parser) +1777 self.assertEqual(_bytes('<root><![CDATA[test]]></root>'), +1778 tostring(root)) +1779 +1780 self.assertEqual(['test'], root.xpath('//text()')) -
1768 -1769 # TypeError in etree, AssertionError in ElementTree; -
1770 - def test_setitem_assert(self): -
1771 xpath('//text()')) +
1781 +1782 # TypeError in etree, AssertionError in ElementTree; +
1783 - def test_setitem_assert(self): +
1784 Element = self.Element = self.etree.etree.Element -1772 SubElement = self.Element +1785 SubElement = self.etree.SubElement -1773 -1774 a = etree.SubElement +1786 +1787 a = Element('a') -1775 b = SubElement(a, 'b') -1776 -1777 self.assertRaises(TypeError, -1778 a.Element('a') +1788 b = SubElement(a, 'b') +1789 +1790 self.assertRaises(TypeError, +1791 a.__setitem__, 0, 'foo') -
1779 -
1780 - def test_append_error(self): -
1781 __setitem__, 0, 'foo') +
1792 +
1793 - def test_append_error(self): +
1794 Element = self.Element = self.etree.etree.Element -1782 root = Element +1795 root = Element('root') -1783 # raises AssertionError in ElementTree -1784 self.assertRaises(TypeError, root.append, None) -1785 self.assertRaises(TypeError, root.extend, [None]) -1786 self.assertRaises(TypeError, root.extend, [Element('root') +1796 # raises AssertionError in ElementTree +1797 self.assertRaises(TypeError, root.append, None) +1798 self.assertRaises(TypeError, root.extend, [None]) +1799 self.assertRaises(TypeError, root.extend, [Element('one'), None]) -1787 self.assertEqual('one', root[0].Element('one'), None]) +1800 self.assertEqual('one', root[0].tag) -
1788 -
1789 - def test_append_recursive_error(self): -
1790 tag) +
1801 +
1802 - def test_append_recursive_error(self): +
1803 Element = self.Element = self.etree.etree.Element -1791 SubElement = self.Element +1804 SubElement = self.etree.SubElement -1792 root = etree.SubElement +1805 root = Element('root') -1793 self.assertRaises(ValueError, root.append, root) -1794 child = SubElement(root, 'child') -1795 self.assertRaises(ValueError, child.append, root) -1796 child2 = SubElement(child, 'child2') -1797 self.assertRaises(ValueError, child2.append, root) -1798 self.assertRaises(ValueError, child2.append, child) -1799 self.assertEqual('child2', root[0][0].Element('root') +1806 self.assertRaises(ValueError, root.append, root) +1807 child = SubElement(root, 'child') +1808 self.assertRaises(ValueError, child.append, root) +1809 child2 = SubElement(child, 'child2') +1810 self.assertRaises(ValueError, child2.append, root) +1811 self.assertRaises(ValueError, child2.append, child) +1812 self.assertEqual('child2', root[0][0].tag) -
1800 -
1801 - def test_addnext(self): -
1802 tag) +
1813 +
1814 - def test_addnext(self): +
1815 Element = self.Element = self.etree.etree.Element -1803 SubElement = self.Element +1816 SubElement = self.etree.SubElement -1804 root = etree.SubElement +1817 root = Element('root') -1805 SubElement(root, 'a') -1806 SubElement(root, 'b') -1807 -1808 self.assertEqual(['a', 'b'], -1809 [c.Element('root') +1818 SubElement(root, 'a') +1819 SubElement(root, 'b') +1820 +1821 self.assertEqual(['a', 'b'], +1822 [c.tag for c in root]) -1810 root[1].addnext(root[0]) -1811 self.assertEqual(['b', 'a'], -1812 [c.tag for c in root]) +1823 root[1].addnext(root[0]) +1824 self.assertEqual(['b', 'a'], +1825 [c.tag for c in root]) -
1813 -
1814 - def test_addprevious(self): -
1815 tag for c in root]) +
1826 +
1827 - def test_addprevious(self): +
1828 Element = self.Element = self.etree.etree.Element -1816 SubElement = self.Element +1829 SubElement = self.etree.SubElement -1817 root = etree.SubElement +1830 root = Element('root') -1818 SubElement(root, 'a') -1819 SubElement(root, 'b') -1820 -1821 self.assertEqual(['a', 'b'], -1822 [c.Element('root') +1831 SubElement(root, 'a') +1832 SubElement(root, 'b') +1833 +1834 self.assertEqual(['a', 'b'], +1835 [c.tag for c in root]) -1823 root[0].addprevious(root[1]) -1824 self.assertEqual(['b', 'a'], -1825 [c.tag for c in root]) +1836 root[0].addprevious(root[1]) +1837 self.assertEqual(['b', 'a'], +1838 [c.tag for c in root]) -
1826 -
1827 - def test_addnext_cycle(self): -
1828 tag for c in root]) +
1839 +
1840 - def test_addnext_cycle(self): +
1841 Element = self.Element = self.etree.etree.Element -1829 SubElement = self.Element +1842 SubElement = self.etree.SubElement -1830 root = etree.SubElement +1843 root = Element('root') -1831 a = SubElement(root, 'a') -1832 b = SubElement(a, 'b') -1833 # appending parent as sibling is forbidden -1834 self.assertRaises(ValueError, b.addnext, a) -1835 self.assertEqual(['a'], [c.Element('root') +1844 a = SubElement(root, 'a') +1845 b = SubElement(a, 'b') +1846 # appending parent as sibling is forbidden +1847 self.assertRaises(ValueError, b.addnext, a) +1848 self.assertEqual(['a'], [c.tag for c in root]) -1836 self.assertEqual(['b'], [c.tag for c in root]) +1849 self.assertEqual(['b'], [c.tag for c in a]) -
1837 -
1838 - def test_addprevious_cycle(self): -
1839 tag for c in a]) +
1850 +
1851 - def test_addprevious_cycle(self): +
1852 Element = self.Element = self.etree.etree.Element -1840 SubElement = self.Element +1853 SubElement = self.etree.SubElement -1841 root = etree.SubElement +1854 root = Element('root') -1842 a = SubElement(root, 'a') -1843 b = SubElement(a, 'b') -1844 # appending parent as sibling is forbidden -1845 self.assertRaises(ValueError, b.addprevious, a) -1846 self.assertEqual(['a'], [c.Element('root') +1855 a = SubElement(root, 'a') +1856 b = SubElement(a, 'b') +1857 # appending parent as sibling is forbidden +1858 self.assertRaises(ValueError, b.addprevious, a) +1859 self.assertEqual(['a'], [c.tag for c in root]) -1847 self.assertEqual(['b'], [c.tag for c in root]) +1860 self.assertEqual(['b'], [c.tag for c in a]) -
1848 -
1849 - def test_addnext_cycle_long(self): -
1850 tag for c in a]) +
1861 +
1862 - def test_addnext_cycle_long(self): +
1863 Element = self.Element = self.etree.etree.Element -1851 SubElement = self.Element +1864 SubElement = self.etree.SubElement -1852 root = etree.SubElement +1865 root = Element('root') -1853 a = SubElement(root, 'a') -1854 b = SubElement(a, 'b') -1855 c = SubElement(b, 'c') -1856 # appending parent as sibling is forbidden -1857 self.assertRaises(ValueError, c.addnext, a) -
1858 -
1859 - def test_addprevious_cycle_long(self): -
1860 Element('root') +1866 a = SubElement(root, 'a') +1867 b = SubElement(a, 'b') +1868 c = SubElement(b, 'c') +1869 # appending parent as sibling is forbidden +1870 self.assertRaises(ValueError, c.addnext, a) +
1871 +
1872 - def test_addprevious_cycle_long(self): +
1873 Element = self.Element = self.etree.etree.Element -1861 SubElement = self.Element +1874 SubElement = self.etree.SubElement -1862 root = etree.SubElement +1875 root = Element('root') -1863 a = SubElement(root, 'a') -1864 b = SubElement(a, 'b') -1865 c = SubElement(b, 'c') -1866 # appending parent as sibling is forbidden -1867 self.assertRaises(ValueError, c.addprevious, a) -
1868 -
1869 - def test_addprevious_noops(self): -
1870 Element('root') +1876 a = SubElement(root, 'a') +1877 b = SubElement(a, 'b') +1878 c = SubElement(b, 'c') +1879 # appending parent as sibling is forbidden +1880 self.assertRaises(ValueError, c.addprevious, a) +
1881 +
1882 - def test_addprevious_noops(self): +
1883 Element = self.Element = self.etree.etree.Element -1871 SubElement = self.Element +1884 SubElement = self.etree.SubElement -1872 root = etree.SubElement +1885 root = Element('root') -1873 a = SubElement(root, 'a') -1874 b = SubElement(root, 'b') -1875 a.addprevious(a) -1876 self.assertEqual('a', root[0].Element('root') +1886 a = SubElement(root, 'a') +1887 b = SubElement(root, 'b') +1888 a.addprevious(a) +1889 self.assertEqual('a', root[0].tag) -1877 self.assertEqual('b', root[1].tag) +1890 self.assertEqual('b', root[1].tag) -1878 b.addprevious(b) -1879 self.assertEqual('a', root[0].tag) +1891 b.addprevious(b) +1892 self.assertEqual('a', root[0].tag) -1880 self.assertEqual('b', root[1].tag) +1893 self.assertEqual('b', root[1].tag) -1881 b.addprevious(a) -1882 self.assertEqual('a', root[0].tag) +1894 b.addprevious(a) +1895 self.assertEqual('a', root[0].tag) -1883 self.assertEqual('b', root[1].tag) +1896 self.assertEqual('b', root[1].tag) -
1884 -
1885 - def test_addnext_noops(self): -
1886 tag) +
1897 +
1898 - def test_addnext_noops(self): +
1899 Element = self.Element = self.etree.etree.Element -1887 SubElement = self.Element +1900 SubElement = self.etree.SubElement -1888 root = etree.SubElement +1901 root = Element('root') -1889 a = SubElement(root, 'a') -1890 b = SubElement(root, 'b') -1891 a.addnext(a) -1892 self.assertEqual('a', root[0].Element('root') +1902 a = SubElement(root, 'a') +1903 b = SubElement(root, 'b') +1904 a.addnext(a) +1905 self.assertEqual('a', root[0].tag) -1893 self.assertEqual('b', root[1].tag) +1906 self.assertEqual('b', root[1].tag) -1894 b.addnext(b) -1895 self.assertEqual('a', root[0].tag) +1907 b.addnext(b) +1908 self.assertEqual('a', root[0].tag) -1896 self.assertEqual('b', root[1].tag) +1909 self.assertEqual('b', root[1].tag) -1897 a.addnext(b) -1898 self.assertEqual('a', root[0].tag) +1910 a.addnext(b) +1911 self.assertEqual('a', root[0].tag) -1899 self.assertEqual('b', root[1].tag) +1912 self.assertEqual('b', root[1].tag) -
1900 -
1901 - def test_addnext_root(self): -
1902 tag) +
1913 +
1914 - def test_addnext_root(self): +
1915 Element = self.Element = self.etree.etree.Element -1903 a = Element +1916 a = Element('a') -1904 b = Element('a') +1917 b = Element('b') -1905 self.assertRaises(TypeError, a.addnext, b) -
1906 -
1907 - def test_addprevious_pi(self): -
1908 Element('b') +1918 self.assertRaises(TypeError, a.addnext, b) +
1919 +
1920 - def test_addprevious_pi(self): +
1921 Element = self.Element = self.etree.etree.Element -1909 SubElement = self.Element +1922 SubElement = self.etree.SubElement -1910 PI = self.etree.SubElement +1923 PI = self.etree.PI -1911 root = etree.PI +1924 root = Element('root') -1912 SubElement(root, 'a') -1913 pi = PI('TARGET', 'TEXT') -1914 pi.tail = "TAIL" -1915 -1916 self.assertEqual(_bytes('<root><a></a></root>'), -1917 self._writeElement(root)) -1918 root[0].addprevious(pi) -1919 self.assertEqual(_bytes('<root><?TARGET TEXT?>TAIL<a></a></root>'), -1920 self._writeElement(root)) -
1921 -
1922 - def test_addprevious_root_pi(self): -
1923 Element('root') +1925 SubElement(root, 'a') +1926 pi = PI('TARGET', 'TEXT') +1927 pi.tail = "TAIL" +1928 +1929 self.assertEqual(_bytes('<root><a></a></root>'), +1930 self._writeElement(root)) +1931 root[0].addprevious(pi) +1932 self.assertEqual(_bytes('<root><?TARGET TEXT?>TAIL<a></a></root>'), +1933 self._writeElement(root)) +
1934 +
1935 - def test_addprevious_root_pi(self): +
1936 Element = self.Element = self.etree.etree.Element -1924 PI = self.Element +1937 PI = self.etree.PI -1925 root = etree.PI +1938 root = Element('root') -1926 pi = PI('TARGET', 'TEXT') -1927 pi.tail = "TAIL" -1928 -1929 self.assertEqual(_bytes('<root></root>'), -1930 self._writeElement(root)) -1931 root.addprevious(pi) -1932 self.assertEqual(_bytes('<?TARGET TEXT?>\n<root></root>'), -1933 self._writeElement(root)) -
1934 -
1935 - def test_addnext_pi(self): -
1936 Element('root') +1939 pi = PI('TARGET', 'TEXT') +1940 pi.tail = "TAIL" +1941 +1942 self.assertEqual(_bytes('<root></root>'), +1943 self._writeElement(root)) +1944 root.addprevious(pi) +1945 self.assertEqual(_bytes('<?TARGET TEXT?>\n<root></root>'), +1946 self._writeElement(root)) +
1947 +
1948 - def test_addnext_pi(self): +
1949 Element = self.Element = self.etree.etree.Element -1937 SubElement = self.Element +1950 SubElement = self.etree.SubElement -1938 PI = self.etree.SubElement +1951 PI = self.etree.PI -1939 root = etree.PI +1952 root = Element('root') -1940 SubElement(root, 'a') -1941 pi = PI('TARGET', 'TEXT') -1942 pi.tail = "TAIL" -1943 -1944 self.assertEqual(_bytes('<root><a></a></root>'), -1945 self._writeElement(root)) -1946 root[0].addnext(pi) -1947 self.assertEqual(_bytes('<root><a></a><?TARGET TEXT?>TAIL</root>'), -1948 self._writeElement(root)) -
1949 -
1950 - def test_addnext_root_pi(self): -
1951 Element('root') +1953 SubElement(root, 'a') +1954 pi = PI('TARGET', 'TEXT') +1955 pi.tail = "TAIL" +1956 +1957 self.assertEqual(_bytes('<root><a></a></root>'), +1958 self._writeElement(root)) +1959 root[0].addnext(pi) +1960 self.assertEqual(_bytes('<root><a></a><?TARGET TEXT?>TAIL</root>'), +1961 self._writeElement(root)) +
1962 +
1963 - def test_addnext_root_pi(self): +
1964 Element = self.Element = self.etree.etree.Element -1952 PI = self.Element +1965 PI = self.etree.PI -1953 root = etree.PI +1966 root = Element('root') -1954 pi = PI('TARGET', 'TEXT') -1955 pi.tail = "TAIL" -1956 -1957 self.assertEqual(_bytes('<root></root>'), -1958 self._writeElement(root)) -1959 root.addnext(pi) -1960 self.assertEqual(_bytes('<root></root>\n<?TARGET TEXT?>'), -1961 self._writeElement(root)) -
1962 -
1963 - def test_addnext_comment(self): -
1964 Element('root') +1967 pi = PI('TARGET', 'TEXT') +1968 pi.tail = "TAIL" +1969 +1970 self.assertEqual(_bytes('<root></root>'), +1971 self._writeElement(root)) +1972 root.addnext(pi) +1973 self.assertEqual(_bytes('<root></root>\n<?TARGET TEXT?>'), +1974 self._writeElement(root)) +
1975 +
1976 - def test_addnext_comment(self): +
1977 Element = self.Element = self.etree.etree.Element -1965 SubElement = self.Element +1978 SubElement = self.etree.SubElement -1966 Comment = self.etree.SubElement +1979 Comment = self.etree.Comment -1967 root = etree.Comment +1980 root = Element('root') -1968 SubElement(root, 'a') -1969 comment = Comment('TEXT ') -1970 comment.tail = "TAIL" -1971 -1972 self.assertEqual(_bytes('<root><a></a></root>'), -1973 self._writeElement(root)) -1974 root[0].addnext(comment) -1975 self.assertEqual(_bytes('<root><a></a><!--TEXT -->TAIL</root>'), -1976 self._writeElement(root)) -
1977 -
1978 - def test_addnext_root_comment(self): -
1979 Element('root') +1981 SubElement(root, 'a') +1982 comment = Comment('TEXT ') +1983 comment.tail = "TAIL" +1984 +1985 self.assertEqual(_bytes('<root><a></a></root>'), +1986 self._writeElement(root)) +1987 root[0].addnext(comment) +1988 self.assertEqual(_bytes('<root><a></a><!--TEXT -->TAIL</root>'), +1989 self._writeElement(root)) +
1990 +
1991 - def test_addnext_root_comment(self): +
1992 Element = self.Element = self.etree.etree.Element -1980 Comment = self.Element +1993 Comment = self.etree.Comment -1981 root = etree.Comment +1994 root = Element('root') -1982 comment = Comment('TEXT ') -1983 comment.tail = "TAIL" -1984 -1985 self.assertEqual(_bytes('<root></root>'), -1986 self._writeElement(root)) -1987 root.addnext(comment) -1988 self.assertEqual(_bytes('<root></root>\n<!--TEXT -->'), -1989 self._writeElement(root)) -
1990 -
1991 - def test_addprevious_comment(self): -
1992 Element('root') +1995 comment = Comment('TEXT ') +1996 comment.tail = "TAIL" +1997 +1998 self.assertEqual(_bytes('<root></root>'), +1999 self._writeElement(root)) +2000 root.addnext(comment) +2001 self.assertEqual(_bytes('<root></root>\n<!--TEXT -->'), +2002 self._writeElement(root)) +
2003 +
2004 - def test_addprevious_comment(self): +
2005 Element = self.Element = self.etree.etree.Element -1993 SubElement = self.Element +2006 SubElement = self.etree.SubElement -1994 Comment = self.etree.SubElement +2007 Comment = self.etree.Comment -1995 root = etree.Comment +2008 root = Element('root') -1996 SubElement(root, 'a') -1997 comment = Comment('TEXT ') -1998 comment.tail = "TAIL" -1999 -2000 self.assertEqual(_bytes('<root><a></a></root>'), -2001 self._writeElement(root)) -2002 root[0].addprevious(comment) -2003 self.assertEqual(_bytes('<root><!--TEXT -->TAIL<a></a></root>'), -2004 self._writeElement(root)) -
2005 -
2007 Element('root') +2009 SubElement(root, 'a') +2010 comment = Comment('TEXT ') +2011 comment.tail = "TAIL" +2012 +2013 self.assertEqual(_bytes('<root><a></a></root>'), +2014 self._writeElement(root)) +2015 root[0].addprevious(comment) +2016 self.assertEqual(_bytes('<root><!--TEXT -->TAIL<a></a></root>'), +2017 self._writeElement(root)) +
2018 +
2020 Element = self.Element = self.etree.etree.Element -2008 Comment = self.Element +2021 Comment = self.etree.Comment -2009 root = etree.Comment +2022 root = Element('root') -2010 comment = Comment('TEXT ') -2011 comment.tail = "TAIL" -2012 -2013 self.assertEqual(_bytes('<root></root>'), -2014 self._writeElement(root)) -2015 root.addprevious(comment) -2016 self.assertEqual(_bytes('<!--TEXT -->\n<root></root>'), -2017 self._writeElement(root)) -
2018 -2019 # ET's Elements have items() and key(), but not values() -
2020 - def test_attribute_values(self): -
2021 Element('root') +2023 comment = Comment('TEXT ') +2024 comment.tail = "TAIL" +2025 +2026 self.assertEqual(_bytes('<root></root>'), +2027 self._writeElement(root)) +2028 root.addprevious(comment) +2029 self.assertEqual(_bytes('<!--TEXT -->\n<root></root>'), +2030 self._writeElement(root)) +
2031 +2032 # ET's Elements have items() and key(), but not values() +
2033 - def test_attribute_values(self): +
2034 XML = self.XML = self.etree.etree.XML -2022 -2023 root = XML +2035 +2036 root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')) -2024 XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')) +2037 values = root.values = root.values() -2025 values() +2038 values.sort() -2026 self.assertEqual(['Alpha', 'Beta', 'Gamma'], values.sort() +2039 self.assertEqual(['Alpha', 'Beta', 'Gamma'], values) -
2027 -2028 # gives error in ElementTree -
2029 - def test_comment_empty(self): -
2030 values) +
2040 +2041 # gives error in ElementTree +
2042 - def test_comment_empty(self): +
2043 Element = self.Element = self.etree.etree.Element -2031 Comment = self.Element +2044 Comment = self.etree.Comment -2032 -2033 a = etree.Comment +2045 +2046 a = Element('a') -2034 a.append(Comment()) -2035 self.assertEqual( -2036 _bytes('<a><!----></a>'), -2037 self._writeElement(a)) -
2038 -2039 # ElementTree ignores comments -
2040 - def test_comment_parse_empty(self): -
2041 Element('a') +2047 a.append(Comment()) +2048 self.assertEqual( +2049 _bytes('<a><!----></a>'), +2050 self._writeElement(a)) +
2051 +2052 # ElementTree ignores comments +
2053 - def test_comment_parse_empty(self): +
2054 ElementTree = self.ElementTree = self.etree.etree.ElementTree -2042 tostring = self.ElementTree +2055 tostring = self.etree.tostring -2043 -2044 xml = _bytes('<a><b/><!----><c/></a>') -2045 f = BytesIO(xml) -2046 doc = etree.tostring +2056 +2057 xml = _bytes('<a><b/><!----><c/></a>') +2058 f = BytesIO(xml) +2059 doc = ElementTree(file=f) -2047 a = doc.getroot() -2048 self.assertEqual( -2049 '', -2050 a[1].ElementTree(file=f) +2060 a = doc.getroot() +2061 self.assertEqual( +2062 '', +2063 a[1].text) -2051 self.assertEqual( -2052 xml, -2053 tostring(a)) -
2054 -2055 # ElementTree ignores comments -
2056 - def test_comment_no_proxy_yet(self): -
2057 text) +2064 self.assertEqual( +2065 xml, +2066 tostring(a)) +
2067 +2068 # ElementTree ignores comments +
2069 - def test_comment_no_proxy_yet(self): +
2070 ElementTree = self.ElementTree = self.etree.etree.ElementTree -2058 -2059 f = BytesIO('<a><b></b><!-- hoi --><c></c></a>') -2060 doc = ElementTree +2071 +2072 f = BytesIO('<a><b></b><!-- hoi --><c></c></a>') +2073 doc = ElementTree(file=f) -2061 a = doc.getroot() -2062 self.assertEqual( -2063 ' hoi ', -2064 a[1].ElementTree(file=f) +2074 a = doc.getroot() +2075 self.assertEqual( +2076 ' hoi ', +2077 a[1].text) -
2065 -2066 # does not raise an exception in ElementTree -
2067 - def test_comment_immutable(self): -
2068 text) +
2078 +2079 # does not raise an exception in ElementTree +
2080 - def test_comment_immutable(self): +
2081 Element = self.Element = self.etree.etree.Element -2069 Comment = self.Element +2082 Comment = self.etree.Comment -2070 -2071 c = Comment() -2072 el = etree.Comment +2083 +2084 c = Comment() +2085 el = Element('myel') -2073 -2074 self.assertRaises(TypeError, c.append, el) -2075 self.assertRaises(TypeError, c.insert, 0, el) -2076 self.assertRaises(TypeError, c.Element('myel') +2086 +2087 self.assertRaises(TypeError, c.append, el) +2088 self.assertRaises(TypeError, c.insert, 0, el) +2089 self.assertRaises(TypeError, c.set, "myattr", "test") -
2077 -
2079 c = self.set, "myattr", "test") +
2090 +
2092 c = self.etree.Comment() -2080 self.assertEqual(0, len(c.etree.Comment() +2093 self.assertEqual(0, len(c.attrib)) -2081 -2082 self.assertFalse(c.attrib)) +2094 +2095 self.assertFalse(c.attrib.attrib.__contains__('nope')) -2083 self.assertFalse('nope' in c.__contains__('nope')) +2096 self.assertFalse('nope' in c.attrib) -2084 self.assertFalse('nope' in c.attrib) +2097 self.assertFalse('nope' in c.attrib.attrib.keys()) -2085 self.assertFalse('nope' in c.keys()) +2098 self.assertFalse('nope' in c.attrib.attrib.values()) -2086 self.assertFalse(('nope', 'huhu') in c.values()) +2099 self.assertFalse(('nope', 'huhu') in c.attrib.attrib.items()) -2087 -2088 self.assertEqual([], list(c.items()) +2100 +2101 self.assertEqual([], list(c.attrib)) -2089 self.assertEqual([], list(c.attrib)) +2102 self.assertEqual([], list(c.attrib.attrib.keys())) -2090 self.assertEqual([], list(c.keys())) +2103 self.assertEqual([], list(c.attrib.attrib.items())) -2091 self.assertEqual([], list(c.items())) +2104 self.assertEqual([], list(c.attrib.attrib.values())) -2092 self.assertEqual([], list(c.values())) +2105 self.assertEqual([], list(c.attrib.iterkeys())) -2093 self.assertEqual([], list(c.attrib.iterkeys())) +2106 self.assertEqual([], list(c.attrib.iteritems())) -2094 self.assertEqual([], list(c.attrib.iteritems())) +2107 self.assertEqual([], list(c.attrib.itervalues())) -2095 -2096 self.assertEqual('HUHU', c.attrib.itervalues())) +2108 +2109 self.assertEqual('HUHU', c.attrib.pop('nope', 'HUHU')) -2097 self.assertRaises(KeyError, c.attrib.pop('nope', 'HUHU')) +2110 self.assertRaises(KeyError, c.attrib.pop, 'nope') -2098 -2099 self.assertRaises(KeyError, c.attrib.pop, 'nope') +2111 +2112 self.assertRaises(KeyError, c.attrib.attrib.__getitem__, 'only') -2100 self.assertRaises(KeyError, c.__getitem__, 'only') +2113 self.assertRaises(KeyError, c.attrib.attrib.__getitem__, 'names') -2101 self.assertRaises(KeyError, c.__getitem__, 'names') +2114 self.assertRaises(KeyError, c.attrib.attrib.__getitem__, 'nope') -2102 self.assertRaises(KeyError, c.__getitem__, 'nope') +2115 self.assertRaises(KeyError, c.attrib.attrib.__setitem__, 'nope', 'yep') -2103 self.assertRaises(KeyError, c.__setitem__, 'nope', 'yep') +2116 self.assertRaises(KeyError, c.attrib.attrib.__delitem__, 'nope') -
2104 -2105 # test passing 'None' to dump() -
2106 - def test_dump_none(self): -
2107 self.assertRaises(TypeError, self.__delitem__, 'nope') +
2117 +2118 # test passing 'None' to dump() +
2119 - def test_dump_none(self): +
2120 self.assertRaises(TypeError, self.etree.dump, None) -
2108 -
2109 - def test_prefix(self): -
2110 etree.dump, None) +
2121 +
2122 - def test_prefix(self): +
2123 ElementTree = self.ElementTree = self.etree.etree.ElementTree -2111 -2112 f = BytesIO('<a xmlns:foo="http://www.infrae.com/ns/1"><foo:b/></a>') -2113 doc = ElementTree +2124 +2125 f = BytesIO('<a xmlns:foo="http://www.infrae.com/ns/1"><foo:b/></a>') +2126 doc = ElementTree(file=f) -2114 a = doc.getroot() -2115 self.assertEqual( -2116 None, -2117 a.prefix) -2118 self.assertEqual( -2119 'foo', -2120 a[0].prefix) -
2121 -
2122 - def test_prefix_default_ns(self): -
2123 ElementTree(file=f) +2127 a = doc.getroot() +2128 self.assertEqual( +2129 None, +2130 a.prefix) +2131 self.assertEqual( +2132 'foo', +2133 a[0].prefix) +
2134 +
2135 - def test_prefix_default_ns(self): +
2136 ElementTree = self.ElementTree = self.etree.etree.ElementTree -2124 -2125 f = BytesIO('<a xmlns="http://www.infrae.com/ns/1"><b/></a>') -2126 doc = ElementTree +2137 +2138 f = BytesIO('<a xmlns="http://www.infrae.com/ns/1"><b/></a>') +2139 doc = ElementTree(file=f) -2127 a = doc.getroot() -2128 self.assertEqual( -2129 None, -2130 a.prefix) -2131 self.assertEqual( -2132 None, -2133 a[0].prefix) -
2134 -
2135 - def test_getparent(self): -
2136 ElementTree(file=f) +2140 a = doc.getroot() +2141 self.assertEqual( +2142 None, +2143 a.prefix) +2144 self.assertEqual( +2145 None, +2146 a[0].prefix) +
2147 +
2148 - def test_getparent(self): +
2149 Element = self.Element = self.etree.etree.Element -2137 SubElement = self.Element +2150 SubElement = self.etree.SubElement -2138 -2139 a = etree.SubElement +2151 +2152 a = Element('a') -2140 b = SubElement(a, 'b') -2141 c = SubElement(a, 'c') -2142 d = SubElement(b, 'd') -2143 self.assertEqual( -2144 None, -2145 a.Element('a') +2153 b = SubElement(a, 'b') +2154 c = SubElement(a, 'c') +2155 d = SubElement(b, 'd') +2156 self.assertEqual( +2157 None, +2158 a.getparent()) -2146 self.assertEqual( -2147 a, -2148 b.getparent()) +2159 self.assertEqual( +2160 a, +2161 b.getparent()) -2149 self.assertEqual( -2150 b.getparent()) +2162 self.assertEqual( +2163 b.getparent(), -2151 c.getparent(), +2164 c.getparent()) -2152 self.assertEqual( -2153 b, -2154 d.getparent()) +2165 self.assertEqual( +2166 b, +2167 d.getparent()) -
2155 -
2156 - def test_iterchildren(self): -
2157 getparent()) +
2168 +
2169 - def test_iterchildren(self): +
2170 XML = self.XML = self.etree.etree.XML -2158 -2159 root = XML +2171 +2172 root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>')) -2160 result = [] -2161 for el in root.iterchildren(): -2162 result.append(el.XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>')) +2173 result = [] +2174 for el in root.iterchildren(): +2175 result.append(el.tag) -2163 self.assertEqual(['one', 'two', 'three'], result) -
2164 -
2165 - def test_iterchildren_reversed(self): -
2166 tag) +2176 self.assertEqual(['one', 'two', 'three'], result) +
2177 +
2178 - def test_iterchildren_reversed(self): +
2179 XML = self.XML = self.etree.etree.XML -2167 -2168 root = XML +2180 +2181 root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>')) -2169 result = [] -2170 for el in root.iterchildren(reversed=True): -2171 result.append(el.XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>')) +2182 result = [] +2183 for el in root.iterchildren(reversed=True): +2184 result.append(el.tag) -2172 self.assertEqual(['three', 'two', 'one'], result) -
2173 -
2174 - def test_iterchildren_tag(self): -
2175 tag) +2185 self.assertEqual(['three', 'two', 'one'], result) +
2186 +
2187 - def test_iterchildren_tag(self): +
2188 XML = self.XML = self.etree.etree.XML -2176 -2177 root = XML +2189 +2190 root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')) -2178 result = [] -2179 for el in root.iterchildren(XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')) +2191 result = [] +2192 for el in root.iterchildren(tag='two'): -2180 result.append(el.tag='two'): +2193 result.append(el.text) -2181 self.assertEqual(['Two', 'Bla'], result) -
2182 -
2184 text) +2194 self.assertEqual(['Two', 'Bla'], result) +
2195 +
2197 XML = self.XML = self.etree.etree.XML -2185 -2186 root = XML +2198 +2199 root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')) -2187 result = [] -2188 for el in root.iterchildren('two'): -2189 result.append(el.XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')) +2200 result = [] +2201 for el in root.iterchildren('two'): +2202 result.append(el.text) -2190 self.assertEqual(['Two', 'Bla'], result) -
2191 -
2193 text) +2203 self.assertEqual(['Two', 'Bla'], result) +
2204 +
2206 XML = self.XML = self.etree.etree.XML -2194 -2195 root = XML +2207 +2208 root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')) -2196 result = [] -2197 for el in root.iterchildren(reversed=True, XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')) +2209 result = [] +2210 for el in root.iterchildren(reversed=True, tag='two'): -2198 result.append(el.tag='two'): +2211 result.append(el.text) -2199 self.assertEqual(['Bla', 'Two'], result) -
2200 -
2202 text) +2212 self.assertEqual(['Bla', 'Two'], result) +
2213 +
2215 XML = self.XML = self.etree.etree.XML -2203 -2204 root = XML +2216 +2217 root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two><three/></doc>')) -2205 result = [] -2206 for el in root.iterchildren(XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two><three/></doc>')) +2218 result = [] +2219 for el in root.iterchildren(tag=['two', 'three']): -2207 result.append(el.tag=['two', 'three']): +2220 result.append(el.text) -2208 self.assertEqual(['Two', 'Bla', None], result) -
2209 -
2211 text) +2221 self.assertEqual(['Two', 'Bla', None], result) +
2222 +
2224 XML = self.XML = self.etree.etree.XML -2212 -2213 root = XML +2225 +2226 root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two><three/></doc>')) -2214 result = [] -2215 for el in root.iterchildren('two', 'three'): -2216 result.append(el.XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two><three/></doc>')) +2227 result = [] +2228 for el in root.iterchildren('two', 'three'): +2229 result.append(el.text) -2217 self.assertEqual(['Two', 'Bla', None], result) -
2218 -
2220 text) +2230 self.assertEqual(['Two', 'Bla', None], result) +
2231 +
2233 XML = self.XML = self.etree.etree.XML -2221 -2222 root = XML +2234 +2235 root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two><three/></doc>')) -2223 result = [] -2224 for el in root.iterchildren(reversed=True, XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two><three/></doc>')) +2236 result = [] +2237 for el in root.iterchildren(reversed=True, tag=['two', 'three']): -2225 result.append(el.tag=['two', 'three']): +2238 result.append(el.text) -2226 self.assertEqual([None, 'Bla', 'Two'], result) -
2227 -
2228 - def test_iterancestors(self): -
2229 text) +2239 self.assertEqual([None, 'Bla', 'Two'], result) +
2240 +
2241 - def test_iterancestors(self): +
2242 Element = self.Element = self.etree.etree.Element -2230 SubElement = self.Element +2243 SubElement = self.etree.SubElement -2231 -2232 a = etree.SubElement +2244 +2245 a = Element('a') -2233 b = SubElement(a, 'b') -2234 c = SubElement(a, 'c') -2235 d = SubElement(b, 'd') -2236 self.assertEqual( -2237 [], -2238 list(a.iterancestors())) -2239 self.assertEqual( -2240 [a], -2241 list(b.iterancestors())) -2242 self.assertEqual( -2243 [a], -2244 list(c.iterancestors())) -2245 self.assertEqual( -2246 [b, a], -2247 list(d.iterancestors())) -
2248 -
2249 - def test_iterancestors_tag(self): -
2250 Element('a') +2246 b = SubElement(a, 'b') +2247 c = SubElement(a, 'c') +2248 d = SubElement(b, 'd') +2249 self.assertEqual( +2250 [], +2251 list(a.iterancestors())) +2252 self.assertEqual( +2253 [a], +2254 list(b.iterancestors())) +2255 self.assertEqual( +2256 [a], +2257 list(c.iterancestors())) +2258 self.assertEqual( +2259 [b, a], +2260 list(d.iterancestors())) +
2261 +
2262 - def test_iterancestors_tag(self): +
2263 Element = self.Element = self.etree.etree.Element -2251 SubElement = self.Element +2264 SubElement = self.etree.SubElement -2252 -2253 a = etree.SubElement +2265 +2266 a = Element('a') -2254 b = SubElement(a, 'b') -2255 c = SubElement(a, 'c') -2256 d = SubElement(b, 'd') -2257 self.assertEqual( -2258 [a], -2259 list(d.iterancestors('a'))) -2260 self.assertEqual( -2261 [a], -2262 list(d.iterancestors(Element('a') +2267 b = SubElement(a, 'b') +2268 c = SubElement(a, 'c') +2269 d = SubElement(b, 'd') +2270 self.assertEqual( +2271 [a], +2272 list(d.iterancestors('a'))) +2273 self.assertEqual( +2274 [a], +2275 list(d.iterancestors(tag='a'))) -2263 -2264 self.assertEqual( -2265 [b, a], -2266 list(d.iterancestors('*'))) -2267 self.assertEqual( -2268 [b, a], -2269 list(d.iterancestors(tag='a'))) +2276 +2277 self.assertEqual( +2278 [b, a], +2279 list(d.iterancestors('*'))) +2280 self.assertEqual( +2281 [b, a], +2282 list(d.iterancestors(tag='*'))) -
2270 -
2272 tag='*'))) +
2283 +
2285 Element = self.Element = self.etree.etree.Element -2273 SubElement = self.Element +2286 SubElement = self.etree.SubElement -2274 -2275 a = etree.SubElement +2287 +2288 a = Element('a') -2276 b = SubElement(a, 'b') -2277 c = SubElement(a, 'c') -2278 d = SubElement(b, 'd') -2279 self.assertEqual( -2280 [b, a], -2281 list(d.iterancestors(Element('a') +2289 b = SubElement(a, 'b') +2290 c = SubElement(a, 'c') +2291 d = SubElement(b, 'd') +2292 self.assertEqual( +2293 [b, a], +2294 list(d.iterancestors(tag=('a', 'b')))) -2282 self.assertEqual( -2283 [b, a], -2284 list(d.iterancestors('a', 'b'))) -2285 -2286 self.assertEqual( -2287 [], -2288 list(d.iterancestors(tag=('a', 'b')))) +2295 self.assertEqual( +2296 [b, a], +2297 list(d.iterancestors('a', 'b'))) +2298 +2299 self.assertEqual( +2300 [], +2301 list(d.iterancestors(tag=('w', 'x', 'y', 'z')))) -2289 self.assertEqual( -2290 [], -2291 list(d.iterancestors('w', 'x', 'y', 'z'))) -2292 -2293 self.assertEqual( -2294 [], -2295 list(d.iterancestors(tag=('w', 'x', 'y', 'z')))) +2302 self.assertEqual( +2303 [], +2304 list(d.iterancestors('w', 'x', 'y', 'z'))) +2305 +2306 self.assertEqual( +2307 [], +2308 list(d.iterancestors(tag=('d', 'x')))) -2296 self.assertEqual( -2297 [], -2298 list(d.iterancestors('d', 'x'))) -2299 -2300 self.assertEqual( -2301 [b, a], -2302 list(d.iterancestors(tag=('d', 'x')))) +2309 self.assertEqual( +2310 [], +2311 list(d.iterancestors('d', 'x'))) +2312 +2313 self.assertEqual( +2314 [b, a], +2315 list(d.iterancestors(tag=('b', '*')))) -2303 self.assertEqual( -2304 [b, a], -2305 list(d.iterancestors('b', '*'))) -2306 -2307 self.assertEqual( -2308 [b], -2309 list(d.iterancestors(tag=('b', '*')))) +2316 self.assertEqual( +2317 [b, a], +2318 list(d.iterancestors('b', '*'))) +2319 +2320 self.assertEqual( +2321 [b], +2322 list(d.iterancestors(tag=('b', 'c')))) -2310 self.assertEqual( -2311 [b], -2312 list(d.iterancestors('b', 'c'))) -
2313 -
2314 - def test_iterdescendants(self): -
2315 tag=('b', 'c')))) +2323 self.assertEqual( +2324 [b], +2325 list(d.iterancestors('b', 'c'))) +
2326 +
2327 - def test_iterdescendants(self): +
2328 Element = self.Element = self.etree.etree.Element -2316 SubElement = self.Element +2329 SubElement = self.etree.SubElement -2317 -2318 a = etree.SubElement +2330 +2331 a = Element('a') -2319 b = SubElement(a, 'b') -2320 c = SubElement(a, 'c') -2321 d = SubElement(b, 'd') -2322 e = SubElement(c, 'e') -2323 -2324 self.assertEqual( -2325 [b, d, c, e], -2326 list(a.iterdescendants())) -2327 self.assertEqual( -2328 [], -2329 list(d.iterdescendants())) -
2330 -
2331 - def test_iterdescendants_tag(self): -
2332 Element('a') +2332 b = SubElement(a, 'b') +2333 c = SubElement(a, 'c') +2334 d = SubElement(b, 'd') +2335 e = SubElement(c, 'e') +2336 +2337 self.assertEqual( +2338 [b, d, c, e], +2339 list(a.iterdescendants())) +2340 self.assertEqual( +2341 [], +2342 list(d.iterdescendants())) +
2343 +
2344 - def test_iterdescendants_tag(self): +
2345 Element = self.Element = self.etree.etree.Element -2333 SubElement = self.Element +2346 SubElement = self.etree.SubElement -2334 -2335 a = etree.SubElement +2347 +2348 a = Element('a') -2336 b = SubElement(a, 'b') -2337 c = SubElement(a, 'c') -2338 d = SubElement(b, 'd') -2339 e = SubElement(c, 'e') -2340 -2341 self.assertEqual( -2342 [], -2343 list(a.iterdescendants('a'))) -2344 self.assertEqual( -2345 [], -2346 list(a.iterdescendants(Element('a') +2349 b = SubElement(a, 'b') +2350 c = SubElement(a, 'c') +2351 d = SubElement(b, 'd') +2352 e = SubElement(c, 'e') +2353 +2354 self.assertEqual( +2355 [], +2356 list(a.iterdescendants('a'))) +2357 self.assertEqual( +2358 [], +2359 list(a.iterdescendants(tag='a'))) -2347 -2348 a2 = SubElement(e, 'a') -2349 self.assertEqual( -2350 [a2], -2351 list(a.iterdescendants('a'))) -2352 -2353 self.assertEqual( -2354 [a2], -2355 list(c.iterdescendants('a'))) -2356 self.assertEqual( -2357 [a2], -2358 list(c.iterdescendants(tag='a'))) +2360 +2361 a2 = SubElement(e, 'a') +2362 self.assertEqual( +2363 [a2], +2364 list(a.iterdescendants('a'))) +2365 +2366 self.assertEqual( +2367 [a2], +2368 list(c.iterdescendants('a'))) +2369 self.assertEqual( +2370 [a2], +2371 list(c.iterdescendants(tag='a'))) -
2359 -
2361 tag='a'))) +
2372 +
2374 Element = self.Element = self.etree.etree.Element -2362 SubElement = self.Element +2375 SubElement = self.etree.SubElement -2363 -2364 a = etree.SubElement +2376 +2377 a = Element('a') -2365 b = SubElement(a, 'b') -2366 c = SubElement(a, 'c') -2367 d = SubElement(b, 'd') -2368 e = SubElement(c, 'e') -2369 -2370 self.assertEqual( -2371 [b, e], -2372 list(a.iterdescendants(Element('a') +2378 b = SubElement(a, 'b') +2379 c = SubElement(a, 'c') +2380 d = SubElement(b, 'd') +2381 e = SubElement(c, 'e') +2382 +2383 self.assertEqual( +2384 [b, e], +2385 list(a.iterdescendants(tag=('a', 'b', 'e')))) -2373 self.assertEqual( -2374 [b, e], -2375 list(a.iterdescendants('a', 'b', 'e'))) -2376 -2377 a2 = SubElement(e, 'a') -2378 self.assertEqual( -2379 [b, a2], -2380 list(a.iterdescendants(tag=('a', 'b', 'e')))) +2386 self.assertEqual( +2387 [b, e], +2388 list(a.iterdescendants('a', 'b', 'e'))) +2389 +2390 a2 = SubElement(e, 'a') +2391 self.assertEqual( +2392 [b, a2], +2393 list(a.iterdescendants(tag=('a', 'b')))) -2381 self.assertEqual( -2382 [b, a2], -2383 list(a.iterdescendants('a', 'b'))) -2384 -2385 self.assertEqual( -2386 [], -2387 list(c.iterdescendants(tag=('a', 'b')))) +2394 self.assertEqual( +2395 [b, a2], +2396 list(a.iterdescendants('a', 'b'))) +2397 +2398 self.assertEqual( +2399 [], +2400 list(c.iterdescendants(tag=('x', 'y', 'z')))) -2388 self.assertEqual( -2389 [], -2390 list(c.iterdescendants('x', 'y', 'z'))) -2391 -2392 self.assertEqual( -2393 [b, d, c, e, a2], -2394 list(a.iterdescendants(tag=('x', 'y', 'z')))) +2401 self.assertEqual( +2402 [], +2403 list(c.iterdescendants('x', 'y', 'z'))) +2404 +2405 self.assertEqual( +2406 [b, d, c, e, a2], +2407 list(a.iterdescendants(tag=('x', 'y', 'z', '*')))) -2395 self.assertEqual( -2396 [b, d, c, e, a2], -2397 list(a.iterdescendants('x', 'y', 'z', '*'))) -
2398 -
2399 - def test_getroottree(self): -
2400 tag=('x', 'y', 'z', '*')))) +2408 self.assertEqual( +2409 [b, d, c, e, a2], +2410 list(a.iterdescendants('x', 'y', 'z', '*'))) +
2411 +
2412 - def test_getroottree(self): +
2413 Element = self.Element = self.etree.etree.Element -2401 SubElement = self.Element +2414 SubElement = self.etree.SubElement -2402 -2403 a = etree.SubElement +2415 +2416 a = Element('a') -2404 b = SubElement(a, 'b') -2405 c = SubElement(a, 'c') -2406 d = SubElement(b, 'd') -2407 self.assertEqual( -2408 a, -2409 a.getroottree().getroot()) -2410 self.assertEqual( -2411 a, -2412 b.getroottree().getroot()) -2413 self.assertEqual( -2414 a, -2415 d.getroottree().getroot()) -
2416 -
2417 - def test_getnext(self): -
2418 Element('a') +2417 b = SubElement(a, 'b') +2418 c = SubElement(a, 'c') +2419 d = SubElement(b, 'd') +2420 self.assertEqual( +2421 a, +2422 a.getroottree().getroot()) +2423 self.assertEqual( +2424 a, +2425 b.getroottree().getroot()) +2426 self.assertEqual( +2427 a, +2428 d.getroottree().getroot()) +
2429 +
2430 - def test_getnext(self): +
2431 Element = self.Element = self.etree.etree.Element -2419 SubElement = self.Element +2432 SubElement = self.etree.SubElement -2420 -2421 a = etree.SubElement +2433 +2434 a = Element('a') -2422 b = SubElement(a, 'b') -2423 c = SubElement(a, 'c') -2424 self.assertEqual( -2425 None, -2426 a.getnext()) -2427 self.assertEqual( -2428 c, -2429 b.getnext()) -2430 self.assertEqual( -2431 None, -2432 c.getnext()) -
2433 -
2434 - def test_getprevious(self): -
2435 Element('a') +2435 b = SubElement(a, 'b') +2436 c = SubElement(a, 'c') +2437 self.assertEqual( +2438 None, +2439 a.getnext()) +2440 self.assertEqual( +2441 c, +2442 b.getnext()) +2443 self.assertEqual( +2444 None, +2445 c.getnext()) +
2446 +
2447 - def test_getprevious(self): +
2448 Element = self.Element = self.etree.etree.Element -2436 SubElement = self.Element +2449 SubElement = self.etree.SubElement -2437 -2438 a = etree.SubElement +2450 +2451 a = Element('a') -2439 b = SubElement(a, 'b') -2440 c = SubElement(a, 'c') -2441 d = SubElement(b, 'd') -2442 self.assertEqual( -2443 None, -2444 a.getprevious()) -2445 self.assertEqual( -2446 b, -2447 c.getprevious()) -2448 self.assertEqual( -2449 None, -2450 b.getprevious()) -
2451 -
2452 - def test_itersiblings(self): -
2453 Element('a') +2452 b = SubElement(a, 'b') +2453 c = SubElement(a, 'c') +2454 d = SubElement(b, 'd') +2455 self.assertEqual( +2456 None, +2457 a.getprevious()) +2458 self.assertEqual( +2459 b, +2460 c.getprevious()) +2461 self.assertEqual( +2462 None, +2463 b.getprevious()) +
2464 +
2465 - def test_itersiblings(self): +
2466 Element = self.Element = self.etree.etree.Element -2454 SubElement = self.Element +2467 SubElement = self.etree.SubElement -2455 -2456 a = etree.SubElement +2468 +2469 a = Element('a') -2457 b = SubElement(a, 'b') -2458 c = SubElement(a, 'c') -2459 d = SubElement(b, 'd') -2460 self.assertEqual( -2461 [], -2462 list(a.itersiblings())) -2463 self.assertEqual( -2464 [c], -2465 list(b.itersiblings())) -2466 self.assertEqual( -2467 [], -2468 list(c.itersiblings())) -2469 self.assertEqual( -2470 [b], -2471 list(c.itersiblings(preceding=True))) -2472 self.assertEqual( -2473 [], -2474 list(b.itersiblings(preceding=True))) -
2475 -
2476 - def test_itersiblings_tag(self): -
2477 Element('a') +2470 b = SubElement(a, 'b') +2471 c = SubElement(a, 'c') +2472 d = SubElement(b, 'd') +2473 self.assertEqual( +2474 [], +2475 list(a.itersiblings())) +2476 self.assertEqual( +2477 [c], +2478 list(b.itersiblings())) +2479 self.assertEqual( +2480 [], +2481 list(c.itersiblings())) +2482 self.assertEqual( +2483 [b], +2484 list(c.itersiblings(preceding=True))) +2485 self.assertEqual( +2486 [], +2487 list(b.itersiblings(preceding=True))) +
2488 +
2489 - def test_itersiblings_tag(self): +
2490 Element = self.Element = self.etree.etree.Element -2478 SubElement = self.Element +2491 SubElement = self.etree.SubElement -2479 -2480 a = etree.SubElement +2492 +2493 a = Element('a') -2481 b = SubElement(a, 'b') -2482 c = SubElement(a, 'c') -2483 d = SubElement(b, 'd') -2484 self.assertEqual( -2485 [], -2486 list(a.itersiblings(Element('a') +2494 b = SubElement(a, 'b') +2495 c = SubElement(a, 'c') +2496 d = SubElement(b, 'd') +2497 self.assertEqual( +2498 [], +2499 list(a.itersiblings(tag='XXX'))) -2487 self.assertEqual( -2488 [c], -2489 list(b.itersiblings(tag='XXX'))) +2500 self.assertEqual( +2501 [c], +2502 list(b.itersiblings(tag='c'))) -2490 self.assertEqual( -2491 [c], -2492 list(b.itersiblings(tag='c'))) +2503 self.assertEqual( +2504 [c], +2505 list(b.itersiblings(tag='*'))) -2493 self.assertEqual( -2494 [b], -2495 list(c.itersiblings(preceding=True, tag='*'))) +2506 self.assertEqual( +2507 [b], +2508 list(c.itersiblings(preceding=True, tag='b'))) -2496 self.assertEqual( -2497 [], -2498 list(c.itersiblings(preceding=True, tag='b'))) +2509 self.assertEqual( +2510 [], +2511 list(c.itersiblings(preceding=True, tag='c'))) -
2499 -
2501 tag='c'))) +
2512 +
2514 Element = self.Element = self.etree.etree.Element -2502 SubElement = self.Element +2515 SubElement = self.etree.SubElement -2503 -2504 a = etree.SubElement +2516 +2517 a = Element('a') -2505 b = SubElement(a, 'b') -2506 c = SubElement(a, 'c') -2507 d = SubElement(b, 'd') -2508 e = SubElement(a, 'e') -2509 self.assertEqual( -2510 [], -2511 list(a.itersiblings(Element('a') +2518 b = SubElement(a, 'b') +2519 c = SubElement(a, 'c') +2520 d = SubElement(b, 'd') +2521 e = SubElement(a, 'e') +2522 self.assertEqual( +2523 [], +2524 list(a.itersiblings(tag=('XXX', 'YYY')))) -2512 self.assertEqual( -2513 [c, e], -2514 list(b.itersiblings(tag=('XXX', 'YYY')))) +2525 self.assertEqual( +2526 [c, e], +2527 list(b.itersiblings(tag=('c', 'd', 'e')))) -2515 self.assertEqual( -2516 [b], -2517 list(c.itersiblings(preceding=True, tag=('c', 'd', 'e')))) +2528 self.assertEqual( +2529 [b], +2530 list(c.itersiblings(preceding=True, tag=('b', 'b', 'c', 'd')))) -2518 self.assertEqual( -2519 [c, b], -2520 list(e.itersiblings(preceding=True, tag=('b', 'b', 'c', 'd')))) +2531 self.assertEqual( +2532 [c, b], +2533 list(e.itersiblings(preceding=True, tag=('c', '*')))) -
2521 -
2522 - def test_parseid(self): -
2523 parseid = self.tag=('c', '*')))) +
2534 +
2535 - def test_parseid(self): +
2536 parseid = self.etree.parseid -2524 etree.parseid +2537 XML = self.XML = self.etree.etree.XML -2525 xml_text = _bytes(''' -2526 <!DOCTYPE document [ -2527 <!ELEMENT document (h1,p)*> -2528 <!ELEMENT h1 (#PCDATA)> -2529 <!ATTLIST h1 myid ID #REQUIRED> -2530 <!ELEMENT p (#PCDATA)> -2531 <!ATTLIST p someid ID #REQUIRED> -2532 ]> -2533 <document> -2534 <h1 myid="chapter1">...</h1> -2535 <p id="note1" class="note">...</p> -2536 <p>Regular paragraph.</p> -2537 <p xml:id="xmlid">XML:ID paragraph.</p> -2538 <p someid="warn1" class="warning">...</p> -2539 </document> -2540 ''') -2541 -2542 tree, dic = parseid(BytesIO(xml_text)) -2543 root = tree.getroot() -2544 root2 = XML +2538 xml_text = _bytes(''' +2539 <!DOCTYPE document [ +2540 <!ELEMENT document (h1,p)*> +2541 <!ELEMENT h1 (#PCDATA)> +2542 <!ATTLIST h1 myid ID #REQUIRED> +2543 <!ELEMENT p (#PCDATA)> +2544 <!ATTLIST p someid ID #REQUIRED> +2545 ]> +2546 <document> +2547 <h1 myid="chapter1">...</h1> +2548 <p id="note1" class="note">...</p> +2549 <p>Regular paragraph.</p> +2550 <p xml:id="xmlid">XML:ID paragraph.</p> +2551 <p someid="warn1" class="warning">...</p> +2552 </document> +2553 ''') +2554 +2555 tree, dic = parseid(BytesIO(xml_text)) +2556 root = tree.getroot() +2557 root2 = XML(xml_text) -2545 self.assertEqual(self._writeElement(root), -2546 self._writeElement(root2)) -2547 expected = { -2548 "chapter1" : root[0], -2549 "xmlid" : root[3], -2550 "warn1" : root[4] -2551 } -2552 self.assertTrue("chapter1" in dic) -2553 self.assertTrue("warn1" in dic) -2554 self.assertTrue("xmlid" in dic) -2555 self._checkIDDict(dic, expected) -
2556 -
2557 - def test_XMLDTDID(self): -
2558 XMLDTDID = self.XML(xml_text) +2558 self.assertEqual(self._writeElement(root), +2559 self._writeElement(root2)) +2560 expected = { +2561 "chapter1" : root[0], +2562 "xmlid" : root[3], +2563 "warn1" : root[4] +2564 } +2565 self.assertTrue("chapter1" in dic) +2566 self.assertTrue("warn1" in dic) +2567 self.assertTrue("xmlid" in dic) +2568 self._checkIDDict(dic, expected) +
2569 +
2570 - def test_XMLDTDID(self): +
2571 XMLDTDID = self.etree.XMLDTDID -2559 etree.XMLDTDID +2572 XML = self.XML = self.etree.etree.XML -2560 xml_text = _bytes(''' -2561 <!DOCTYPE document [ -2562 <!ELEMENT document (h1,p)*> -2563 <!ELEMENT h1 (#PCDATA)> -2564 <!ATTLIST h1 myid ID #REQUIRED> -2565 <!ELEMENT p (#PCDATA)> -2566 <!ATTLIST p someid ID #REQUIRED> -2567 ]> -2568 <document> -2569 <h1 myid="chapter1">...</h1> -2570 <p id="note1" class="note">...</p> -2571 <p>Regular paragraph.</p> -2572 <p xml:id="xmlid">XML:ID paragraph.</p> -2573 <p someid="warn1" class="warning">...</p> -2574 </document> -2575 ''') -2576 -2577 root, dic = XMLDTDID(xml_text) -2578 root2 = XML +2573 xml_text = _bytes(''' +2574 <!DOCTYPE document [ +2575 <!ELEMENT document (h1,p)*> +2576 <!ELEMENT h1 (#PCDATA)> +2577 <!ATTLIST h1 myid ID #REQUIRED> +2578 <!ELEMENT p (#PCDATA)> +2579 <!ATTLIST p someid ID #REQUIRED> +2580 ]> +2581 <document> +2582 <h1 myid="chapter1">...</h1> +2583 <p id="note1" class="note">...</p> +2584 <p>Regular paragraph.</p> +2585 <p xml:id="xmlid">XML:ID paragraph.</p> +2586 <p someid="warn1" class="warning">...</p> +2587 </document> +2588 ''') +2589 +2590 root, dic = XMLDTDID(xml_text) +2591 root2 = XML(xml_text) -2579 self.assertEqual(self._writeElement(root), -2580 self._writeElement(root2)) -2581 expected = { -2582 "chapter1" : root[0], -2583 "xmlid" : root[3], -2584 "warn1" : root[4] -2585 } -2586 self.assertTrue("chapter1" in dic) -2587 self.assertTrue("warn1" in dic) -2588 self.assertTrue("xmlid" in dic) -2589 self._checkIDDict(dic, expected) -
2590 -
2591 - def test_XMLDTDID_empty(self): -
2592 XMLDTDID = self.XML(xml_text) +2592 self.assertEqual(self._writeElement(root), +2593 self._writeElement(root2)) +2594 expected = { +2595 "chapter1" : root[0], +2596 "xmlid" : root[3], +2597 "warn1" : root[4] +2598 } +2599 self.assertTrue("chapter1" in dic) +2600 self.assertTrue("warn1" in dic) +2601 self.assertTrue("xmlid" in dic) +2602 self._checkIDDict(dic, expected) +
2603 +
2604 - def test_XMLDTDID_empty(self): +
2605 XMLDTDID = self.etree.XMLDTDID -2593 etree.XMLDTDID +2606 XML = self.XML = self.etree.etree.XML -2594 xml_text = _bytes(''' -2595 <document> -2596 <h1 myid="chapter1">...</h1> -2597 <p id="note1" class="note">...</p> -2598 <p>Regular paragraph.</p> -2599 <p someid="warn1" class="warning">...</p> -2600 </document> -2601 ''') -2602 -2603 root, dic = XMLDTDID(xml_text) -2604 root2 = XML +2607 xml_text = _bytes(''' +2608 <document> +2609 <h1 myid="chapter1">...</h1> +2610 <p id="note1" class="note">...</p> +2611 <p>Regular paragraph.</p> +2612 <p someid="warn1" class="warning">...</p> +2613 </document> +2614 ''') +2615 +2616 root, dic = XMLDTDID(xml_text) +2617 root2 = XML(xml_text) -2605 self.assertEqual(self._writeElement(root), -2606 self._writeElement(root2)) -2607 expected = {} -2608 self._checkIDDict(dic, expected) -
2609 -
2610 - def test_XMLDTDID_no_id_dict(self): -
2611 XMLDTDID = self.XML(xml_text) +2618 self.assertEqual(self._writeElement(root), +2619 self._writeElement(root2)) +2620 expected = {} +2621 self._checkIDDict(dic, expected) +
2622 +
2623 - def test_XMLDTDID_no_id_dict(self): +
2624 XMLDTDID = self.etree.XMLDTDID -2612 etree.XMLDTDID +2625 XML = self.XML = self.etree.etree.XML -2613 xml_text = _bytes(''' -2614 <!DOCTYPE document [ -2615 <!ELEMENT document (h1,p)*> -2616 <!ELEMENT h1 (#PCDATA)> -2617 <!ATTLIST h1 myid ID #REQUIRED> -2618 <!ELEMENT p (#PCDATA)> -2619 <!ATTLIST p someid ID #REQUIRED> -2620 ]> -2621 <document> -2622 <h1 myid="chapter1">...</h1> -2623 <p id="note1" class="note">...</p> -2624 <p>Regular paragraph.</p> -2625 <p xml:id="xmlid">XML:ID paragraph.</p> -2626 <p someid="warn1" class="warning">...</p> -2627 </document> -2628 ''') -2629 -2630 parser = XML +2626 xml_text = _bytes(''' +2627 <!DOCTYPE document [ +2628 <!ELEMENT document (h1,p)*> +2629 <!ELEMENT h1 (#PCDATA)> +2630 <!ATTLIST h1 myid ID #REQUIRED> +2631 <!ELEMENT p (#PCDATA)> +2632 <!ATTLIST p someid ID #REQUIRED> +2633 ]> +2634 <document> +2635 <h1 myid="chapter1">...</h1> +2636 <p id="note1" class="note">...</p> +2637 <p>Regular paragraph.</p> +2638 <p xml:id="xmlid">XML:ID paragraph.</p> +2639 <p someid="warn1" class="warning">...</p> +2640 </document> +2641 ''') +2642 +2643 parser = etree.etree.XMLParser(collect_ids=False) -2631 root, dic = XMLDTDID(xml_text, parser=parser) -2632 root2 = XML(xml_text) -2633 self.assertEqual(self._writeElement(root), -2634 self._writeElement(root2)) -2635 self.assertFalse(dic) -2636 self._checkIDDict(dic, {}) -
2637 -
2638 - def _checkIDDict(self, dic, expected): -
2639 self.assertEqual(len(dic), -2640 len(expected)) -2641 self.assertEqual(sorted(dic.XMLParser(collect_ids=False) +2644 root, dic = XMLDTDID(xml_text, parser=parser) +2645 root2 = XML(xml_text) +2646 self.assertEqual(self._writeElement(root), +2647 self._writeElement(root2)) +2648 self.assertFalse(dic) +2649 self._checkIDDict(dic, {}) +
2650 +
2651 - def _checkIDDict(self, dic, expected): +
2652 self.assertEqual(len(dic), +2653 len(expected)) +2654 self.assertEqual(sorted(dic.items()), -2642 sorted(expected.items()), +2655 sorted(expected.items())) -2643 if sys.version_info < (3,): -2644 self.assertEqual(sorted(dic.iteritems()), -2645 sorted(expected.iteritems())) -2646 self.assertEqual(sorted(dic.items())) +2656 if sys.version_info < (3,): +2657 self.assertEqual(sorted(dic.iteritems()), +2658 sorted(expected.iteritems())) +2659 self.assertEqual(sorted(dic.keys()), -2647 sorted(expected.keys()), +2660 sorted(expected.keys())) -2648 if sys.version_info < (3,): -2649 self.assertEqual(sorted(dic.iterkeys()), -2650 sorted(expected.iterkeys())) -2651 if sys.version_info < (3,): -2652 self.assertEqual(sorted(dic.keys())) +2661 if sys.version_info < (3,): +2662 self.assertEqual(sorted(dic.iterkeys()), +2663 sorted(expected.iterkeys())) +2664 if sys.version_info < (3,): +2665 self.assertEqual(sorted(dic.values()), -2653 sorted(expected.values()), +2666 sorted(expected.values())) -2654 self.assertEqual(sorted(dic.itervalues()), -2655 sorted(expected.itervalues())) -
2656 -
2657 - def test_register_namespace_xml(self): -
2658 self.assertRaises(ValueError, self.values())) +2667 self.assertEqual(sorted(dic.itervalues()), +2668 sorted(expected.itervalues())) +
2669 +
2670 - def test_register_namespace_xml(self): +
2671 self.assertRaises(ValueError, self.etree.register_namespace, -2659 "XML", "http://www.w3.org/XML/1998/namespace") -2660 self.assertRaises(ValueError, self.etree.register_namespace, +2672 "XML", "http://www.w3.org/XML/1998/namespace") +2673 self.assertRaises(ValueError, self.etree.register_namespace, -2661 "xml", "http://www.w3.org/XML/2345") -2662 self.etree.register_namespace, +2674 "xml", "http://www.w3.org/XML/2345") +2675 self.etree.register_namespace("xml", "http://www.w3.org/XML/1998/namespace") # ok -
2663 -
2664 - def test_namespaces(self): -
2665 etree.register_namespace("xml", "http://www.w3.org/XML/1998/namespace") # ok +
2676 +
2677 - def test_namespaces(self): +
2678 etree = self.etree = self.etree -2666 -2667 r = {'foo': 'http://ns.infrae.com/foo'} -2668 e = etree +2679 +2680 r = {'foo': 'http://ns.infrae.com/foo'} +2681 e = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2669 self.assertEqual( -2670 'foo', -2671 e.prefix) -2672 self.assertEqual( -2673 _bytes('<foo:bar xmlns:foo="http://ns.infrae.com/foo"></foo:bar>'), -2674 self._writeElement(e)) -
2675 -
2676 - def test_namespaces_default(self): -
2677 Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2682 self.assertEqual( +2683 'foo', +2684 e.prefix) +2685 self.assertEqual( +2686 _bytes('<foo:bar xmlns:foo="http://ns.infrae.com/foo"></foo:bar>'), +2687 self._writeElement(e)) +
2688 +
2689 - def test_namespaces_default(self): +
2690 etree = self.etree = self.etree -2678 -2679 r = {None: 'http://ns.infrae.com/foo'} -2680 e = etree +2691 +2692 r = {None: 'http://ns.infrae.com/foo'} +2693 e = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2681 self.assertEqual( -2682 None, -2683 e.prefix) -2684 self.assertEqual( -2685 '{http://ns.infrae.com/foo}bar', -2686 e.Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2694 self.assertEqual( +2695 None, +2696 e.prefix) +2697 self.assertEqual( +2698 '{http://ns.infrae.com/foo}bar', +2699 e.tag) -2687 self.assertEqual( -2688 _bytes('<bar xmlns="http://ns.infrae.com/foo"></bar>'), -2689 self._writeElement(e)) -
2690 -
2692 tag) +2700 self.assertEqual( +2701 _bytes('<bar xmlns="http://ns.infrae.com/foo"></bar>'), +2702 self._writeElement(e)) +
2703 +
2705 etree = self.etree = self.etree -2693 -2694 r = {None: 'http://ns.infrae.com/foo', 'p': 'http://test/'} -2695 e = etree +2706 +2707 r = {None: 'http://ns.infrae.com/foo', 'p': 'http://test/'} +2708 e = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2696 self.assertEqual(None, e.prefix) -2697 self.assertEqual('{http://ns.infrae.com/foo}bar', e.Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2709 self.assertEqual(None, e.prefix) +2710 self.assertEqual('{http://ns.infrae.com/foo}bar', e.tag) -2698 self.assertEqual( -2699 _bytes('<bar xmlns="http://ns.infrae.com/foo" xmlns:p="http://test/"></bar>'), -2700 self._writeElement(e)) -
2701 -
2703 tag) +2711 self.assertEqual( +2712 _bytes('<bar xmlns="http://ns.infrae.com/foo" xmlns:p="http://test/"></bar>'), +2713 self._writeElement(e)) +
2714 +
2716 etree = self.etree = self.etree -2704 -2705 r = {None: 'http://ns.infrae.com/foo', -2706 'hoi': 'http://ns.infrae.com/hoi'} -2707 e = etree +2717 +2718 r = {None: 'http://ns.infrae.com/foo', +2719 'hoi': 'http://ns.infrae.com/hoi'} +2720 e = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2708 e.Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2721 e.set('{http://ns.infrae.com/hoi}test', 'value') -2709 self.assertEqual( -2710 _bytes('<bar xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi" hoi:test="value"></bar>'), -2711 self._writeElement(e)) -
2712 -
2714 set('{http://ns.infrae.com/hoi}test', 'value') +2722 self.assertEqual( +2723 _bytes('<bar xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi" hoi:test="value"></bar>'), +2724 self._writeElement(e)) +
2725 +
2727 etree = self.etree = self.etree -2715 -2716 root = etree +2728 +2729 root = etree.etree.Element('{http://test/ns}root', -2717 nsmap={None: 'http://test/ns'}) -2718 sub = Element('{http://test/ns}root', +2730 nsmap={None: 'http://test/ns'}) +2731 sub = etree.etree.Element('{http://test/ns}sub', -2719 nsmap={'test': 'http://test/ns'}) -2720 -2721 sub.Element('{http://test/ns}sub', +2732 nsmap={'test': 'http://test/ns'}) +2733 +2734 sub.attrib['{http://test/ns}attr'] = 'value' -2722 self.assertEqual(sub.attrib['{http://test/ns}attr'] = 'value' +2735 self.assertEqual(sub.attrib['{http://test/ns}attr'], 'value') -2723 self.assertEqual( -2724 _bytes('<test:sub xmlns:test="http://test/ns" test:attr="value"/>'), -2725 attrib['{http://test/ns}attr'], 'value') +2736 self.assertEqual( +2737 _bytes('<test:sub xmlns:test="http://test/ns" test:attr="value"/>'), +2738 etree.tostring(sub)) -2726 -2727 root.append(sub) -2728 self.assertEqual( -2729 _bytes('<root xmlns="http://test/ns">' -2730 '<sub xmlns:test="http://test/ns" test:attr="value"/>' -2731 '</root>'), -2732 etree.tostring(sub)) +2739 +2740 root.append(sub) +2741 self.assertEqual( +2742 _bytes('<root xmlns="http://test/ns">' +2743 '<sub xmlns:test="http://test/ns" test:attr="value"/>' +2744 '</root>'), +2745 etree.tostring(root)) -
2733 -2746 +
2748 etree = self.etree = self.etree -2736 -2737 root = etree +2749 +2750 root = etree.etree.Element('root') -2738 sub = Element('root') +2751 sub = etree.etree.Element('{http://test/ns}sub', -2739 nsmap={'test': 'http://test/ns'}) -2740 -2741 sub.Element('{http://test/ns}sub', +2752 nsmap={'test': 'http://test/ns'}) +2753 +2754 sub.attrib['{http://test/ns}attr'] = 'value' -2742 self.assertEqual(sub.attrib['{http://test/ns}attr'] = 'value' +2755 self.assertEqual(sub.attrib['{http://test/ns}attr'], 'value') -2743 self.assertEqual( -2744 _bytes('<test:sub xmlns:test="http://test/ns" test:attr="value"/>'), -2745 attrib['{http://test/ns}attr'], 'value') +2756 self.assertEqual( +2757 _bytes('<test:sub xmlns:test="http://test/ns" test:attr="value"/>'), +2758 etree.tostring(sub)) -2746 -2747 root.append(sub) -2748 self.assertEqual( -2749 _bytes('<root>' -2750 '<test:sub xmlns:test="http://test/ns" test:attr="value"/>' -2751 '</root>'), -2752 etree.tostring(sub)) +2759 +2760 root.append(sub) +2761 self.assertEqual( +2762 _bytes('<root>' +2763 '<test:sub xmlns:test="http://test/ns" test:attr="value"/>' +2764 '</root>'), +2765 etree.tostring(root)) -
2753 -2766 +
2768 etree = self.etree = self.etree -2756 -2757 root = etree +2769 +2770 root = etree.etree.Element('root') -2758 sub = Element('root') +2771 sub = etree.etree.Element('{http://test/ns}sub', -2759 nsmap={None: 'http://test/ns'}) -2760 -2761 sub.Element('{http://test/ns}sub', +2772 nsmap={None: 'http://test/ns'}) +2773 +2774 sub.attrib['{http://test/ns}attr'] = 'value' -2762 self.assertEqual(sub.attrib['{http://test/ns}attr'] = 'value' +2775 self.assertEqual(sub.attrib['{http://test/ns}attr'], 'value') -2763 self.assertEqual( -2764 _bytes('<sub xmlns="http://test/ns" ' -2765 'xmlns:ns0="http://test/ns" ns0:attr="value"/>'), -2766 attrib['{http://test/ns}attr'], 'value') +2776 self.assertEqual( +2777 _bytes('<sub xmlns="http://test/ns" ' +2778 'xmlns:ns0="http://test/ns" ns0:attr="value"/>'), +2779 etree.tostring(sub)) -2767 -2768 root.append(sub) -2769 self.assertEqual( -2770 _bytes('<root>' -2771 '<sub xmlns="http://test/ns"' -2772 ' xmlns:ns0="http://test/ns" ns0:attr="value"/>' -2773 '</root>'), -2774 etree.tostring(sub)) +2780 +2781 root.append(sub) +2782 self.assertEqual( +2783 _bytes('<root>' +2784 '<sub xmlns="http://test/ns"' +2785 ' xmlns:ns0="http://test/ns" ns0:attr="value"/>' +2786 '</root>'), +2787 etree.tostring(root)) -
2775 -2788 +
2790 etree = self.etree = self.etree -2778 -2779 root = etree +2791 +2792 root = etree.etree.Element('{http://test/ns}root', -2780 nsmap={'test': 'http://test/ns', -2781 None: 'http://test/ns'}) -2782 sub = Element('{http://test/ns}root', +2793 nsmap={'test': 'http://test/ns', +2794 None: 'http://test/ns'}) +2795 sub = etree.etree.Element('{http://test/ns}sub', -2783 nsmap={None: 'http://test/ns'}) -2784 -2785 sub.Element('{http://test/ns}sub', +2796 nsmap={None: 'http://test/ns'}) +2797 +2798 sub.attrib['{http://test/ns}attr'] = 'value' -2786 self.assertEqual(sub.attrib['{http://test/ns}attr'] = 'value' +2799 self.assertEqual(sub.attrib['{http://test/ns}attr'], 'value') -2787 self.assertEqual( -2788 _bytes('<sub xmlns="http://test/ns" ' -2789 'xmlns:ns0="http://test/ns" ns0:attr="value"/>'), -2790 attrib['{http://test/ns}attr'], 'value') +2800 self.assertEqual( +2801 _bytes('<sub xmlns="http://test/ns" ' +2802 'xmlns:ns0="http://test/ns" ns0:attr="value"/>'), +2803 etree.tostring(sub)) -2791 -2792 root.append(sub) -2793 self.assertEqual( -2794 _bytes('<test:root xmlns:test="http://test/ns" xmlns="http://test/ns">' -2795 '<test:sub test:attr="value"/>' -2796 '</test:root>'), -2797 etree.tostring(sub)) +2804 +2805 root.append(sub) +2806 self.assertEqual( +2807 _bytes('<test:root xmlns:test="http://test/ns" xmlns="http://test/ns">' +2808 '<test:sub test:attr="value"/>' +2809 '</test:root>'), +2810 etree.tostring(root)) -
2798 -
2799 - def test_namespaces_elementtree(self): -
2811 +
2812 - def test_namespaces_elementtree(self): +
2813 etree = self.etree = self.etree -2801 r = {None: 'http://ns.infrae.com/foo', -2802 'hoi': 'http://ns.infrae.com/hoi'} -2803 e = etree +2814 r = {None: 'http://ns.infrae.com/foo', +2815 'hoi': 'http://ns.infrae.com/hoi'} +2816 e = etree.etree.Element('{http://ns.infrae.com/foo}z', nsmap=r) -2804 tree = Element('{http://ns.infrae.com/foo}z', nsmap=r) +2817 tree = etree.etree.ElementTree(element=e) -2805 ElementTree(element=e) +2818 etree.SubElement(e, '{http://ns.infrae.com/hoi}x') -2806 self.assertEqual( -2807 _bytes('<z xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi"><hoi:x></hoi:x></z>'), -2808 self._writeElement(e)) -
2809 -
2811 etree.SubElement(e, '{http://ns.infrae.com/hoi}x') +2819 self.assertEqual( +2820 _bytes('<z xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi"><hoi:x></hoi:x></z>'), +2821 self._writeElement(e)) +
2822 +
2824 etree = self.etree = self.etree -2812 -2813 r = {None: 'http://ns.infrae.com/foo'} -2814 e1 = etree +2825 +2826 r = {None: 'http://ns.infrae.com/foo'} +2827 e1 = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2815 e2 = Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2828 e2 = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2816 -2817 e1.append(e2) -2818 -2819 self.assertEqual( -2820 None, -2821 e1.prefix) -2822 self.assertEqual( -2823 None, -2824 e1[0].prefix) -2825 self.assertEqual( -2826 '{http://ns.infrae.com/foo}bar', -2827 e1.Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2829 +2830 e1.append(e2) +2831 +2832 self.assertEqual( +2833 None, +2834 e1.prefix) +2835 self.assertEqual( +2836 None, +2837 e1[0].prefix) +2838 self.assertEqual( +2839 '{http://ns.infrae.com/foo}bar', +2840 e1.tag) -2828 self.assertEqual( -2829 '{http://ns.infrae.com/foo}bar', -2830 e1[0].tag) +2841 self.assertEqual( +2842 '{http://ns.infrae.com/foo}bar', +2843 e1[0].tag) -
2831 -
2833 tag) +
2844 +
2846 etree = self.etree = self.etree -2834 -2835 r = {None: 'http://ns.infrae.com/BAR'} -2836 e1 = etree +2847 +2848 r = {None: 'http://ns.infrae.com/BAR'} +2849 e1 = etree.etree.Element('{http://ns.infrae.com/BAR}bar', nsmap=r) -2837 e2 = Element('{http://ns.infrae.com/BAR}bar', nsmap=r) +2850 e2 = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2838 -2839 e1.append(e2) -2840 -2841 self.assertEqual( -2842 None, -2843 e1.prefix) -2844 self.assertNotEqual( -2845 None, -2846 e2.prefix) -2847 self.assertEqual( -2848 '{http://ns.infrae.com/BAR}bar', -2849 e1.Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2851 +2852 e1.append(e2) +2853 +2854 self.assertEqual( +2855 None, +2856 e1.prefix) +2857 self.assertNotEqual( +2858 None, +2859 e2.prefix) +2860 self.assertEqual( +2861 '{http://ns.infrae.com/BAR}bar', +2862 e1.tag) -2850 self.assertEqual( -2851 '{http://ns.infrae.com/foo}bar', -2852 e2.tag) +2863 self.assertEqual( +2864 '{http://ns.infrae.com/foo}bar', +2865 e2.tag) -
2853 -
2855 ns_href = "http://a.b.c" -2856 one = self.tag) +
2866 +
2868 ns_href = "http://a.b.c" +2869 one = self.etree.etree.fromstring( -2857 _bytes('<foo><bar xmlns:ns="%s"><ns:baz/></bar></foo>' % ns_href)) -2858 baz = one[0][0] -2859 -2860 two = self.fromstring( +2870 _bytes('<foo><bar xmlns:ns="%s"><ns:baz/></bar></foo>' % ns_href)) +2871 baz = one[0][0] +2872 +2873 two = self.etree.etree.fromstring( -2861 _bytes('<root xmlns:ns="%s"/>' % ns_href)) -2862 two.append(baz) -2863 del one # make sure the source document is deallocated -2864 -2865 self.assertEqual('{%s}baz' % ns_href, baz.fromstring( +2874 _bytes('<root xmlns:ns="%s"/>' % ns_href)) +2875 two.append(baz) +2876 del one # make sure the source document is deallocated +2877 +2878 self.assertEqual('{%s}baz' % ns_href, baz.tag) -2866 self.assertEqual( -2867 _bytes('<root xmlns:ns="%s"><ns:baz/></root>' % ns_href), -2868 self.tag) +2879 self.assertEqual( +2880 _bytes('<root xmlns:ns="%s"><ns:baz/></root>' % ns_href), +2881 self.etree.tostring(two)) -
2869 -
2870 - def test_namespace_cleanup(self): -
2871 xml = _bytes( -2872 '<foo xmlns="F" xmlns:x="x">' -2873 '<bar xmlns:ns="NS" xmlns:b="b" xmlns="B">' -2874 '<ns:baz/>' -2875 '</bar></foo>' -2876 ) -2877 root = self.etree.tostring(two)) +
2882 +
2883 - def test_namespace_cleanup(self): +
2884 xml = _bytes( +2885 '<foo xmlns="F" xmlns:x="x">' +2886 '<bar xmlns:ns="NS" xmlns:b="b" xmlns="B">' +2887 '<ns:baz/>' +2888 '</bar></foo>' +2889 ) +2890 root = self.etree.etree.fromstring(xml) -2878 self.assertEqual(xml, self.fromstring(xml) +2891 self.assertEqual(xml, self.etree.tostring(root)) -2879 self.etree.tostring(root)) +2892 self.etree.cleanup_namespaces(root) -2880 self.assertEqual( -2881 _bytes('<foo xmlns="F"><bar xmlns:ns="NS" xmlns="B"><ns:baz/></bar></foo>'), -2882 self.etree.cleanup_namespaces(root) +2893 self.assertEqual( +2894 _bytes('<foo xmlns="F"><bar xmlns:ns="NS" xmlns="B"><ns:baz/></bar></foo>'), +2895 self.etree.tostring(root)) -
2883 -
2885 xml = _bytes( -2886 '<foo xmlns="F" xmlns:x="X" xmlns:a="A">' -2887 '<bar xmlns:ns="NS" xmlns:b="b" xmlns="B">' -2888 '<ns:baz a:test="attr"/>' -2889 '</bar></foo>' -2890 ) -2891 root = self.etree.tostring(root)) +
2896 +
2898 xml = _bytes( +2899 '<foo xmlns="F" xmlns:x="X" xmlns:a="A">' +2900 '<bar xmlns:ns="NS" xmlns:b="b" xmlns="B">' +2901 '<ns:baz a:test="attr"/>' +2902 '</bar></foo>' +2903 ) +2904 root = self.etree.etree.fromstring(xml) -2892 self.assertEqual(xml, self.fromstring(xml) +2905 self.assertEqual(xml, self.etree.tostring(root)) -2893 self.etree.tostring(root)) +2906 self.etree.cleanup_namespaces(root) -2894 self.assertEqual( -2895 _bytes('<foo xmlns="F" xmlns:a="A">' -2896 '<bar xmlns:ns="NS" xmlns="B">' -2897 '<ns:baz a:test="attr"/>' -2898 '</bar></foo>'), -2899 self.etree.cleanup_namespaces(root) +2907 self.assertEqual( +2908 _bytes('<foo xmlns="F" xmlns:a="A">' +2909 '<bar xmlns:ns="NS" xmlns="B">' +2910 '<ns:baz a:test="attr"/>' +2911 '</bar></foo>'), +2912 self.etree.tostring(root)) -
2900 -
2901 - def test_namespace_cleanup_many(self): -
2902 xml = ('<n12:foo ' + -2903 ' '.join('xmlns:n{n}="NS{n}"'.format(n=i) for i in range(100)) + -2904 '><n68:a/></n12:foo>').encode('utf8') -2905 root = self.etree.tostring(root)) +
2913 +
2914 - def test_namespace_cleanup_many(self): +
2915 xml = ('<n12:foo ' + +2916 ' '.join('xmlns:n{n}="NS{n}"'.format(n=i) for i in range(100)) + +2917 '><n68:a/></n12:foo>').encode('utf8') +2918 root = self.etree.etree.fromstring(xml) -2906 self.assertEqual(xml, self.fromstring(xml) +2919 self.assertEqual(xml, self.etree.tostring(root)) -2907 self.etree.tostring(root)) +2920 self.etree.cleanup_namespaces(root) -2908 self.assertEqual( -2909 b'<n12:foo xmlns:n12="NS12" xmlns:n68="NS68"><n68:a/></n12:foo>', -2910 self.etree.cleanup_namespaces(root) +2921 self.assertEqual( +2922 b'<n12:foo xmlns:n12="NS12" xmlns:n68="NS68"><n68:a/></n12:foo>', +2923 self.etree.tostring(root)) -
2911 -
2912 - def test_namespace_cleanup_deep(self): -
2913 xml = ('<root>' + -2914 ''.join('<a xmlns:n{n}="NS{n}">'.format(n=i) for i in range(100)) + -2915 '<n64:x/>' + '</a>'*100 + '</root>').encode('utf8') -2916 root = self.etree.tostring(root)) +
2924 +
2925 - def test_namespace_cleanup_deep(self): +
2926 xml = ('<root>' + +2927 ''.join('<a xmlns:n{n}="NS{n}">'.format(n=i) for i in range(100)) + +2928 '<n64:x/>' + '</a>'*100 + '</root>').encode('utf8') +2929 root = self.etree.etree.fromstring(xml) -2917 self.assertEqual(xml, self.fromstring(xml) +2930 self.assertEqual(xml, self.etree.tostring(root)) -2918 self.etree.tostring(root)) +2931 self.etree.cleanup_namespaces(root) -2919 self.assertEqual( -2920 b'<root>' + b'<a>'*64 + b'<a xmlns:n64="NS64">' + b'<a>'*35 + -2921 b'<n64:x/>' + b'</a>'*100 + b'</root>', -2922 self.etree.cleanup_namespaces(root) +2932 self.assertEqual( +2933 b'<root>' + b'<a>'*64 + b'<a xmlns:n64="NS64">' + b'<a>'*35 + +2934 b'<n64:x/>' + b'</a>'*100 + b'</root>', +2935 self.etree.tostring(root)) -
2923 -
2925 xml = ('<root>' + -2926 ''.join('<a xmlns:n{n}="NS{n}">'.format(n=i) for i in range(100)) + -2927 '<n64:x xmlns:a="A" a:attr="X"/>' + -2928 '</a>'*100 + -2929 '</root>').encode('utf8') -2930 root = self.etree.tostring(root)) +
2936 +
2938 xml = ('<root>' + +2939 ''.join('<a xmlns:n{n}="NS{n}">'.format(n=i) for i in range(100)) + +2940 '<n64:x xmlns:a="A" a:attr="X"/>' + +2941 '</a>'*100 + +2942 '</root>').encode('utf8') +2943 root = self.etree.etree.fromstring(xml) -2931 self.assertEqual(xml, self.fromstring(xml) +2944 self.assertEqual(xml, self.etree.tostring(root)) -2932 self.etree.tostring(root)) +2945 self.etree.cleanup_namespaces(root, top_nsmap={'n64': 'NS64'}) -2933 self.assertEqual( -2934 b'<root xmlns:n64="NS64">' + b'<a>'*100 + -2935 b'<n64:x xmlns:a="A" a:attr="X"/>' + b'</a>'*100 + b'</root>', -2936 self.etree.cleanup_namespaces(root, top_nsmap={'n64': 'NS64'}) +2946 self.assertEqual( +2947 b'<root xmlns:n64="NS64">' + b'<a>'*100 + +2948 b'<n64:x xmlns:a="A" a:attr="X"/>' + b'</a>'*100 + b'</root>', +2949 self.etree.tostring(root)) -
2937 -
2939 xml = ('<root xmlns:n64="NS64" xmlns:foo="FOO" xmlns:unused1="UNUSED" xmlns:no="NO">' -2940 '<a xmlns:unused2="UNUSED"><n64:x xmlns:a="A" a:attr="X"/></a>' -2941 '<foo>foo:bar</foo>' -2942 '</root>').encode('utf8') -2943 root = self.etree.tostring(root)) +
2950 +
2952 xml = ('<root xmlns:n64="NS64" xmlns:foo="FOO" xmlns:unused1="UNUSED" xmlns:no="NO">' +2953 '<a xmlns:unused2="UNUSED"><n64:x xmlns:a="A" a:attr="X"/></a>' +2954 '<foo>foo:bar</foo>' +2955 '</root>').encode('utf8') +2956 root = self.etree.etree.fromstring(xml) -2944 self.assertEqual(xml, self.fromstring(xml) +2957 self.assertEqual(xml, self.etree.tostring(root)) -2945 self.etree.tostring(root)) +2958 self.etree.cleanup_namespaces(root, keep_ns_prefixes=['foo']) -2946 self.assertEqual( -2947 b'<root xmlns:n64="NS64" xmlns:foo="FOO">' -2948 b'<a><n64:x xmlns:a="A" a:attr="X"/></a>' -2949 b'<foo>foo:bar</foo>' -2950 b'</root>', -2951 self.etree.cleanup_namespaces(root, keep_ns_prefixes=['foo']) +2959 self.assertEqual( +2960 b'<root xmlns:n64="NS64" xmlns:foo="FOO">' +2961 b'<a><n64:x xmlns:a="A" a:attr="X"/></a>' +2962 b'<foo>foo:bar</foo>' +2963 b'</root>', +2964 self.etree.tostring(root)) -
2952 -
2954 xml = ('<root xmlns:n64="NS64" xmlns:unused1="UNUSED" xmlns:no="NO">' -2955 '<sub xmlns:foo="FOO">' -2956 '<a xmlns:unused2="UNUSED"><n64:x xmlns:a="A" a:attr="X"/></a>' -2957 '<foo>foo:bar</foo>' -2958 '</sub>' -2959 '</root>').encode('utf8') -2960 root = self.etree.tostring(root)) +
2965 +
2967 xml = ('<root xmlns:n64="NS64" xmlns:unused1="UNUSED" xmlns:no="NO">' +2968 '<sub xmlns:foo="FOO">' +2969 '<a xmlns:unused2="UNUSED"><n64:x xmlns:a="A" a:attr="X"/></a>' +2970 '<foo>foo:bar</foo>' +2971 '</sub>' +2972 '</root>').encode('utf8') +2973 root = self.etree.etree.fromstring(xml) -2961 self.assertEqual(xml, self.fromstring(xml) +2974 self.assertEqual(xml, self.etree.tostring(root)) -2962 self.etree.tostring(root)) +2975 self.etree.cleanup_namespaces( -2963 root, -2964 top_nsmap={'foo': 'FOO', 'unused1': 'UNUSED'}, -2965 keep_ns_prefixes=['foo']) -2966 self.assertEqual( -2967 b'<root xmlns:n64="NS64" xmlns:foo="FOO">' -2968 b'<sub>' -2969 b'<a><n64:x xmlns:a="A" a:attr="X"/></a>' -2970 b'<foo>foo:bar</foo>' -2971 b'</sub>' -2972 b'</root>', -2973 self.etree.cleanup_namespaces( +2976 root, +2977 top_nsmap={'foo': 'FOO', 'unused1': 'UNUSED'}, +2978 keep_ns_prefixes=['foo']) +2979 self.assertEqual( +2980 b'<root xmlns:n64="NS64" xmlns:foo="FOO">' +2981 b'<sub>' +2982 b'<a><n64:x xmlns:a="A" a:attr="X"/></a>' +2983 b'<foo>foo:bar</foo>' +2984 b'</sub>' +2985 b'</root>', +2986 self.etree.tostring(root)) -
2974 -
2975 - def test_element_nsmap(self): -
2987 +
2988 - def test_element_nsmap(self): +
2989 etree = self.etree = self.etree -2977 -2978 r = {None: 'http://ns.infrae.com/foo', -2979 'hoi': 'http://ns.infrae.com/hoi'} -2980 e = etree +2990 +2991 r = {None: 'http://ns.infrae.com/foo', +2992 'hoi': 'http://ns.infrae.com/hoi'} +2993 e = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r) -2981 self.assertEqual( -2982 r, -2983 e.nsmap) -
2984 -
2985 - def test_subelement_nsmap(self): -
2986 Element('{http://ns.infrae.com/foo}bar', nsmap=r) +2994 self.assertEqual( +2995 r, +2996 e.nsmap) +
2997 +
2998 - def test_subelement_nsmap(self): +
2999 etree = self.etree = self.etree -2987 -2988 re = {None: 'http://ns.infrae.com/foo', -2989 'hoi': 'http://ns.infrae.com/hoi'} -2990 e = etree +3000 +3001 re = {None: 'http://ns.infrae.com/foo', +3002 'hoi': 'http://ns.infrae.com/hoi'} +3003 e = etree.etree.Element('{http://ns.infrae.com/foo}bar', nsmap=re) -2991 -2992 rs = {None: 'http://ns.infrae.com/honk', -2993 'top': 'http://ns.infrae.com/top'} -2994 s = Element('{http://ns.infrae.com/foo}bar', nsmap=re) +3004 +3005 rs = {None: 'http://ns.infrae.com/honk', +3006 'top': 'http://ns.infrae.com/top'} +3007 s = etree.SubElement(e, '{http://ns.infrae.com/honk}bar', nsmap=rs) -2995 -2996 r = re.etree.SubElement(e, '{http://ns.infrae.com/honk}bar', nsmap=rs) +3008 +3009 r = re.copy() -2997 r.update(rs) -2998 self.assertEqual(re, e.nsmap) -2999 self.assertEqual(r, s.nsmap) -
3000 -
3001 - def test_html_prefix_nsmap(self): -
3002 copy() +3010 r.update(rs) +3011 self.assertEqual(re, e.nsmap) +3012 self.assertEqual(r, s.nsmap) +
3013 +
3014 - def test_html_prefix_nsmap(self): +
3015 etree = self.etree = self.etree -3003 el = etree +3016 el = etree.etree.HTML('<hha:page-description>aa</hha:page-description>').HTML('<hha:page-description>aa</hha:page-description>').find('.//page-description') -3004 self.assertEqual({'hha': None}, el.nsmap) -
3005 -
3007 find('.//page-description') +3017 self.assertEqual({'hha': None}, el.nsmap) +
3018 +
3020 Element = self.Element = self.etree.etree.Element -3008 SubElement = self.Element +3021 SubElement = self.etree.SubElement -3009 -3010 a = etree.SubElement +3022 +3023 a = Element('a') -3011 b = SubElement(a, 'b') -3012 c = SubElement(a, 'c') -3013 d = SubElement(b, 'd') -3014 e = SubElement(c, 'e') -3015 f = SubElement(c, 'f') -3016 -3017 self.assertEqual( -3018 [a, b], -3019 list(a.getiterator('a', 'b'))) -3020 self.assertEqual( -3021 [], -3022 list(a.getiterator('x', 'y'))) -3023 self.assertEqual( -3024 [a, f], -3025 list(a.getiterator('f', 'a'))) -3026 self.assertEqual( -3027 [c, e, f], -3028 list(c.getiterator('c', '*', 'a'))) -3029 self.assertEqual( -3030 [], -3031 list(a.getiterator( (), () ))) -
3032 -
3034 Element('a') +3024 b = SubElement(a, 'b') +3025 c = SubElement(a, 'c') +3026 d = SubElement(b, 'd') +3027 e = SubElement(c, 'e') +3028 f = SubElement(c, 'f') +3029 +3030 self.assertEqual( +3031 [a, b], +3032 list(a.getiterator('a', 'b'))) +3033 self.assertEqual( +3034 [], +3035 list(a.getiterator('x', 'y'))) +3036 self.assertEqual( +3037 [a, f], +3038 list(a.getiterator('f', 'a'))) +3039 self.assertEqual( +3040 [c, e, f], +3041 list(c.getiterator('c', '*', 'a'))) +3042 self.assertEqual( +3043 [], +3044 list(a.getiterator( (), () ))) +
3045 +
3047 Element = self.Element = self.etree.etree.Element -3035 SubElement = self.Element +3048 SubElement = self.etree.SubElement -3036 -3037 a = etree.SubElement +3049 +3050 a = Element('a') -3038 b = SubElement(a, 'b') -3039 c = SubElement(a, 'c') -3040 d = SubElement(b, 'd') -3041 e = SubElement(c, 'e') -3042 f = SubElement(c, 'f') -3043 -3044 self.assertEqual( -3045 [a, b], -3046 list(a.getiterator( ('a', 'b') ))) -3047 self.assertEqual( -3048 [], -3049 list(a.getiterator( ('x', 'y') ))) -3050 self.assertEqual( -3051 [a, f], -3052 list(a.getiterator( ('f', 'a') ))) -3053 self.assertEqual( -3054 [c, e, f], -3055 list(c.getiterator( ('c', '*', 'a') ))) -3056 self.assertEqual( -3057 [], -3058 list(a.getiterator( () ))) -
3059 -
3061 Element('a') +3051 b = SubElement(a, 'b') +3052 c = SubElement(a, 'c') +3053 d = SubElement(b, 'd') +3054 e = SubElement(c, 'e') +3055 f = SubElement(c, 'f') +3056 +3057 self.assertEqual( +3058 [a, b], +3059 list(a.getiterator( ('a', 'b') ))) +3060 self.assertEqual( +3061 [], +3062 list(a.getiterator( ('x', 'y') ))) +3063 self.assertEqual( +3064 [a, f], +3065 list(a.getiterator( ('f', 'a') ))) +3066 self.assertEqual( +3067 [c, e, f], +3068 list(c.getiterator( ('c', '*', 'a') ))) +3069 self.assertEqual( +3070 [], +3071 list(a.getiterator( () ))) +
3072 +
3074 Element = self.Element = self.etree.etree.Element -3062 SubElement = self.Element +3075 SubElement = self.etree.SubElement -3063 -3064 a = etree.SubElement +3076 +3077 a = Element('{a}a') -3065 b = SubElement(a, '{a}b') -3066 c = SubElement(a, '{a}c') -3067 d = SubElement(b, '{b}d') -3068 e = SubElement(c, '{a}e') -3069 f = SubElement(c, '{b}f') -3070 g = SubElement(c, 'g') -3071 -3072 self.assertEqual( -3073 [a], -3074 list(a.getiterator('{a}a'))) -3075 self.assertEqual( -3076 [], -3077 list(a.getiterator('{b}a'))) -3078 self.assertEqual( -3079 [], -3080 list(a.getiterator('a'))) -3081 self.assertEqual( -3082 [a,b,d,c,e,f,g], -3083 list(a.getiterator('*'))) -3084 self.assertEqual( -3085 [f], -3086 list(c.getiterator('{b}*'))) -3087 self.assertEqual( -3088 [d, f], -3089 list(a.getiterator('{b}*'))) -3090 self.assertEqual( -3091 [g], -3092 list(a.getiterator('g'))) -3093 self.assertEqual( -3094 [g], -3095 list(a.getiterator('{}g'))) -3096 self.assertEqual( -3097 [g], -3098 list(a.getiterator('{}*'))) -
3099 -
3101 Element('{a}a') +3078 b = SubElement(a, '{a}b') +3079 c = SubElement(a, '{a}c') +3080 d = SubElement(b, '{b}d') +3081 e = SubElement(c, '{a}e') +3082 f = SubElement(c, '{b}f') +3083 g = SubElement(c, 'g') +3084 +3085 self.assertEqual( +3086 [a], +3087 list(a.getiterator('{a}a'))) +3088 self.assertEqual( +3089 [], +3090 list(a.getiterator('{b}a'))) +3091 self.assertEqual( +3092 [], +3093 list(a.getiterator('a'))) +3094 self.assertEqual( +3095 [a,b,d,c,e,f,g], +3096 list(a.getiterator('*'))) +3097 self.assertEqual( +3098 [f], +3099 list(c.getiterator('{b}*'))) +3100 self.assertEqual( +3101 [d, f], +3102 list(a.getiterator('{b}*'))) +3103 self.assertEqual( +3104 [g], +3105 list(a.getiterator('g'))) +3106 self.assertEqual( +3107 [g], +3108 list(a.getiterator('{}g'))) +3109 self.assertEqual( +3110 [g], +3111 list(a.getiterator('{}*'))) +
3112 +
3114 Element = self.Element = self.etree.etree.Element -3102 Comment = self.Element +3115 Comment = self.etree.Comment -3103 SubElement = self.etree.Comment +3116 SubElement = self.etree.SubElement -3104 -3105 a = etree.SubElement +3117 +3118 a = Element('{a}a') -3106 b = SubElement(a, '{nsA}b') -3107 c = SubElement(b, '{nsB}b') -3108 d = SubElement(a, 'b') -3109 e = SubElement(a, '{nsA}e') -3110 f = SubElement(e, '{nsB}e') -3111 g = SubElement(e, 'e') -3112 a.append(Comment('test')) -3113 -3114 self.assertEqual( -3115 [b, c, d], -3116 list(a.getiterator('{*}b'))) -3117 self.assertEqual( -3118 [e, f, g], -3119 list(a.getiterator('{*}e'))) -3120 self.assertEqual( -3121 [a, b, c, d, e, f, g], -3122 list(a.getiterator('{*}*'))) -
3123 -
3125 Element('{a}a') +3119 b = SubElement(a, '{nsA}b') +3120 c = SubElement(b, '{nsB}b') +3121 d = SubElement(a, 'b') +3122 e = SubElement(a, '{nsA}e') +3123 f = SubElement(e, '{nsB}e') +3124 g = SubElement(e, 'e') +3125 a.append(Comment('test')) +3126 +3127 self.assertEqual( +3128 [b, c, d], +3129 list(a.getiterator('{*}b'))) +3130 self.assertEqual( +3131 [e, f, g], +3132 list(a.getiterator('{*}e'))) +3133 self.assertEqual( +3134 [a, b, c, d, e, f, g], +3135 list(a.getiterator('{*}*'))) +
3136 +
3138 Element = self.Element = self.etree.etree.Element -3126 Entity = self.Element +3139 Entity = self.etree.Entity -3127 SubElement = self.etree.Entity +3140 SubElement = self.etree.SubElement -3128 -3129 a = etree.SubElement +3141 +3142 a = Element('a') -3130 b = SubElement(a, 'b') -3131 entity_b = Entity("TEST-b") -3132 b.append(entity_b) -3133 -3134 self.assertEqual( -3135 [entity_b], -3136 list(a.getiterator(Entity))) -3137 -3138 entity_a = Entity("TEST-a") -3139 a.append(entity_a) -3140 -3141 self.assertEqual( -3142 [entity_b, entity_a], -3143 list(a.getiterator(Entity))) -3144 -3145 self.assertEqual( -3146 [entity_b], -3147 list(b.getiterator(Entity))) -
3148 -
3150 Element('a') +3143 b = SubElement(a, 'b') +3144 entity_b = Entity("TEST-b") +3145 b.append(entity_b) +3146 +3147 self.assertEqual( +3148 [entity_b], +3149 list(a.getiterator(Entity))) +3150 +3151 entity_a = Entity("TEST-a") +3152 a.append(entity_a) +3153 +3154 self.assertEqual( +3155 [entity_b, entity_a], +3156 list(a.getiterator(Entity))) +3157 +3158 self.assertEqual( +3159 [entity_b], +3160 list(b.getiterator(Entity))) +
3161 +
3163 Element = self.Element = self.etree.etree.Element -3151 Comment = self.Element +3164 Comment = self.etree.Comment -3152 PI = self.etree.Comment +3165 PI = self.etree.PI -3153 SubElement = self.etree.PI +3166 SubElement = self.etree.SubElement -3154 -3155 a = etree.SubElement +3167 +3168 a = Element('a') -3156 b = SubElement(a, 'b') -3157 a.append(Comment("test")) -3158 a.append(PI("pi", "content")) -3159 c = SubElement(a, 'c') -3160 -3161 self.assertEqual( -3162 [a, b, c], -3163 list(a.getiterator(Element('a') +3169 b = SubElement(a, 'b') +3170 a.append(Comment("test")) +3171 a.append(PI("pi", "content")) +3172 c = SubElement(a, 'c') +3173 +3174 self.assertEqual( +3175 [a, b, c], +3176 list(a.getiterator(Element))) -
3164 -
3166 # ElementTree iterates over everything here -3167 Element))) +
3177 +
3179 # ElementTree iterates over everything here +3180 Element = self.Element = self.etree.etree.Element -3168 Comment = self.Element +3181 Comment = self.etree.Comment -3169 PI = self.etree.Comment +3182 PI = self.etree.PI -3170 SubElement = self.etree.PI +3183 SubElement = self.etree.SubElement -3171 -3172 a = etree.SubElement +3184 +3185 a = Element('a') -3173 b = SubElement(a, 'b') -3174 a.append(Comment("test")) -3175 a.append(PI("pi", "content")) -3176 c = SubElement(a, 'c') -3177 -3178 self.assertEqual( -3179 [a, b, c], -3180 list(a.getiterator('*'))) -
3181 -
3183 a = Element('a') +3186 b = SubElement(a, 'b') +3187 a.append(Comment("test")) +3188 a.append(PI("pi", "content")) +3189 c = SubElement(a, 'c') +3190 +3191 self.assertEqual( +3192 [a, b, c], +3193 list(a.getiterator('*'))) +
3194 +
3196 a = etree.etree.Element("a") -3184 b = Element("a") +3197 b = etree.SubElement(a, "b") -3185 c = etree.SubElement(a, "b") +3198 c = etree.SubElement(a, "c") -3186 d1 = etree.SubElement(a, "c") +3199 d1 = etree.SubElement(c, "d") -3187 d2 = etree.SubElement(c, "d") +3200 d2 = etree.SubElement(c, "d") -3188 c.etree.SubElement(c, "d") +3201 c.text = d1.text = d1.text = 'TEXT' -3189 -3190 tree = text = 'TEXT' +3202 +3203 tree = etree.etree.ElementTree(a) -3191 self.assertEqual('.', tree.getelementpath(a)) -3192 self.assertEqual('c/d[1]', tree.getelementpath(d1)) -3193 self.assertEqual('c/d[2]', tree.getelementpath(d2)) -3194 -3195 self.assertEqual(d1, tree.ElementTree(a) +3204 self.assertEqual('.', tree.getelementpath(a)) +3205 self.assertEqual('c/d[1]', tree.getelementpath(d1)) +3206 self.assertEqual('c/d[2]', tree.getelementpath(d2)) +3207 +3208 self.assertEqual(d1, tree.find(tree.getelementpath(d1))) -3196 self.assertEqual(d2, tree.find(tree.getelementpath(d1))) +3209 self.assertEqual(d2, tree.find(tree.getelementpath(d2))) -3197 -3198 tree = find(tree.getelementpath(d2))) +3210 +3211 tree = etree.etree.ElementTree(c) -3199 self.assertEqual('.', tree.getelementpath(c)) -3200 self.assertEqual('d[2]', tree.getelementpath(d2)) -3201 self.assertEqual(d2, tree.ElementTree(c) +3212 self.assertEqual('.', tree.getelementpath(c)) +3213 self.assertEqual('d[2]', tree.getelementpath(d2)) +3214 self.assertEqual(d2, tree.find(tree.getelementpath(d2))) -3202 -3203 tree = find(tree.getelementpath(d2))) +3215 +3216 tree = etree.etree.ElementTree(b) # not a parent of a/c/d1/d2 -3204 self.assertEqual('.', tree.getelementpath(b)) -3205 self.assertRaises(ValueError, tree.getelementpath, a) -3206 self.assertRaises(ValueError, tree.getelementpath, c) -3207 self.assertRaises(ValueError, tree.getelementpath, d2) -
3208 -
3210 a = ElementTree(b) # not a parent of a/c/d1/d2 +3217 self.assertEqual('.', tree.getelementpath(b)) +3218 self.assertRaises(ValueError, tree.getelementpath, a) +3219 self.assertRaises(ValueError, tree.getelementpath, c) +3220 self.assertRaises(ValueError, tree.getelementpath, d2) +
3221 +
3223 a = etree.etree.Element("{http://ns1/}a") -3211 b = Element("{http://ns1/}a") +3224 b = etree.SubElement(a, "{http://ns1/}b") -3212 c = etree.SubElement(a, "{http://ns1/}b") +3225 c = etree.SubElement(a, "{http://ns1/}c") -3213 d1 = etree.SubElement(a, "{http://ns1/}c") +3226 d1 = etree.SubElement(c, "{http://ns1/}d") -3214 d2 = etree.SubElement(c, "{http://ns1/}d") +3227 d2 = etree.SubElement(c, "{http://ns2/}d") -3215 d3 = etree.SubElement(c, "{http://ns2/}d") +3228 d3 = etree.SubElement(c, "{http://ns1/}d") -3216 -3217 tree = etree.SubElement(c, "{http://ns1/}d") +3229 +3230 tree = etree.etree.ElementTree(a) -3218 self.assertEqual('.', tree.getelementpath(a)) -3219 self.assertEqual('{http://ns1/}c/{http://ns1/}d[1]', -3220 tree.getelementpath(d1)) -3221 self.assertEqual('{http://ns1/}c/{http://ns2/}d', -3222 tree.getelementpath(d2)) -3223 self.assertEqual('{http://ns1/}c/{http://ns1/}d[2]', -3224 tree.getelementpath(d3)) -3225 -3226 self.assertEqual(a, tree.ElementTree(a) +3231 self.assertEqual('.', tree.getelementpath(a)) +3232 self.assertEqual('{http://ns1/}c/{http://ns1/}d[1]', +3233 tree.getelementpath(d1)) +3234 self.assertEqual('{http://ns1/}c/{http://ns2/}d', +3235 tree.getelementpath(d2)) +3236 self.assertEqual('{http://ns1/}c/{http://ns1/}d[2]', +3237 tree.getelementpath(d3)) +3238 +3239 self.assertEqual(a, tree.find(tree.getelementpath(a))) -3227 self.assertEqual(b, tree.find(tree.getelementpath(a))) +3240 self.assertEqual(b, tree.find(tree.getelementpath(b))) -3228 self.assertEqual(c, tree.find(tree.getelementpath(b))) +3241 self.assertEqual(c, tree.find(tree.getelementpath(c))) -3229 self.assertEqual(d1, tree.find(tree.getelementpath(c))) +3242 self.assertEqual(d1, tree.find(tree.getelementpath(d1))) -3230 self.assertEqual(d2, tree.find(tree.getelementpath(d1))) +3243 self.assertEqual(d2, tree.find(tree.getelementpath(d2))) -3231 self.assertEqual(d3, tree.find(tree.getelementpath(d2))) +3244 self.assertEqual(d3, tree.find(tree.getelementpath(d3))) -3232 -3233 tree = find(tree.getelementpath(d3))) +3245 +3246 tree = etree.etree.ElementTree(c) -3234 self.assertEqual('{http://ns1/}d[1]', tree.getelementpath(d1)) -3235 self.assertEqual('{http://ns2/}d', tree.getelementpath(d2)) -3236 self.assertEqual('{http://ns1/}d[2]', tree.getelementpath(d3)) -3237 self.assertEqual(d1, tree.ElementTree(c) +3247 self.assertEqual('{http://ns1/}d[1]', tree.getelementpath(d1)) +3248 self.assertEqual('{http://ns2/}d', tree.getelementpath(d2)) +3249 self.assertEqual('{http://ns1/}d[2]', tree.getelementpath(d3)) +3250 self.assertEqual(d1, tree.find(tree.getelementpath(d1))) -3238 self.assertEqual(d2, tree.find(tree.getelementpath(d1))) +3251 self.assertEqual(d2, tree.find(tree.getelementpath(d2))) -3239 self.assertEqual(d3, tree.find(tree.getelementpath(d2))) +3252 self.assertEqual(d3, tree.find(tree.getelementpath(d3))) -3240 -3241 tree = find(tree.getelementpath(d3))) +3253 +3254 tree = etree.etree.ElementTree(b) # not a parent of d1/d2 -3242 self.assertRaises(ValueError, tree.getelementpath, d1) -3243 self.assertRaises(ValueError, tree.getelementpath, d2) -
3244 -
3245 - def test_elementtree_find_qname(self): -
3246 ElementTree(b) # not a parent of d1/d2 +3255 self.assertRaises(ValueError, tree.getelementpath, d1) +3256 self.assertRaises(ValueError, tree.getelementpath, d2) +
3257 +
3258 - def test_elementtree_find_qname(self): +
3259 XML = self.XML = self.etree.etree.XML -3247 XML +3260 ElementTree = self.ElementTree = self.etree.etree.ElementTree -3248 QName = self.ElementTree +3261 QName = self.etree.QName -3249 tree = etree.QName +3262 tree = ElementTree(ElementTree(XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>'))) -3250 self.assertEqual(tree.XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>'))) +3263 self.assertEqual(tree.find(QName("c")), tree.getroot()[2]) -
3251 -
3253 find(QName("c")), tree.getroot()[2]) +
3264 +
3266 XML = self.XML = self.etree.etree.XML -3254 XML +3267 ElementTree = self.ElementTree = self.etree.etree.ElementTree -3255 QName = self.ElementTree +3268 QName = self.etree.QName -3256 tree = etree.QName +3269 tree = ElementTree(ElementTree(XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>'))) -3257 self.assertEqual(len(list(tree.findall(QName("c")))), 1) -
3258 -
3260 XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>'))) +3270 self.assertEqual(len(list(tree.findall(QName("c")))), 1) +
3271 +
3273 XML = self.XML = self.etree.etree.XML -3261 XML +3274 ElementTree = self.ElementTree = self.etree.etree.ElementTree -3262 QName = self.ElementTree +3275 QName = self.etree.QName -3263 tree = etree.QName +3276 tree = ElementTree(ElementTree(XML( -3264 _bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>'))) -3265 self.assertEqual(len(list(tree.findall(QName("b")))), 2) -3266 self.assertEqual(len(list(tree.findall(QName("X", "b")))), 1) -
3267 -
3268 - def test_findall_ns(self): -
3269 XML( +3277 _bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>'))) +3278 self.assertEqual(len(list(tree.findall(QName("b")))), 2) +3279 self.assertEqual(len(list(tree.findall(QName("X", "b")))), 1) +
3280 +
3281 - def test_findall_ns(self): +
3282 XML = self.XML = self.etree.etree.XML -3270 root = XML +3283 root = XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>')) -3271 self.assertEqual(len(root.findall(".//{X}b")), 2) -3272 self.assertEqual(len(root.findall(".//{X}*")), 2) -3273 self.assertEqual(len(root.findall(".//b")), 3) -
3274 -
3276 XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>')) +3284 self.assertEqual(len(root.findall(".//{X}b")), 2) +3285 self.assertEqual(len(root.findall(".//{X}*")), 2) +3286 self.assertEqual(len(root.findall(".//b")), 3) +
3287 +
3289 XML = self.XML = self.etree.etree.XML -3277 root = XML +3290 root = XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><y:b/></a>')) -3278 nsmap = {'xx': 'X'} -3279 self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 2) -3280 self.assertEqual(len(root.findall(".//xx:*", namespaces=nsmap)), 2) -3281 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 2) -3282 nsmap = {'xx': 'Y'} -3283 self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 1) -3284 self.assertEqual(len(root.findall(".//xx:*", namespaces=nsmap)), 1) -3285 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 2) -
3286 -
3287 - def test_findall_empty_prefix(self): -
3288 XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><y:b/></a>')) +3291 nsmap = {'xx': 'X'} +3292 self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 2) +3293 self.assertEqual(len(root.findall(".//xx:*", namespaces=nsmap)), 2) +3294 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 2) +3295 nsmap = {'xx': 'Y'} +3296 self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 1) +3297 self.assertEqual(len(root.findall(".//xx:*", namespaces=nsmap)), 1) +3298 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 2) +
3299 +
3300 - def test_findall_empty_prefix(self): +
3301 XML = self.XML = self.etree.etree.XML -3289 root = XML +3302 root = XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><y:b/></a>')) -3290 nsmap = {'xx': 'X'} -3291 self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 2) -3292 nsmap = {'xx': 'X', None: 'Y'} -3293 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 1) -3294 nsmap = {'xx': 'X', '': 'Y'} -3295 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 1) -
3296 -
3297 - def test_findall_syntax_error(self): -
3298 XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><y:b/></a>')) +3303 nsmap = {'xx': 'X'} +3304 self.assertEqual(len(root.findall(".//xx:b", namespaces=nsmap)), 2) +3305 nsmap = {'xx': 'X', None: 'Y'} +3306 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 1) +3307 nsmap = {'xx': 'X', '': 'Y'} +3308 self.assertEqual(len(root.findall(".//b", namespaces=nsmap)), 1) +
3309 +
3310 - def test_findall_syntax_error(self): +
3311 XML = self.XML = self.etree.etree.XML -3299 root = XML +3312 root = XML(_bytes('<a><b><c/></b><b/><c><b/><b/></c><b/></a>')) -3300 self.assertRaises(SyntaxError, root.findall, '') -3301 self.assertRaises(SyntaxError, root.findall, '//') # absolute path on Element -3302 self.assertRaises(SyntaxError, root.findall, './//') -
3303 -
3304 - def test_index(self): -
3305 XML(_bytes('<a><b><c/></b><b/><c><b/><b/></c><b/></a>')) +3313 self.assertRaises(SyntaxError, root.findall, '') +3314 self.assertRaises(SyntaxError, root.findall, '//') # absolute path on Element +3315 self.assertRaises(SyntaxError, root.findall, './//') +
3316 +
3317 - def test_index(self): +
3318 etree = self.etree = self.etree -3306 e = etree +3319 e = etree.etree.Element('foo') -3307 for i in range(10): -3308 Element('foo') +3320 for i in range(10): +3321 etree.SubElement(e, 'a%s' % i) -3309 for i in range(10): -3310 self.assertEqual( -3311 i, -3312 e.index(e[i])) -3313 self.assertEqual( -3314 3, e.index(e[3], 3)) -3315 self.assertRaises( -3316 ValueError, e.index, e[3], 4) -3317 self.assertRaises( -3318 ValueError, e.index, e[3], 0, 2) -3319 self.assertRaises( -3320 ValueError, e.index, e[8], 0, -3) -3321 self.assertRaises( -3322 ValueError, e.index, e[8], -5, -3) -3323 self.assertEqual( -3324 8, e.index(e[8], 0, -1)) -3325 self.assertEqual( -3326 8, e.index(e[8], -12, -1)) -3327 self.assertEqual( -3328 0, e.index(e[0], -12, -1)) -
3329 -
3330 - def test_replace(self): -
3331 etree.SubElement(e, 'a%s' % i) +3322 for i in range(10): +3323 self.assertEqual( +3324 i, +3325 e.index(e[i])) +3326 self.assertEqual( +3327 3, e.index(e[3], 3)) +3328 self.assertRaises( +3329 ValueError, e.index, e[3], 4) +3330 self.assertRaises( +3331 ValueError, e.index, e[3], 0, 2) +3332 self.assertRaises( +3333 ValueError, e.index, e[8], 0, -3) +3334 self.assertRaises( +3335 ValueError, e.index, e[8], -5, -3) +3336 self.assertEqual( +3337 8, e.index(e[8], 0, -1)) +3338 self.assertEqual( +3339 8, e.index(e[8], -12, -1)) +3340 self.assertEqual( +3341 0, e.index(e[0], -12, -1)) +
3342 +
3343 - def test_replace(self): +
3344 etree = self.etree = self.etree -3332 e = etree +3345 e = etree.etree.Element('foo') -3333 for i in range(10): -3334 el = Element('foo') +3346 for i in range(10): +3347 el = etree.SubElement(e, 'a%s' % i) -3335 el.etree.SubElement(e, 'a%s' % i) +3348 el.text = "text%d" % i -3336 el.tail = "tail%d" % i -3337 -3338 child0 = e[0] -3339 child1 = e[1] -3340 child2 = e[2] -3341 -3342 e.replace(e[0], e[1]) -3343 self.assertEqual( -3344 9, len(e)) -3345 self.assertEqual( -3346 child1, e[0]) -3347 self.assertEqual( -3348 child1.text = "text%d" % i +3349 el.tail = "tail%d" % i +3350 +3351 child0 = e[0] +3352 child1 = e[1] +3353 child2 = e[2] +3354 +3355 e.replace(e[0], e[1]) +3356 self.assertEqual( +3357 9, len(e)) +3358 self.assertEqual( +3359 child1, e[0]) +3360 self.assertEqual( +3361 child1.text, "text1") -3349 self.assertEqual( -3350 child1.tail, "tail1") -3351 self.assertEqual( -3352 child0.tail, "tail0") -3353 self.assertEqual( -3354 child2, e[1]) -3355 -3356 e.replace(e[-1], e[0]) -3357 self.assertEqual( -3358 child1, e[-1]) -3359 self.assertEqual( -3360 child1.text, "text1") +3362 self.assertEqual( +3363 child1.tail, "tail1") +3364 self.assertEqual( +3365 child0.tail, "tail0") +3366 self.assertEqual( +3367 child2, e[1]) +3368 +3369 e.replace(e[-1], e[0]) +3370 self.assertEqual( +3371 child1, e[-1]) +3372 self.assertEqual( +3373 child1.text, "text1") -3361 self.assertEqual( -3362 child1.tail, "tail1") -3363 self.assertEqual( -3364 child2, e[0]) -
3365 -
3366 - def test_replace_new(self): -
3367 text, "text1") +3374 self.assertEqual( +3375 child1.tail, "tail1") +3376 self.assertEqual( +3377 child2, e[0]) +
3378 +
3379 - def test_replace_new(self): +
3380 etree = self.etree = self.etree -3368 e = etree +3381 e = etree.etree.Element('foo') -3369 for i in range(10): -3370 Element('foo') +3382 for i in range(10): +3383 etree.SubElement(e, 'a%s' % i) -3371 -3372 new_element = etree.SubElement(e, 'a%s' % i) +3384 +3385 new_element = etree.etree.Element("test") -3373 new_element.Element("test") +3386 new_element.text = "TESTTEXT" -3374 new_element.tail = "TESTTAIL" -3375 child1 = e[1] -3376 e.replace(e[0], new_element) -3377 self.assertEqual( -3378 new_element, e[0]) -3379 self.assertEqual( -3380 "TESTTEXT", -3381 e[0].text = "TESTTEXT" +3387 new_element.tail = "TESTTAIL" +3388 child1 = e[1] +3389 e.replace(e[0], new_element) +3390 self.assertEqual( +3391 new_element, e[0]) +3392 self.assertEqual( +3393 "TESTTEXT", +3394 e[0].text) -3382 self.assertEqual( -3383 "TESTTAIL", -3384 e[0].tail) -3385 self.assertEqual( -3386 child1, e[1]) -
3387 -
3388 - def test_setslice_all_reversed(self): -
3389 text) +3395 self.assertEqual( +3396 "TESTTAIL", +3397 e[0].tail) +3398 self.assertEqual( +3399 child1, e[1]) +
3400 +
3401 - def test_setslice_all_reversed(self): +
3402 Element = self.Element = self.etree.etree.Element -3390 SubElement = self.Element +3403 SubElement = self.etree.SubElement -3391 -3392 a = etree.SubElement +3404 +3405 a = Element('a') -3393 -3394 e = Element('a') +3406 +3407 e = Element('e') -3395 f = Element('e') +3408 f = Element('f') -3396 g = Element('f') +3409 g = Element('g') -3397 -3398 a[:] = [e, f, g] -3399 self.assertEqual( -3400 [e, f, g], -3401 list(a)) -3402 -3403 a[::-1] = [e, f, g] -3404 self.assertEqual( -3405 [g, f, e], -3406 list(a)) -
3407 -
3408 - def test_setslice_step(self): -
3409 Element('g') +3410 +3411 a[:] = [e, f, g] +3412 self.assertEqual( +3413 [e, f, g], +3414 list(a)) +3415 +3416 a[::-1] = [e, f, g] +3417 self.assertEqual( +3418 [g, f, e], +3419 list(a)) +
3420 +
3421 - def test_setslice_step(self): +
3422 Element = self.Element = self.etree.etree.Element -3410 SubElement = self.Element +3423 SubElement = self.etree.SubElement -3411 -3412 a = etree.SubElement +3424 +3425 a = Element('a') -3413 b = SubElement(a, 'b') -3414 c = SubElement(a, 'c') -3415 d = SubElement(a, 'd') -3416 e = SubElement(a, 'e') -3417 -3418 x = Element('a') +3426 b = SubElement(a, 'b') +3427 c = SubElement(a, 'c') +3428 d = SubElement(a, 'd') +3429 e = SubElement(a, 'e') +3430 +3431 x = Element('x') -3419 y = Element('x') +3432 y = Element('y') -3420 -3421 a[1::2] = [x, y] -3422 self.assertEqual( -3423 [b, x, d, y], -3424 list(a)) -
3425 -
3426 - def test_setslice_step_negative(self): -
3427 Element('y') +3433 +3434 a[1::2] = [x, y] +3435 self.assertEqual( +3436 [b, x, d, y], +3437 list(a)) +
3438 +
3439 - def test_setslice_step_negative(self): +
3440 Element = self.Element = self.etree.etree.Element -3428 SubElement = self.Element +3441 SubElement = self.etree.SubElement -3429 -3430 a = etree.SubElement +3442 +3443 a = Element('a') -3431 b = SubElement(a, 'b') -3432 c = SubElement(a, 'c') -3433 d = SubElement(a, 'd') -3434 e = SubElement(a, 'e') -3435 -3436 x = Element('a') +3444 b = SubElement(a, 'b') +3445 c = SubElement(a, 'c') +3446 d = SubElement(a, 'd') +3447 e = SubElement(a, 'e') +3448 +3449 x = Element('x') -3437 y = Element('x') +3450 y = Element('y') -3438 -3439 a[1::-1] = [x, y] -3440 self.assertEqual( -3441 [y, x, d, e], -3442 list(a)) -
3443 -
3445 Element('y') +3451 +3452 a[1::-1] = [x, y] +3453 self.assertEqual( +3454 [y, x, d, e], +3455 list(a)) +
3456 +
3458 Element = self.Element = self.etree.etree.Element -3446 SubElement = self.Element +3459 SubElement = self.etree.SubElement -3447 -3448 a = etree.SubElement +3460 +3461 a = Element('a') -3449 b = SubElement(a, 'b') -3450 c = SubElement(a, 'c') -3451 d = SubElement(a, 'd') -3452 e = SubElement(a, 'e') -3453 -3454 x = Element('a') +3462 b = SubElement(a, 'b') +3463 c = SubElement(a, 'c') +3464 d = SubElement(a, 'd') +3465 e = SubElement(a, 'e') +3466 +3467 x = Element('x') -3455 y = Element('x') +3468 y = Element('y') -3456 -3457 a[::-2] = [x, y] -3458 self.assertEqual( -3459 [b, y, d, x], -3460 list(a)) -
3461 -
3462 - def test_setslice_step_overrun(self): -
3463 Element('y') +3469 +3470 a[::-2] = [x, y] +3471 self.assertEqual( +3472 [b, y, d, x], +3473 list(a)) +
3474 +
3475 - def test_setslice_step_overrun(self): +
3476 Element = self.Element = self.etree.etree.Element -3464 SubElement = self.Element +3477 SubElement = self.etree.SubElement -3465 try: -3466 slice -3467 except NameError: -3468 print("slice() not found") -3469 return -3470 -3471 a = etree.SubElement +3478 try: +3479 slice +3480 except NameError: +3481 print("slice() not found") +3482 return +3483 +3484 a = Element('a') -3472 b = SubElement(a, 'b') -3473 c = SubElement(a, 'c') -3474 d = SubElement(a, 'd') -3475 e = SubElement(a, 'e') -3476 -3477 x = Element('a') +3485 b = SubElement(a, 'b') +3486 c = SubElement(a, 'c') +3487 d = SubElement(a, 'd') +3488 e = SubElement(a, 'e') +3489 +3490 x = Element('x') -3478 y = Element('x') +3491 y = Element('y') -3479 z = Element('y') +3492 z = Element('z') -3480 -3481 self.assertRaises( -3482 ValueError, -3483 operator.setitem, a, slice(1,None,2), [x, y, z]) -3484 -3485 self.assertEqual( -3486 [b, c, d, e], -3487 list(a)) -
3488 -
3489 - def test_sourceline_XML(self): -
3490 Element('z') +3493 +3494 self.assertRaises( +3495 ValueError, +3496 operator.setitem, a, slice(1,None,2), [x, y, z]) +3497 +3498 self.assertEqual( +3499 [b, c, d, e], +3500 list(a)) +
3501 +
3502 - def test_sourceline_XML(self): +
3503 XML = self.XML = self.etree.etree.XML -3491 root = XML +3504 root = XML(_bytes('''<?xml version="1.0"?> -3492 <root><test> -3493 -3494 <bla/></test> -3495 </root> -3496 ''')) -3497 -3498 self.assertEqual( -3499 [2, 2, 4], -3500 [ el.sourceline for el in root.getiterator() ]) -
3501 -
3502 - def test_large_sourceline_XML(self): -
3503 XML(_bytes('''<?xml version="1.0"?> +3505 <root><test> +3506 +3507 <bla/></test> +3508 </root> +3509 ''')) +3510 +3511 self.assertEqual( +3512 [2, 2, 4], +3513 [ el.sourceline for el in root.getiterator() ]) +
3514 +
3515 - def test_large_sourceline_XML(self): +
3516 XML = self.XML = self.etree.etree.XML -3504 root = XML +3517 root = XML(_bytes( -3505 '<?xml version="1.0"?>\n' -3506 '<root>' + '\n' * 65536 + -3507 '<p>' + '\n' * 65536 + '</p>\n' + -3508 '<br/>\n' -3509 '</root>')) -3510 -3511 if self.XML(_bytes( +3518 '<?xml version="1.0"?>\n' +3519 '<root>' + '\n' * 65536 + +3520 '<p>' + '\n' * 65536 + '</p>\n' + +3521 '<br/>\n' +3522 '</root>')) +3523 +3524 if self.etree.LIBXML_VERSION >= (2, 9): -3512 expected = [2, 131074, 131076] -3513 else: -3514 expected = [2, 65535, 65535] -3515 -3516 self.assertEqual(expected, [el.sourceline for el in root.iter()]) -
3517 -
3518 - def test_sourceline_parse(self): -
3519 etree.LIBXML_VERSION >= (2, 9): +3525 expected = [2, 131074, 131076] +3526 else: +3527 expected = [2, 65535, 65535] +3528 +3529 self.assertEqual(expected, [el.sourceline for el in root.iter()]) +
3530 +
3531 - def test_sourceline_parse(self): +
3532 parse = self.parse = self.etree.etree.parse -3520 tree = parse +3533 tree = parse(fileInTestDir('include/test_xinclude.xml')) -3521 -3522 self.assertEqual( -3523 [1, 2, 3], -3524 [ el.sourceline for el in tree.getiterator() ]) -
3525 -
3527 iterparse = self.parse(fileInTestDir('include/test_xinclude.xml')) +3534 +3535 self.assertEqual( +3536 [1, 2, 3], +3537 [ el.sourceline for el in tree.getiterator() ]) +
3538 +
3540 iterparse = self.etree.iterparse -3528 lines = [ el.sourceline for (event, el) in -3529 iterparse(fileInTestDir('include/test_xinclude.xml')) ] -3530 -3531 self.assertEqual( -3532 [2, 3, 1], -3533 lines) -
3534 -
3536 iterparse = self.etree.iterparse +3541 lines = [ el.sourceline for (event, el) in +3542 iterparse(fileInTestDir('include/test_xinclude.xml')) ] +3543 +3544 self.assertEqual( +3545 [2, 3, 1], +3546 lines) +
3547 +
3549 iterparse = self.etree.iterparse -3537 lines = [ el.sourceline for (event, el) in -3538 iterparse(fileInTestDir('include/test_xinclude.xml'), -3539 events=("start",)) ] -3540 -3541 self.assertEqual( -3542 [1, 2, 3], -3543 lines) -
3544 -
3545 - def test_sourceline_element(self): -
3546 etree.iterparse +3550 lines = [ el.sourceline for (event, el) in +3551 iterparse(fileInTestDir('include/test_xinclude.xml'), +3552 events=("start",)) ] +3553 +3554 self.assertEqual( +3555 [1, 2, 3], +3556 lines) +
3557 +
3558 - def test_sourceline_element(self): +
3559 Element = self.Element = self.etree.etree.Element -3547 SubElement = self.Element +3560 SubElement = self.etree.SubElement -3548 el = etree.SubElement +3561 el = Element("test") -3549 self.assertEqual(None, el.sourceline) -3550 -3551 child = SubElement(el, "test") -3552 self.assertEqual(None, el.sourceline) -3553 self.assertEqual(None, child.sourceline) -
3554 -
3555 - def test_XML_base_url_docinfo(self): -
3556 Element("test") +3562 self.assertEqual(None, el.sourceline) +3563 +3564 child = SubElement(el, "test") +3565 self.assertEqual(None, el.sourceline) +3566 self.assertEqual(None, child.sourceline) +
3567 +
3568 - def test_XML_base_url_docinfo(self): +
3569 etree = self.etree = self.etree -3557 root = etree +3570 root = etree.etree.XML(_bytes("<root/>"), base_url="http://no/such/url") -3558 docinfo = root.getroottree().docinfo -3559 self.assertEqual(docinfo.URL, "http://no/such/url") -
3560 -
3562 XML(_bytes("<root/>"), base_url="http://no/such/url") +3571 docinfo = root.getroottree().docinfo +3572 self.assertEqual(docinfo.URL, "http://no/such/url") +
3573 +
3575 etree = self.etree = self.etree -3563 root = etree +3576 root = etree.etree.XML(_bytes("<root/>"), base_url="http://no/such/url") -3564 docinfo = root.getroottree().docinfo -3565 self.assertEqual(docinfo.URL, "http://no/such/url") -3566 docinfo.URL = "https://secret/url" -3567 self.assertEqual(docinfo.URL, "https://secret/url") -
3568 -
3570 XML(_bytes("<root/>"), base_url="http://no/such/url") +3577 docinfo = root.getroottree().docinfo +3578 self.assertEqual(docinfo.URL, "http://no/such/url") +3579 docinfo.URL = "https://secret/url" +3580 self.assertEqual(docinfo.URL, "https://secret/url") +
3581 +
3583 etree = self.etree = self.etree -3571 tree = etree +3584 tree = etree.etree.parse(BytesIO("<root/>"), base_url="http://no/such/url") -3572 docinfo = tree.docinfo -3573 self.assertEqual(docinfo.URL, "http://no/such/url") -
3574 -
3575 - def test_parse_base_url_docinfo(self): -
3576 parse(BytesIO("<root/>"), base_url="http://no/such/url") +3585 docinfo = tree.docinfo +3586 self.assertEqual(docinfo.URL, "http://no/such/url") +
3587 +
3588 - def test_parse_base_url_docinfo(self): +
3589 etree = self.etree = self.etree -3577 tree = etree +3590 tree = etree.etree.parse(fileInTestDir('include/test_xinclude.xml'), -3578 base_url="http://no/such/url") -3579 docinfo = tree.docinfo -3580 self.assertEqual(docinfo.URL, "http://no/such/url") -
3581 -
3582 - def test_HTML_base_url_docinfo(self): -
3583 parse(fileInTestDir('include/test_xinclude.xml'), +3591 base_url="http://no/such/url") +3592 docinfo = tree.docinfo +3593 self.assertEqual(docinfo.URL, "http://no/such/url") +
3594 +
3595 - def test_HTML_base_url_docinfo(self): +
3596 etree = self.etree = self.etree -3584 root = etree +3597 root = etree.etree.HTML(_bytes("<html/>"), base_url="http://no/such/url") -3585 docinfo = root.getroottree().docinfo -3586 self.assertEqual(docinfo.URL, "http://no/such/url") -
3587 -
3588 - def test_docinfo_public(self): -
3589 HTML(_bytes("<html/>"), base_url="http://no/such/url") +3598 docinfo = root.getroottree().docinfo +3599 self.assertEqual(docinfo.URL, "http://no/such/url") +
3600 +
3601 - def test_docinfo_public(self): +
3602 etree = self.etree = self.etree -3590 xml_header = '<?xml version="1.0" encoding="ascii"?>' -3591 pub_id = "-//W3C//DTD XHTML 1.0 Transitional//EN" -3592 sys_id = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" -3593 doctype_string = '<!DOCTYPE html PUBLIC "%s" "%s">' % (pub_id, sys_id) -3594 -3595 xml = _bytes(xml_header + doctype_string + '<html><body></body></html>') -3596 -3597 tree = etree +3603 xml_header = '<?xml version="1.0" encoding="ascii"?>' +3604 pub_id = "-//W3C//DTD XHTML 1.0 Transitional//EN" +3605 sys_id = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" +3606 doctype_string = '<!DOCTYPE html PUBLIC "%s" "%s">' % (pub_id, sys_id) +3607 +3608 xml = _bytes(xml_header + doctype_string + '<html><body></body></html>') +3609 +3610 tree = etree.etree.parse(BytesIO(xml)) -3598 docinfo = tree.docinfo -3599 self.assertEqual(docinfo.parse(BytesIO(xml)) +3611 docinfo = tree.docinfo +3612 self.assertEqual(docinfo.encoding, "ascii") -3600 self.assertEqual(docinfo.xml_version, "1.0") -3601 self.assertEqual(docinfo.public_id, pub_id) -3602 self.assertEqual(docinfo.system_url, sys_id) -3603 self.assertEqual(docinfo.root_name, 'html') -3604 self.assertEqual(docinfo.doctype, doctype_string) -
3605 -
3606 - def test_docinfo_system(self): -
3607 encoding, "ascii") +3613 self.assertEqual(docinfo.xml_version, "1.0") +3614 self.assertEqual(docinfo.public_id, pub_id) +3615 self.assertEqual(docinfo.system_url, sys_id) +3616 self.assertEqual(docinfo.root_name, 'html') +3617 self.assertEqual(docinfo.doctype, doctype_string) +
3618 +
3619 - def test_docinfo_system(self): +
3620 etree = self.etree = self.etree -3608 xml_header = '<?xml version="1.0" encoding="UTF-8"?>' -3609 sys_id = "some.dtd" -3610 doctype_string = '<!DOCTYPE html SYSTEM "%s">' % sys_id -3611 xml = _bytes(xml_header + doctype_string + '<html><body></body></html>') -3612 -3613 tree = etree +3621 xml_header = '<?xml version="1.0" encoding="UTF-8"?>' +3622 sys_id = "some.dtd" +3623 doctype_string = '<!DOCTYPE html SYSTEM "%s">' % sys_id +3624 xml = _bytes(xml_header + doctype_string + '<html><body></body></html>') +3625 +3626 tree = etree.etree.parse(BytesIO(xml)) -3614 docinfo = tree.docinfo -3615 self.assertEqual(docinfo.parse(BytesIO(xml)) +3627 docinfo = tree.docinfo +3628 self.assertEqual(docinfo.encoding, "UTF-8") -3616 self.assertEqual(docinfo.xml_version, "1.0") -3617 self.assertEqual(docinfo.public_id, None) -3618 self.assertEqual(docinfo.system_url, sys_id) -3619 self.assertEqual(docinfo.root_name, 'html') -3620 self.assertEqual(docinfo.doctype, doctype_string) -
3621 -
3622 - def test_docinfo_empty(self): -
3623 encoding, "UTF-8") +3629 self.assertEqual(docinfo.xml_version, "1.0") +3630 self.assertEqual(docinfo.public_id, None) +3631 self.assertEqual(docinfo.system_url, sys_id) +3632 self.assertEqual(docinfo.root_name, 'html') +3633 self.assertEqual(docinfo.doctype, doctype_string) +
3634 +
3635 - def test_docinfo_empty(self): +
3636 etree = self.etree = self.etree -3624 xml = _bytes('<html><body></body></html>') -3625 tree = etree +3637 xml = _bytes('<html><body></body></html>') +3638 tree = etree.etree.parse(BytesIO(xml)) -3626 docinfo = tree.docinfo -3627 self.assertEqual(docinfo.parse(BytesIO(xml)) +3639 docinfo = tree.docinfo +3640 self.assertEqual(docinfo.encoding, "UTF-8") -3628 self.assertEqual(docinfo.xml_version, "1.0") -3629 self.assertEqual(docinfo.public_id, None) -3630 self.assertEqual(docinfo.system_url, None) -3631 self.assertEqual(docinfo.root_name, 'html') -3632 self.assertEqual(docinfo.doctype, '') -
3633 -
3634 - def test_docinfo_name_only(self): -
3635 encoding, "UTF-8") +3641 self.assertEqual(docinfo.xml_version, "1.0") +3642 self.assertEqual(docinfo.public_id, None) +3643 self.assertEqual(docinfo.system_url, None) +3644 self.assertEqual(docinfo.root_name, 'html') +3645 self.assertEqual(docinfo.doctype, '') +
3646 +
3647 - def test_docinfo_name_only(self): +
3648 etree = self.etree = self.etree -3636 xml = _bytes('<!DOCTYPE root><root></root>') -3637 tree = etree +3649 xml = _bytes('<!DOCTYPE root><root></root>') +3650 tree = etree.etree.parse(BytesIO(xml)) -3638 docinfo = tree.docinfo -3639 self.assertEqual(docinfo.parse(BytesIO(xml)) +3651 docinfo = tree.docinfo +3652 self.assertEqual(docinfo.encoding, "UTF-8") -3640 self.assertEqual(docinfo.xml_version, "1.0") -3641 self.assertEqual(docinfo.public_id, None) -3642 self.assertEqual(docinfo.system_url, None) -3643 self.assertEqual(docinfo.root_name, 'root') -3644 self.assertEqual(docinfo.doctype, '<!DOCTYPE root>') -
3645 -
3647 encoding, "UTF-8") +3653 self.assertEqual(docinfo.xml_version, "1.0") +3654 self.assertEqual(docinfo.public_id, None) +3655 self.assertEqual(docinfo.system_url, None) +3656 self.assertEqual(docinfo.root_name, 'root') +3657 self.assertEqual(docinfo.doctype, '<!DOCTYPE root>') +
3658 +
3660 etree = self.etree = self.etree -3648 xml = _bytes('<!DOCTYPE root>\n<root/>') -3649 tree = etree +3661 xml = _bytes('<!DOCTYPE root>\n<root/>') +3662 tree = etree.etree.parse(BytesIO(xml)) -3650 self.assertEqual(xml, parse(BytesIO(xml)) +3663 self.assertEqual(xml, etree.tostring(tree)) -
3651 -
3653 etree.tostring(tree)) +
3664 +
3666 etree = self.etree = self.etree -3654 pub_id = "-//W3C//DTD XHTML 1.0 Transitional//EN" -3655 sys_id = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" -3656 doctype_string = _bytes('<!DOCTYPE html PUBLIC "%s" "%s">' % (pub_id, sys_id)) -3657 -3658 xml = _bytes('<!DOCTYPE root>\n<root/>') -3659 tree = etree +3667 pub_id = "-//W3C//DTD XHTML 1.0 Transitional//EN" +3668 sys_id = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" +3669 doctype_string = _bytes('<!DOCTYPE html PUBLIC "%s" "%s">' % (pub_id, sys_id)) +3670 +3671 xml = _bytes('<!DOCTYPE root>\n<root/>') +3672 tree = etree.etree.parse(BytesIO(xml)) -3660 self.assertEqual(xml.replace(_bytes('<!DOCTYPE root>'), doctype_string), -3661 parse(BytesIO(xml)) +3673 self.assertEqual(xml.replace(_bytes('<!DOCTYPE root>'), doctype_string), +3674 etree.tostring(tree, doctype=doctype_string)) -
3662 -
3663 - def test_xml_base(self): -
3664 etree.tostring(tree, doctype=doctype_string)) +
3675 +
3676 - def test_xml_base(self): +
3677 etree = self.etree = self.etree -3665 root = etree +3678 root = etree.etree.XML(_bytes("<root/>"), base_url="http://no/such/url") -3666 self.assertEqual(root.base, "http://no/such/url") -3667 self.assertEqual( -3668 root.XML(_bytes("<root/>"), base_url="http://no/such/url") +3679 self.assertEqual(root.base, "http://no/such/url") +3680 self.assertEqual( +3681 root.get('{http://www.w3.org/XML/1998/namespace}base'), None) -3669 root.base = "https://secret/url" -3670 self.assertEqual(root.base, "https://secret/url") -3671 self.assertEqual( -3672 root.get('{http://www.w3.org/XML/1998/namespace}base'), None) +3682 root.base = "https://secret/url" +3683 self.assertEqual(root.base, "https://secret/url") +3684 self.assertEqual( +3685 root.get('{http://www.w3.org/XML/1998/namespace}base'), -3673 "https://secret/url") -
3674 -
3675 - def test_xml_base_attribute(self): -
3676 get('{http://www.w3.org/XML/1998/namespace}base'), +3686 "https://secret/url") +
3687 +
3688 - def test_xml_base_attribute(self): +
3689 etree = self.etree = self.etree -3677 root = etree +3690 root = etree.etree.XML(_bytes("<root/>"), base_url="http://no/such/url") -3678 self.assertEqual(root.base, "http://no/such/url") -3679 self.assertEqual( -3680 root.XML(_bytes("<root/>"), base_url="http://no/such/url") +3691 self.assertEqual(root.base, "http://no/such/url") +3692 self.assertEqual( +3693 root.get('{http://www.w3.org/XML/1998/namespace}base'), None) -3681 root.get('{http://www.w3.org/XML/1998/namespace}base'), None) +3694 root.set('{http://www.w3.org/XML/1998/namespace}base', -3682 "https://secret/url") -3683 self.assertEqual(root.base, "https://secret/url") -3684 self.assertEqual( -3685 root.set('{http://www.w3.org/XML/1998/namespace}base', +3695 "https://secret/url") +3696 self.assertEqual(root.base, "https://secret/url") +3697 self.assertEqual( +3698 root.get('{http://www.w3.org/XML/1998/namespace}base'), -3686 "https://secret/url") -
3687 -
3688 - def test_html_base(self): -
3689 get('{http://www.w3.org/XML/1998/namespace}base'), +3699 "https://secret/url") +
3700 +
3701 - def test_html_base(self): +
3702 etree = self.etree = self.etree -3690 root = etree +3703 root = etree.etree.HTML(_bytes("<html><body></body></html>"), -3691 base_url="http://no/such/url") -3692 self.assertEqual(root.base, "http://no/such/url") -
3693 -
3694 - def test_html_base_tag(self): -
3695 HTML(_bytes("<html><body></body></html>"), +3704 base_url="http://no/such/url") +3705 self.assertEqual(root.base, "http://no/such/url") +
3706 +
3707 - def test_html_base_tag(self): +
3708 etree = self.etree = self.etree -3696 root = etree +3709 root = etree.etree.HTML(_bytes('<html><head><base href="http://no/such/url"></head></html>')) -3697 self.assertEqual(root.base, "http://no/such/url") -
3698 -
3700 # parse from a file object that returns unicode strings -3701 f = LargeFileLikeUnicode() -3702 tree = self.HTML(_bytes('<html><head><base href="http://no/such/url"></head></html>')) +3710 self.assertEqual(root.base, "http://no/such/url") +
3711 +
3713 # parse from a file object that returns unicode strings +3714 f = LargeFileLikeUnicode() +3715 tree = self.etree.etree.parse(f) -3703 root = tree.getroot() -3704 self.assertTrue(root.parse(f) +3716 root = tree.getroot() +3717 self.assertTrue(root.tag.endswith('root')) -
3705 -
3706 - def test_dtd_io(self): -
3707 # check that DTDs that go in also go back out -3708 xml = _bytes('''\ -3709 <!DOCTYPE test SYSTEM "test.dtd" [ -3710 <!ENTITY entity "tasty"> -3711 <!ELEMENT test (a)> -3712 <!ELEMENT a (#PCDATA)> -3713 ]> -3714 <test><a>test-test</a></test>\ -3715 ''') -3716 tree = self.tag.endswith('root')) +
3718 +
3719 - def test_dtd_io(self): +
3720 # check that DTDs that go in also go back out +3721 xml = _bytes('''\ +3722 <!DOCTYPE test SYSTEM "test.dtd" [ +3723 <!ENTITY entity "tasty"> +3724 <!ELEMENT test (a)> +3725 <!ELEMENT a (#PCDATA)> +3726 ]> +3727 <test><a>test-test</a></test>\ +3728 ''') +3729 tree = self.etree.etree.parse(BytesIO(xml)) -3717 self.assertEqual(self.parse(BytesIO(xml)) +3730 self.assertEqual(self.etree.tostring(tree).replace(_bytes(" "), _bytes("")), -3718 xml.replace(_bytes(" "), _bytes(""))) -
3719 -
3720 - def test_byte_zero(self): -
3721 etree.tostring(tree).replace(_bytes(" "), _bytes("")), +3731 xml.replace(_bytes(" "), _bytes(""))) +
3732 +
3733 - def test_byte_zero(self): +
3734 Element = self.Element = self.etree.etree.Element -3722 -3723 a = Element +3735 +3736 a = Element('a') -3724 self.assertRaises(ValueError, setattr, a, "text", 'ha\0ho') -3725 self.assertRaises(ValueError, setattr, a, "tail", 'ha\0ho') -3726 -3727 self.assertRaises(ValueError, Element('a') +3737 self.assertRaises(ValueError, setattr, a, "text", 'ha\0ho') +3738 self.assertRaises(ValueError, setattr, a, "tail", 'ha\0ho') +3739 +3740 self.assertRaises(ValueError, Element, 'ha\0ho') -
3728 -
3729 - def test_unicode_byte_zero(self): -
3730 Element, 'ha\0ho') +
3741 +
3742 - def test_unicode_byte_zero(self): +
3743 Element = self.Element = self.etree.etree.Element -3731 -3732 a = Element +3744 +3745 a = Element('a') -3733 self.assertRaises(ValueError, setattr, a, "text", -3734 _str('ha\0ho')) -3735 self.assertRaises(ValueError, setattr, a, "tail", -3736 _str('ha\0ho')) -3737 -3738 self.assertRaises(ValueError, Element('a') +3746 self.assertRaises(ValueError, setattr, a, "text", +3747 _str('ha\0ho')) +3748 self.assertRaises(ValueError, setattr, a, "tail", +3749 _str('ha\0ho')) +3750 +3751 self.assertRaises(ValueError, Element, -3739 _str('ha\0ho')) -
3740 -
3741 - def test_byte_invalid(self): -
3742 Element, +3752 _str('ha\0ho')) +
3753 +
3754 - def test_byte_invalid(self): +
3755 Element = self.Element = self.etree.etree.Element -3743 -3744 a = Element +3756 +3757 a = Element('a') -3745 self.assertRaises(ValueError, setattr, a, "text", 'ha\x07ho') -3746 self.assertRaises(ValueError, setattr, a, "text", 'ha\x02ho') -3747 -3748 self.assertRaises(ValueError, setattr, a, "tail", 'ha\x07ho') -3749 self.assertRaises(ValueError, setattr, a, "tail", 'ha\x02ho') -3750 -3751 self.assertRaises(ValueError, Element('a') +3758 self.assertRaises(ValueError, setattr, a, "text", 'ha\x07ho') +3759 self.assertRaises(ValueError, setattr, a, "text", 'ha\x02ho') +3760 +3761 self.assertRaises(ValueError, setattr, a, "tail", 'ha\x07ho') +3762 self.assertRaises(ValueError, setattr, a, "tail", 'ha\x02ho') +3763 +3764 self.assertRaises(ValueError, Element, 'ha\x07ho') -3752 self.assertRaises(ValueError, Element, 'ha\x07ho') +3765 self.assertRaises(ValueError, Element, 'ha\x02ho') -
3753 -
3754 - def test_unicode_byte_invalid(self): -
3755 Element, 'ha\x02ho') +
3766 +
3767 - def test_unicode_byte_invalid(self): +
3768 Element = self.Element = self.etree.etree.Element -3756 -3757 a = Element +3769 +3770 a = Element('a') -3758 self.assertRaises(ValueError, setattr, a, "text", -3759 _str('ha\x07ho')) -3760 self.assertRaises(ValueError, setattr, a, "text", -3761 _str('ha\x02ho')) -3762 -3763 self.assertRaises(ValueError, setattr, a, "tail", -3764 _str('ha\x07ho')) -3765 self.assertRaises(ValueError, setattr, a, "tail", -3766 _str('ha\x02ho')) -3767 -3768 self.assertRaises(ValueError, Element('a') +3771 self.assertRaises(ValueError, setattr, a, "text", +3772 _str('ha\x07ho')) +3773 self.assertRaises(ValueError, setattr, a, "text", +3774 _str('ha\x02ho')) +3775 +3776 self.assertRaises(ValueError, setattr, a, "tail", +3777 _str('ha\x07ho')) +3778 self.assertRaises(ValueError, setattr, a, "tail", +3779 _str('ha\x02ho')) +3780 +3781 self.assertRaises(ValueError, Element, -3769 _str('ha\x07ho')) -3770 self.assertRaises(ValueError, Element, +3782 _str('ha\x07ho')) +3783 self.assertRaises(ValueError, Element, -3771 _str('ha\x02ho')) -
3772 -
3774 Element, +3784 _str('ha\x02ho')) +
3785 +
3787 Element = self.Element = self.etree.etree.Element -3775 -3776 a = Element +3788 +3789 a = Element('a') -3777 self.assertRaises(ValueError, setattr, a, "text", -3778 _str('ha\u1234\x07ho')) -3779 self.assertRaises(ValueError, setattr, a, "text", -3780 _str('ha\u1234\x02ho')) -3781 -3782 self.assertRaises(ValueError, setattr, a, "tail", -3783 _str('ha\u1234\x07ho')) -3784 self.assertRaises(ValueError, setattr, a, "tail", -3785 _str('ha\u1234\x02ho')) -3786 -3787 self.assertRaises(ValueError, Element('a') +3790 self.assertRaises(ValueError, setattr, a, "text", +3791 _str('ha\u1234\x07ho')) +3792 self.assertRaises(ValueError, setattr, a, "text", +3793 _str('ha\u1234\x02ho')) +3794 +3795 self.assertRaises(ValueError, setattr, a, "tail", +3796 _str('ha\u1234\x07ho')) +3797 self.assertRaises(ValueError, setattr, a, "tail", +3798 _str('ha\u1234\x02ho')) +3799 +3800 self.assertRaises(ValueError, Element, -3788 _str('ha\u1234\x07ho')) -3789 self.assertRaises(ValueError, Element, +3801 _str('ha\u1234\x07ho')) +3802 self.assertRaises(ValueError, Element, -3790 _str('ha\u1234\x02ho')) -
3791 -
3793 # ElementTree fails to serialize this -3794 tostring = self.Element, +3803 _str('ha\u1234\x02ho')) +
3804 +
3806 # ElementTree fails to serialize this +3807 tostring = self.etree.tostring -3795 etree.tostring +3808 Element = self.Element = self.etree.etree.Element -3796 SubElement = self.Element +3809 SubElement = self.etree.SubElement -3797 -3798 a = etree.SubElement +3810 +3811 a = Element('a') -3799 b = SubElement(a, 'b') -3800 c = SubElement(a, 'c') -3801 -3802 result = tostring(a, Element('a') +3812 b = SubElement(a, 'b') +3813 c = SubElement(a, 'c') +3814 +3815 result = tostring(a, encoding='UTF-16') -3803 self.assertEqual(_bytes('<a><b></b><c></c></a>'), -3804 canonicalize(result)) -
3805 -
3806 - def test_tostring_none(self): -
3807 # ElementTree raises an AssertionError here -3808 tostring = self.encoding='UTF-16') +3816 self.assertEqual(_bytes('<a><b></b><c></c></a>'), +3817 canonicalize(result)) +
3818 +
3819 - def test_tostring_none(self): +
3820 # ElementTree raises an AssertionError here +3821 tostring = self.etree.tostring -3809 self.assertRaises(TypeError, self.etree.tostring +3822 self.assertRaises(TypeError, self.etree.tostring, None) -
3810 -
3811 - def test_tostring_pretty(self): -
3812 tostring = self.etree.tostring, None) +
3823 +
3824 - def test_tostring_pretty(self): +
3825 tostring = self.etree.tostring -3813 etree.tostring +3826 Element = self.Element = self.etree.etree.Element -3814 SubElement = self.Element +3827 SubElement = self.etree.SubElement -3815 -3816 a = etree.SubElement +3828 +3829 a = Element('a') -3817 b = SubElement(a, 'b') -3818 c = SubElement(a, 'c') -3819 -3820 result = tostring(a) -3821 self.assertEqual(result, _bytes("<a><b/><c/></a>")) -3822 -3823 result = tostring(a, pretty_print=False) -3824 self.assertEqual(result, _bytes("<a><b/><c/></a>")) -3825 -3826 result = tostring(a, pretty_print=True) -3827 self.assertEqual(result, _bytes("<a>\n <b/>\n <c/>\n</a>\n")) -
3828 -
3829 - def test_tostring_with_tail(self): -
3830 tostring = self.Element('a') +3830 b = SubElement(a, 'b') +3831 c = SubElement(a, 'c') +3832 +3833 result = tostring(a) +3834 self.assertEqual(result, _bytes("<a><b/><c/></a>")) +3835 +3836 result = tostring(a, pretty_print=False) +3837 self.assertEqual(result, _bytes("<a><b/><c/></a>")) +3838 +3839 result = tostring(a, pretty_print=True) +3840 self.assertEqual(result, _bytes("<a>\n <b/>\n <c/>\n</a>\n")) +
3841 +
3842 - def test_tostring_with_tail(self): +
3843 tostring = self.etree.tostring -3831 etree.tostring +3844 Element = self.Element = self.etree.etree.Element -3832 SubElement = self.Element +3845 SubElement = self.etree.SubElement -3833 -3834 a = etree.SubElement +3846 +3847 a = Element('a') -3835 a.tail = "aTAIL" -3836 b = SubElement(a, 'b') -3837 b.tail = "bTAIL" -3838 c = SubElement(a, 'c') -3839 -3840 result = tostring(a) -3841 self.assertEqual(result, _bytes("<a><b/>bTAIL<c/></a>aTAIL")) -3842 -3843 result = tostring(a, with_tail=False) -3844 self.assertEqual(result, _bytes("<a><b/>bTAIL<c/></a>")) -3845 -3846 result = tostring(a, with_tail=True) -3847 self.assertEqual(result, _bytes("<a><b/>bTAIL<c/></a>aTAIL")) -
3848 -
3850 tostring = self.Element('a') +3848 a.tail = "aTAIL" +3849 b = SubElement(a, 'b') +3850 b.tail = "bTAIL" +3851 c = SubElement(a, 'c') +3852 +3853 result = tostring(a) +3854 self.assertEqual(result, _bytes("<a><b/>bTAIL<c/></a>aTAIL")) +3855 +3856 result = tostring(a, with_tail=False) +3857 self.assertEqual(result, _bytes("<a><b/>bTAIL<c/></a>")) +3858 +3859 result = tostring(a, with_tail=True) +3860 self.assertEqual(result, _bytes("<a><b/>bTAIL<c/></a>aTAIL")) +
3861 +
3863 tostring = self.etree.tostring -3851 etree.tostring +3864 html = self.html = self.etree.etree.fromstring( -3852 '<html><body>' -3853 '<div><p>Some text<i>\r\n</i></p></div>\r\n' -3854 '</body></html>', -3855 parser=self.fromstring( +3865 '<html><body>' +3866 '<div><p>Some text<i>\r\n</i></p></div>\r\n' +3867 '</body></html>', +3868 parser=self.etree.etree.HTMLParser()) -3856 self.assertEqual(HTMLParser()) +3869 self.assertEqual(html.html.tag, 'html') -3857 div = tag, 'html') +3870 div = html.html.find('.//div') -3858 self.assertEqual(div.tail, '\r\n') -3859 result = tostring(div, method='html') -3860 self.assertEqual( -3861 result, -3862 _bytes("<div><p>Some text<i>\r\n</i></p></div>\r\n")) -3863 result = tostring(div, method='html', with_tail=True) -3864 self.assertEqual( -3865 result, -3866 _bytes("<div><p>Some text<i>\r\n</i></p></div>\r\n")) -3867 result = tostring(div, method='html', with_tail=False) -3868 self.assertEqual( -3869 result, -3870 _bytes("<div><p>Some text<i>\r\n</i></p></div>")) -
3871 -
3872 - def test_standalone(self): -
3873 tostring = self.find('.//div') +3871 self.assertEqual(div.tail, '\r\n') +3872 result = tostring(div, method='html') +3873 self.assertEqual( +3874 result, +3875 _bytes("<div><p>Some text<i>\r\n</i></p></div>\r\n")) +3876 result = tostring(div, method='html', with_tail=True) +3877 self.assertEqual( +3878 result, +3879 _bytes("<div><p>Some text<i>\r\n</i></p></div>\r\n")) +3880 result = tostring(div, method='html', with_tail=False) +3881 self.assertEqual( +3882 result, +3883 _bytes("<div><p>Some text<i>\r\n</i></p></div>")) +
3884 +
3885 - def test_standalone(self): +
3886 tostring = self.etree.tostring -3874 etree.tostring +3887 XML = self.XML = self.etree.etree.XML -3875 XML +3888 ElementTree = self.ElementTree = self.etree.etree.ElementTree -3876 ElementTree +3889 Element = self.Element = self.etree.etree.Element -3877 -3878 tree = Element +3890 +3891 tree = Element("root").getroottree() -3879 self.assertEqual(None, tree.docinfo.standalone) -3880 -3881 tree = Element("root").getroottree() +3892 self.assertEqual(None, tree.docinfo.standalone) +3893 +3894 tree = XML(_bytes("<root/>")).getroottree() -3882 self.assertEqual(None, tree.docinfo.standalone) -3883 -3884 tree = XML(_bytes("<root/>")).getroottree() +3895 self.assertEqual(None, tree.docinfo.standalone) +3896 +3897 tree = XML(_bytes( -3885 "<?xml version='1.0' encoding='ASCII' standalone='yes'?>\n<root/>" -3886 )).getroottree() -3887 self.assertEqual(True, tree.docinfo.standalone) -3888 -3889 tree = XML(_bytes( +3898 "<?xml version='1.0' encoding='ASCII' standalone='yes'?>\n<root/>" +3899 )).getroottree() +3900 self.assertEqual(True, tree.docinfo.standalone) +3901 +3902 tree = XML(_bytes( -3890 "<?xml version='1.0' encoding='ASCII' standalone='no'?>\n<root/>" -3891 )).getroottree() -3892 self.assertEqual(False, tree.docinfo.standalone) -
3893 -
3894 - def test_tostring_standalone(self): -
3895 tostring = self.XML(_bytes( +3903 "<?xml version='1.0' encoding='ASCII' standalone='no'?>\n<root/>" +3904 )).getroottree() +3905 self.assertEqual(False, tree.docinfo.standalone) +
3906 +
3907 - def test_tostring_standalone(self): +
3908 tostring = self.etree.tostring -3896 etree.tostring +3909 XML = self.XML = self.etree.etree.XML -3897 XML +3910 ElementTree = self.ElementTree = self.etree.etree.ElementTree -3898 -3899 root = ElementTree +3911 +3912 root = XML(_bytes("<root/>")) -3900 -3901 tree = XML(_bytes("<root/>")) +3913 +3914 tree = ElementTree(root) -3902 self.assertEqual(None, tree.docinfo.standalone) -3903 -3904 result = tostring(root, xml_declaration=True, ElementTree(root) +3915 self.assertEqual(None, tree.docinfo.standalone) +3916 +3917 result = tostring(root, xml_declaration=True, encoding="ASCII") -3905 self.assertEqual(result, _bytes( -3906 "<?xml version='1.0' encoding='ASCII'?>\n<root/>")) -3907 -3908 result = tostring(root, xml_declaration=True, encoding="ASCII") +3918 self.assertEqual(result, _bytes( +3919 "<?xml version='1.0' encoding='ASCII'?>\n<root/>")) +3920 +3921 result = tostring(root, xml_declaration=True, encoding="ASCII", -3909 standalone=True) -3910 self.assertEqual(result, _bytes( -3911 "<?xml version='1.0' encoding='ASCII' standalone='yes'?>\n<root/>")) -3912 -3913 tree = encoding="ASCII", +3922 standalone=True) +3923 self.assertEqual(result, _bytes( +3924 "<?xml version='1.0' encoding='ASCII' standalone='yes'?>\n<root/>")) +3925 +3926 tree = ElementTree(ElementTree(XML(result)) -3914 self.assertEqual(True, tree.docinfo.standalone) -3915 -3916 result = tostring(root, xml_declaration=True, XML(result)) +3927 self.assertEqual(True, tree.docinfo.standalone) +3928 +3929 result = tostring(root, xml_declaration=True, encoding="ASCII", -3917 standalone=False) -3918 self.assertEqual(result, _bytes( -3919 "<?xml version='1.0' encoding='ASCII' standalone='no'?>\n<root/>")) -3920 -3921 tree = encoding="ASCII", +3930 standalone=False) +3931 self.assertEqual(result, _bytes( +3932 "<?xml version='1.0' encoding='ASCII' standalone='no'?>\n<root/>")) +3933 +3934 tree = ElementTree(ElementTree(XML(result)) -3922 self.assertEqual(False, tree.docinfo.standalone) -
3923 -
3925 tostring = self.XML(result)) +3935 self.assertEqual(False, tree.docinfo.standalone) +
3936 +
3938 tostring = self.etree.tostring -3926 etree.tostring +3939 XML = self.XML = self.etree.etree.XML -3927 XML +3940 ElementTree = self.ElementTree = self.etree.etree.ElementTree -3928 -3929 root = ElementTree +3941 +3942 root = XML(_bytes( -3930 "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n<root/>")) -3931 -3932 tree = XML(_bytes( +3943 "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n<root/>")) +3944 +3945 tree = ElementTree(root) -3933 self.assertEqual(True, tree.docinfo.standalone) -3934 -3935 result = tostring(root, xml_declaration=True, ElementTree(root) +3946 self.assertEqual(True, tree.docinfo.standalone) +3947 +3948 result = tostring(root, xml_declaration=True, encoding="ASCII") -3936 self.assertEqual(result, _bytes( -3937 "<?xml version='1.0' encoding='ASCII'?>\n<root/>")) -3938 -3939 result = tostring(root, xml_declaration=True, encoding="ASCII") +3949 self.assertEqual(result, _bytes( +3950 "<?xml version='1.0' encoding='ASCII'?>\n<root/>")) +3951 +3952 result = tostring(root, xml_declaration=True, encoding="ASCII", -3940 standalone=True) -3941 self.assertEqual(result, _bytes( -3942 "<?xml version='1.0' encoding='ASCII' standalone='yes'?>\n<root/>")) -
3943 -
3945 tostring = self.encoding="ASCII", +3953 standalone=True) +3954 self.assertEqual(result, _bytes( +3955 "<?xml version='1.0' encoding='ASCII' standalone='yes'?>\n<root/>")) +
3956 +
3958 tostring = self.etree.tostring -3946 etree.tostring +3959 Element = self.Element = self.etree.etree.Element -3947 SubElement = self.Element +3960 SubElement = self.etree.SubElement -3948 -3949 a = etree.SubElement +3961 +3962 a = Element('a') -3950 a.Element('a') +3963 a.text = "A" -3951 a.tail = "tail" -3952 b = SubElement(a, 'b') -3953 b.text = "A" +3964 a.tail = "tail" +3965 b = SubElement(a, 'b') +3966 b.text = "B" -3954 b.tail = _str("Søk på nettet") -3955 c = SubElement(a, 'c') -3956 c.text = "B" +3967 b.tail = _str("Søk på nettet") +3968 c = SubElement(a, 'c') +3969 c.text = "C" -3957 -3958 result = tostring(a, method="text", text = "C" +3970 +3971 result = tostring(a, method="text", encoding="UTF-16") -3959 -3960 self.assertEqual(_str('ABSøk på nettetCtail').encode("UTF-16"), -3961 result) -
3962 -
3964 tostring = self.encoding="UTF-16") +3972 +3973 self.assertEqual(_str('ABSøk på nettetCtail').encode("UTF-16"), +3974 result) +
3975 +
3977 tostring = self.etree.tostring -3965 etree.tostring +3978 Element = self.Element = self.etree.etree.Element -3966 SubElement = self.Element +3979 SubElement = self.etree.SubElement -3967 -3968 a = etree.SubElement +3980 +3981 a = Element('a') -3969 a.Element('a') +3982 a.text = _str('Søk på nettetA') -3970 a.tail = "tail" -3971 b = SubElement(a, 'b') -3972 b.text = _str('Søk på nettetA') +3983 a.tail = "tail" +3984 b = SubElement(a, 'b') +3985 b.text = "B" -3973 b.tail = _str('Søk på nettetB') -3974 c = SubElement(a, 'c') -3975 c.text = "B" +3986 b.tail = _str('Søk på nettetB') +3987 c = SubElement(a, 'c') +3988 c.text = "C" -3976 -3977 self.assertRaises(UnicodeEncodeError, -3978 tostring, a, method="text") -3979 -3980 self.assertEqual( -3981 _str('Søk på nettetABSøk på nettetBCtail').encode('utf-8'), -3982 tostring(a, text = "C" +3989 +3990 self.assertRaises(UnicodeEncodeError, +3991 tostring, a, method="text") +3992 +3993 self.assertEqual( +3994 _str('Søk på nettetABSøk på nettetBCtail').encode('utf-8'), +3995 tostring(a, encoding="UTF-8", method="text")) -
3983 -
3984 - def test_tounicode(self): -
3985 tounicode = self.encoding="UTF-8", method="text")) +
3996 +
3997 - def test_tounicode(self): +
3998 tounicode = self.etree.tounicode -3986 etree.tounicode +3999 Element = self.Element = self.etree.etree.Element -3987 SubElement = self.Element +4000 SubElement = self.etree.SubElement -3988 -3989 a = etree.SubElement +4001 +4002 a = Element('a') -3990 b = SubElement(a, 'b') -3991 c = SubElement(a, 'c') -3992 -3993 self.assertTrue(isinstance(tounicode(a), _unicode)) -3994 self.assertEqual(_bytes('<a><b></b><c></c></a>'), -3995 canonicalize(tounicode(a))) -
3996 -
3997 - def test_tounicode_element(self): -
3998 tounicode = self.Element('a') +4003 b = SubElement(a, 'b') +4004 c = SubElement(a, 'c') +4005 +4006 self.assertTrue(isinstance(tounicode(a), _unicode)) +4007 self.assertEqual(_bytes('<a><b></b><c></c></a>'), +4008 canonicalize(tounicode(a))) +
4009 +
4010 - def test_tounicode_element(self): +
4011 tounicode = self.etree.tounicode -3999 etree.tounicode +4012 Element = self.Element = self.etree.etree.Element -4000 SubElement = self.Element +4013 SubElement = self.etree.SubElement -4001 -4002 a = etree.SubElement +4014 +4015 a = Element('a') -4003 b = SubElement(a, 'b') -4004 c = SubElement(a, 'c') -4005 d = SubElement(c, 'd') -4006 self.assertTrue(isinstance(tounicode(b), _unicode)) -4007 self.assertTrue(isinstance(tounicode(c), _unicode)) -4008 self.assertEqual(_bytes('<b></b>'), -4009 canonicalize(tounicode(b))) -4010 self.assertEqual(_bytes('<c><d></d></c>'), -4011 canonicalize(tounicode(c))) -
4012 -
4013 - def test_tounicode_none(self): -
4014 tounicode = self.Element('a') +4016 b = SubElement(a, 'b') +4017 c = SubElement(a, 'c') +4018 d = SubElement(c, 'd') +4019 self.assertTrue(isinstance(tounicode(b), _unicode)) +4020 self.assertTrue(isinstance(tounicode(c), _unicode)) +4021 self.assertEqual(_bytes('<b></b>'), +4022 canonicalize(tounicode(b))) +4023 self.assertEqual(_bytes('<c><d></d></c>'), +4024 canonicalize(tounicode(c))) +
4025 +
4026 - def test_tounicode_none(self): +
4027 tounicode = self.etree.tounicode -4015 self.assertRaises(TypeError, self.etree.tounicode +4028 self.assertRaises(TypeError, self.etree.tounicode, None) -
4016 -
4017 - def test_tounicode_element_tail(self): -
4018 tounicode = self.etree.tounicode, None) +
4029 +
4030 - def test_tounicode_element_tail(self): +
4031 tounicode = self.etree.tounicode -4019 etree.tounicode +4032 Element = self.Element = self.etree.etree.Element -4020 SubElement = self.Element +4033 SubElement = self.etree.SubElement -4021 -4022 a = etree.SubElement +4034 +4035 a = Element('a') -4023 b = SubElement(a, 'b') -4024 c = SubElement(a, 'c') -4025 d = SubElement(c, 'd') -4026 b.tail = 'Foo' -4027 -4028 self.assertTrue(isinstance(tounicode(b), _unicode)) -4029 self.assertTrue(tounicode(b) == '<b/>Foo' or -4030 tounicode(b) == '<b />Foo') -
4031 -
4032 - def test_tounicode_pretty(self): -
4033 tounicode = self.Element('a') +4036 b = SubElement(a, 'b') +4037 c = SubElement(a, 'c') +4038 d = SubElement(c, 'd') +4039 b.tail = 'Foo' +4040 +4041 self.assertTrue(isinstance(tounicode(b), _unicode)) +4042 self.assertTrue(tounicode(b) == '<b/>Foo' or +4043 tounicode(b) == '<b />Foo') +
4044 +
4045 - def test_tounicode_pretty(self): +
4046 tounicode = self.etree.tounicode -4034 etree.tounicode +4047 Element = self.Element = self.etree.etree.Element -4035 SubElement = self.Element +4048 SubElement = self.etree.SubElement -4036 -4037 a = etree.SubElement +4049 +4050 a = Element('a') -4038 b = SubElement(a, 'b') -4039 c = SubElement(a, 'c') -4040 -4041 result = tounicode(a) -4042 self.assertEqual(result, "<a><b/><c/></a>") -4043 -4044 result = tounicode(a, pretty_print=False) -4045 self.assertEqual(result, "<a><b/><c/></a>") -4046 -4047 result = tounicode(a, pretty_print=True) -4048 self.assertEqual(result, "<a>\n <b/>\n <c/>\n</a>\n") -
4049 -
4050 - def test_tostring_unicode(self): -
4051 tostring = self.Element('a') +4051 b = SubElement(a, 'b') +4052 c = SubElement(a, 'c') +4053 +4054 result = tounicode(a) +4055 self.assertEqual(result, "<a><b/><c/></a>") +4056 +4057 result = tounicode(a, pretty_print=False) +4058 self.assertEqual(result, "<a><b/><c/></a>") +4059 +4060 result = tounicode(a, pretty_print=True) +4061 self.assertEqual(result, "<a>\n <b/>\n <c/>\n</a>\n") +
4062 +
4063 - def test_tostring_unicode(self): +
4064 tostring = self.etree.tostring -4052 etree.tostring +4065 Element = self.Element = self.etree.etree.Element -4053 SubElement = self.Element +4066 SubElement = self.etree.SubElement -4054 -4055 a = etree.SubElement +4067 +4068 a = Element('a') -4056 b = SubElement(a, 'b') -4057 c = SubElement(a, 'c') -4058 -4059 self.assertTrue(isinstance(tostring(a, Element('a') +4069 b = SubElement(a, 'b') +4070 c = SubElement(a, 'c') +4071 +4072 self.assertTrue(isinstance(tostring(a, encoding=_unicode), _unicode)) -4060 self.assertEqual(_bytes('<a><b></b><c></c></a>'), -4061 canonicalize(tostring(a, encoding=_unicode), _unicode)) +4073 self.assertEqual(_bytes('<a><b></b><c></c></a>'), +4074 canonicalize(tostring(a, encoding=_unicode))) -
4062 -
4064 tostring = self.encoding=_unicode))) +
4075 +
4077 tostring = self.etree.tostring -4065 etree.tostring +4078 Element = self.Element = self.etree.etree.Element -4066 SubElement = self.Element +4079 SubElement = self.etree.SubElement -4067 -4068 a = etree.SubElement +4080 +4081 a = Element('a') -4069 b = SubElement(a, 'b') -4070 c = SubElement(a, 'c') -4071 d = SubElement(c, 'd') -4072 self.assertTrue(isinstance(tostring(b, Element('a') +4082 b = SubElement(a, 'b') +4083 c = SubElement(a, 'c') +4084 d = SubElement(c, 'd') +4085 self.assertTrue(isinstance(tostring(b, encoding=_unicode), _unicode)) -4073 self.assertTrue(isinstance(tostring(c, encoding=_unicode), _unicode)) +4086 self.assertTrue(isinstance(tostring(c, encoding=_unicode), _unicode)) -4074 self.assertEqual(_bytes('<b></b>'), -4075 canonicalize(tostring(b, encoding=_unicode), _unicode)) +4087 self.assertEqual(_bytes('<b></b>'), +4088 canonicalize(tostring(b, encoding=_unicode))) -4076 self.assertEqual(_bytes('<c><d></d></c>'), -4077 canonicalize(tostring(c, encoding=_unicode))) +4089 self.assertEqual(_bytes('<c><d></d></c>'), +4090 canonicalize(tostring(c, encoding=_unicode))) -
4078 -
4079 - def test_tostring_unicode_none(self): -
4080 tostring = self.encoding=_unicode))) +
4091 +
4092 - def test_tostring_unicode_none(self): +
4093 tostring = self.etree.tostring -4081 self.assertRaises(TypeError, self.etree.tostring +4094 self.assertRaises(TypeError, self.etree.tostring, -4082 None, etree.tostring, +4095 None, encoding=_unicode) -
4083 -
4085 tostring = self.encoding=_unicode) +
4096 +
4098 tostring = self.etree.tostring -4086 etree.tostring +4099 Element = self.Element = self.etree.etree.Element -4087 SubElement = self.Element +4100 SubElement = self.etree.SubElement -4088 -4089 a = etree.SubElement +4101 +4102 a = Element('a') -4090 b = SubElement(a, 'b') -4091 c = SubElement(a, 'c') -4092 d = SubElement(c, 'd') -4093 b.tail = 'Foo' -4094 -4095 self.assertTrue(isinstance(tostring(b, Element('a') +4103 b = SubElement(a, 'b') +4104 c = SubElement(a, 'c') +4105 d = SubElement(c, 'd') +4106 b.tail = 'Foo' +4107 +4108 self.assertTrue(isinstance(tostring(b, encoding=_unicode), _unicode)) -4096 self.assertTrue(tostring(b, encoding=_unicode), _unicode)) +4109 self.assertTrue(tostring(b, encoding=_unicode) == '<b/>Foo' or -4097 tostring(b, encoding=_unicode) == '<b/>Foo' or +4110 tostring(b, encoding=_unicode) == '<b />Foo') -
4098 -
4100 tostring = self.encoding=_unicode) == '<b />Foo') +
4111 +
4113 tostring = self.etree.tostring -4101 etree.tostring +4114 Element = self.Element = self.etree.etree.Element -4102 SubElement = self.Element +4115 SubElement = self.etree.SubElement -4103 -4104 a = etree.SubElement +4116 +4117 a = Element('a') -4105 b = SubElement(a, 'b') -4106 c = SubElement(a, 'c') -4107 -4108 result = tostring(a, Element('a') +4118 b = SubElement(a, 'b') +4119 c = SubElement(a, 'c') +4120 +4121 result = tostring(a, encoding=_unicode) -4109 self.assertEqual(result, "<a><b/><c/></a>") -4110 -4111 result = tostring(a, encoding=_unicode) +4122 self.assertEqual(result, "<a><b/><c/></a>") +4123 +4124 result = tostring(a, encoding=_unicode, pretty_print=False) -4112 self.assertEqual(result, "<a><b/><c/></a>") -4113 -4114 result = tostring(a, encoding=_unicode, pretty_print=False) +4125 self.assertEqual(result, "<a><b/><c/></a>") +4126 +4127 result = tostring(a, encoding=_unicode, pretty_print=True) -4115 self.assertEqual(result, "<a>\n <b/>\n <c/>\n</a>\n") -
4116 -
4117 - def test_pypy_proxy_collect(self): -
4118 root = encoding=_unicode, pretty_print=True) +4128 self.assertEqual(result, "<a>\n <b/>\n <c/>\n</a>\n") +
4129 +
4130 - def test_pypy_proxy_collect(self): +
4131 root = etree.etree.Element('parent') -4119 Element('parent') +4132 etree.SubElement(root, 'child') -4120 -4121 self.assertEqual(len(root), 1) -4122 self.assertEqual(root[0].etree.SubElement(root, 'child') +4133 +4134 self.assertEqual(len(root), 1) +4135 self.assertEqual(root[0].tag, 'child') -4123 -4124 # in PyPy, GC used to kill the Python proxy instance without cleanup -4125 gc.collect() -4126 self.assertEqual(len(root), 1) -4127 self.assertEqual(root[0].tag, 'child') +4136 +4137 # in PyPy, GC used to kill the Python proxy instance without cleanup +4138 gc.collect() +4139 self.assertEqual(len(root), 1) +4140 self.assertEqual(root[0].tag, 'child') -
4128 -
4129 - def test_element_refcycle(self): -
4130 class SubEl(etree.ElementBase): -4131 pass -
4132 -4133 el1 = SubEl() -4134 el2 = SubEl() -4135 self.assertEqual('SubEl', el1.tag, 'child') +4141 +
4142 - def test_element_refcycle(self): +
4143 class SubEl(etree.ElementBase): +4144 pass +
4145 +4146 el1 = SubEl() +4147 el2 = SubEl() +4148 self.assertEqual('SubEl', el1.tag) -4136 self.assertEqual('SubEl', el2.tag) +4149 self.assertEqual('SubEl', el2.tag) -4137 el1.other = el2 -4138 el2.other = el1 -4139 -4140 del el1, el2 -4141 gc.collect() -4142 # not really testing anything here, but it shouldn't crash -4143 -
4144 - def test_proxy_collect_siblings(self): -
4145 root = tag) +4150 el1.other = el2 +4151 el2.other = el1 +4152 +4153 del el1, el2 +4154 gc.collect() +
4155 # not really testing anything here, but it shouldn't crash +4156 +
4157 - def test_proxy_collect_siblings(self): +
4158 root = etree.etree.Element('parent') -4146 c1 = Element('parent') +4159 c1 = etree.SubElement(root, 'child1') -4147 c2 = etree.SubElement(root, 'child1') +4160 c2 = etree.SubElement(root, 'child2') -4148 -4149 root.etree.SubElement(root, 'child2') +4161 +4162 root.remove(c1) -4150 root.remove(c1) +4163 root.remove(c2) -4151 c1.addnext(c2) -4152 del c1 -4153 # trigger deallocation attempt of c1 -4154 c2.getprevious() -4155 # make sure it wasn't deallocated -4156 self.assertEqual('child1', c2.getprevious().remove(c2) +4164 c1.addnext(c2) +4165 del c1 +4166 # trigger deallocation attempt of c1 +4167 c2.getprevious() +4168 # make sure it wasn't deallocated +4169 self.assertEqual('child1', c2.getprevious().tag) -
4157 -
4159 root = tag) +
4170 +
4172 root = etree.etree.Element('parent') -4160 c1 = Element('parent') +4173 c1 = etree.SubElement(root, 'child1') -4161 c2 = etree.SubElement(root, 'child1') +4174 c2 = etree.SubElement(root, 'child2') -4162 -4163 root.etree.SubElement(root, 'child2') +4175 +4176 root.remove(c1) -4164 root.remove(c1) +4177 root.remove(c2) -4165 c1.addnext(c2) -4166 c1.tail = 'abc' -4167 c2.tail = 'xyz' -4168 del c1 -4169 # trigger deallocation attempt of c1 -4170 c2.getprevious() -4171 # make sure it wasn't deallocated -4172 self.assertEqual('child1', c2.getprevious().tag) -4173 self.assertEqual('abc', c2.getprevious().tail) -
4174 -4175 # helper methods -4176 -
4177 - def _writeElement(self, element, encoding='us-ascii', compression=0): -
4178 """Write out element for comparison. -4179 """ -4180 remove(c2) +4178 c1.addnext(c2) +4179 c1.tail = 'abc' +4180 c2.tail = 'xyz' +4181 del c1 +4182 # trigger deallocation attempt of c1 +4183 c2.getprevious() +4184 # make sure it wasn't deallocated +4185 self.assertEqual('child1', c2.getprevious().tag) +4186 self.assertEqual('abc', c2.getprevious().tail) +
4187 +4188 # helper methods +4189 +
4190 - def _writeElement(self, element, encoding='us-ascii', compression=0): +
4191 """Write out element for comparison. +4192 """ +4193 ElementTree = self.ElementTree = self.etree.etree.ElementTree -4181 f = BytesIO() -4182 tree = ElementTree +4194 f = BytesIO() +4195 tree = ElementTree(element=element) -4183 tree.write(f, ElementTree(element=element) +4196 tree.write(f, encoding=encoding=encoding, compression=compression) -4184 data = f.getvalue() -4185 if compression: -4186 data = zlib.decompress(data) -4187 return canonicalize(data) -
4188 -4189 -
4190 -class _XIncludeTestCase(HelperTestCase): -
4191 - def test_xinclude_text(self): -
4192 filename = fileInTestDir('test_broken.xml') -4193 root = encoding, compression=compression) +4197 data = f.getvalue() +4198 if compression: +4199 data = zlib.decompress(data) +4200 return canonicalize(data) +
4201 +4202 +
4203 -class _XIncludeTestCase(HelperTestCase): +
4204 - def test_xinclude_text(self): +
4205 filename = fileInTestDir('test_broken.xml') +4206 root = etree.etree.XML(_bytes('''\ -4194 <doc xmlns:xi="http://www.w3.org/2001/XInclude"> -4195 <xi:include href="%s" parse="text"/> -4196 </doc> -4197 ''' % path2url(filename))) -4198 old_text = root.XML(_bytes('''\ +4207 <doc xmlns:xi="http://www.w3.org/2001/XInclude"> +4208 <xi:include href="%s" parse="text"/> +4209 </doc> +4210 ''' % path2url(filename))) +4211 old_text = root.text -4199 content = read_file(filename) -4200 old_tail = root[0].tail -4201 -4202 self.text +4212 content = read_file(filename) +4213 old_tail = root[0].tail +4214 +4215 self.include( include( etree.etree.ElementTree(root) ) -4203 self.assertEqual(old_text + content + old_tail, -4204 root.ElementTree(root) ) +4216 self.assertEqual(old_text + content + old_tail, +4217 root.text) -
4205 -
4206 - def test_xinclude(self): -
4207 tree = text) +
4218 +
4219 - def test_xinclude(self): +
4220 tree = etree.etree.parse(fileInTestDir('include/test_xinclude.xml')) -4208 self.assertNotEqual( -4209 'a', -4210 tree.getroot()[1].parse(fileInTestDir('include/test_xinclude.xml')) +4221 self.assertNotEqual( +4222 'a', +4223 tree.getroot()[1].tag) -4211 # process xincludes -4212 self.tag) +4224 # process xincludes +4225 self.include( tree ) -4213 # check whether we find it replaced with included data -4214 self.assertEqual( -4215 'a', -4216 tree.getroot()[1].include( tree ) +4226 # check whether we find it replaced with included data +4227 self.assertEqual( +4228 'a', +4229 tree.getroot()[1].tag) -
4217 -
4218 - def test_xinclude_resolver(self): -
4219 class res(etree.Resolver): -4220 include_text = read_file(fileInTestDir('test.xml')) -4221 called = {} -4222 def resolve(self, url, id, context): -4223 if url.endswith(".dtd"): -4224 self.called["dtd"] = True -4225 return self.resolve_filename( -4226 fileInTestDir('test.dtd'), context) -4227 elif url.endswith("test_xinclude.xml"): -4228 self.called["input"] = True -4229 return None # delegate to default resolver -4230 else: -4231 self.called["include"] = True -4232 return self.resolve_string(self.include_text, context) -
4233 -4234 res_instance = res() -4235 parser = tag) +4230 +
4231 - def test_xinclude_resolver(self): +
4232 class res(etree.Resolver): +4233 include_text = read_file(fileInTestDir('test.xml')) +4234 called = {} +4235 def resolve(self, url, id, context): +4236 if url.endswith(".dtd"): +4237 self.called["dtd"] = True +4238 return self.resolve_filename( +4239 fileInTestDir('test.dtd'), context) +4240 elif url.endswith("test_xinclude.xml"): +4241 self.called["input"] = True +4242 return None # delegate to default resolver +4243 else: +4244 self.called["include"] = True +4245 return self.resolve_string(self.include_text, context) +
4246 +4247 res_instance = res() +4248 parser = etree.etree.XMLParser(load_dtd = True) -4236 parser.resolvers.XMLParser(load_dtd = True) +4249 parser.resolvers.add(res_instance) -4237 -4238 tree = add(res_instance) +4250 +4251 tree = etree.etree.parse(fileInTestDir('include/test_xinclude.xml'), -4239 parser = parser) -4240 -4241 self.parse(fileInTestDir('include/test_xinclude.xml'), +4252 parser = parser) +4253 +4254 self.include(tree) -4242 -4243 called = list(res_instance.called.include(tree) +4255 +4256 called = list(res_instance.called.items()) -4244 called.sort() -4245 self.assertEqual( -4246 [("dtd", True), ("include", True), ("input", True)], -4247 called) -4248 -
4250 data = textwrap.dedent(''' -4251 <doc xmlns:xi="http://www.w3.org/2001/XInclude"> -4252 <foo/> -4253 <xi:include href="./test.xml" /> -4254 </doc> -4255 ''') -4256 -4257 class Resolver(etree.Resolver): -4258 called = {} -4259 -4260 def resolve(self, url, id, context): -4261 if url.endswith("test_xinclude.xml"): -4262 assert not self.called.items()) +4257 called.sort() +4258 self.assertEqual( +4259 [("dtd", True), ("include", True), ("input", True)], +4260 called) +
4261 +
4263 data = textwrap.dedent(''' +4264 <doc xmlns:xi="http://www.w3.org/2001/XInclude"> +4265 <foo/> +4266 <xi:include href="./test.xml" /> +4267 </doc> +4268 ''') +4269 +4270 class Resolver(etree.Resolver): +4271 called = {} +4272 +4273 def resolve(self, url, id, context): +4274 if url.endswith("test_xinclude.xml"): +4275 assert not self.called.get("input") -4263 self.called["input"] = True -4264 return None # delegate to default resolver -4265 elif url.endswith('/test5.xml'): -4266 assert not self.called.get("input") +4276 self.called["input"] = True +4277 return None # delegate to default resolver +4278 elif url.endswith('/test5.xml'): +4279 assert not self.called.get("DONE") -4267 self.called["DONE"] = True -4268 return self.resolve_string('<DONE/>', context) -4269 else: -4270 _, filename = url.rsplit('/', 1) -4271 assert not self.called.get("DONE") +4280 self.called["DONE"] = True +4281 return self.resolve_string('<DONE/>', context) +4282 else: +4283 _, filename = url.rsplit('/', 1) +4284 assert not self.called.get(filename) -4272 self.called[filename] = True -4273 next_data = data.replace( -4274 'test.xml', 'test%d.xml' % len(self.called)) -4275 return self.resolve_string(next_data, context) -
4276 -4277 res_instance = Resolver() -4278 parser = get(filename) +4285 self.called[filename] = True +4286 next_data = data.replace( +4287 'test.xml', 'test%d.xml' % len(self.called)) +4288 return self.resolve_string(next_data, context) +4289 +4290 res_instance = Resolver() +4291 parser = etree.etree.XMLParser(load_dtd=True) -4279 parser.resolvers.XMLParser(load_dtd=True) +4292 parser.resolvers.add(res_instance) -4280 -4281 tree = add(res_instance) +4293 +4294 tree = etree.etree.parse(fileInTestDir('include/test_xinclude.xml'), -4282 parser=parser) -4283 -4284 self.parse(fileInTestDir('include/test_xinclude.xml'), +4295 parser=parser) +4296 +4297 self.include(tree) -4285 -4286 called = list(res_instance.called.items()) -4287 called.sort() -4288 self.assertEqual( -4289 [("DONE", True), ("input", True), ("test.xml", True), -4290 ("test2.xml", True), ("test3.xml", True), ("test4.xml", True)], -4291 called) -4292 -4293 -
4294 -class ETreeXIncludeTestCase(_XIncludeTestCase): -
4295 - def include(self, tree): -
4296 tree.xinclude() -
4297 +lxml.tests.test_etree.ElementIncludeTestCase.include" class="py-name" href="#" onclick="return doclink('link-4464', 'include', 'link-4409');">include
(tree)
4298 -
4299 -class ElementIncludeTestCase(_XIncludeTestCase): -
4300 from lxml import ElementInclude -4301 -
4302 - def include(self, tree, loader=None, max_depth=None): -
4303 self.ElementInclude.4299 called = list(res_instance.called.items()) +4300 called.sort() +4301 self.assertEqual( +4302 [("DONE", True), ("input", True), ("test.xml", True), +4303 ("test2.xml", True), ("test3.xml", True), ("test4.xml", True)], +4304 called) +
4305 +4306 +
4307 -class ETreeXIncludeTestCase(_XIncludeTestCase): +
4308 - def include(self, tree): +
4309 tree.xinclude() +
4310 +4311 +
4312 -class ElementIncludeTestCase(_XIncludeTestCase): +
4313 from lxml import ElementInclude +4314 +
4315 - def include(self, tree, loader=None, max_depth=None): +
4316 self.ElementInclude.include(tree.getroot(), loader=loader, max_depth=max_depth) -
4304 -4305 include(tree.getroot(), loader=loader, max_depth=max_depth) +
4317 +4318 XINCLUDE = {} -4306 -4307 XINCLUDE = {} +4319 +4320 XINCLUDE["Recursive1.xml"] = """\ -4308 <?xml version='1.0'?> -4309 <document xmlns:xi="http://www.w3.org/2001/XInclude"> -4310 <p>The following is the source code of Recursive2.xml:</p> -4311 <xi:include href="Recursive2.xml"/> -4312 </document> -4313 """ -4314 -4315 XINCLUDE["Recursive1.xml"] = """\ +4321 <?xml version='1.0'?> +4322 <document xmlns:xi="http://www.w3.org/2001/XInclude"> +4323 <p>The following is the source code of Recursive2.xml:</p> +4324 <xi:include href="Recursive2.xml"/> +4325 </document> +4326 """ +4327 +4328 XINCLUDE["Recursive2.xml"] = """\ -4316 <?xml version='1.0'?> -4317 <document xmlns:xi="http://www.w3.org/2001/XInclude"> -4318 <p>The following is the source code of Recursive3.xml:</p> -4319 <xi:include href="Recursive3.xml"/> -4320 </document> -4321 """ -4322 -4323 XINCLUDE["Recursive2.xml"] = """\ +4329 <?xml version='1.0'?> +4330 <document xmlns:xi="http://www.w3.org/2001/XInclude"> +4331 <p>The following is the source code of Recursive3.xml:</p> +4332 <xi:include href="Recursive3.xml"/> +4333 </document> +4334 """ +4335 +4336 XINCLUDE["Recursive3.xml"] = """\ -4324 <?xml version='1.0'?> -4325 <document xmlns:xi="http://www.w3.org/2001/XInclude"> -4326 <p>The following is the source code of Recursive1.xml:</p> -4327 <xi:include href="Recursive1.xml"/> -4328 </document> -4329 """ -4330 -
4331 - def xinclude_loader(self, href, parse="xml", encoding=None): -
4332 try: -4333 data = textwrap.dedent(self.XINCLUDE["Recursive3.xml"] = """\ +4337 <?xml version='1.0'?> +4338 <document xmlns:xi="http://www.w3.org/2001/XInclude"> +4339 <p>The following is the source code of Recursive1.xml:</p> +4340 <xi:include href="Recursive1.xml"/> +4341 </document> +4342 """ +4343 +
4344 - def xinclude_loader(self, href, parse="xml", encoding=None): +
4345 try: +4346 data = textwrap.dedent(self.XINCLUDE[href]) -4334 except KeyError: -4335 raise OSError("resource not found") -4336 if XINCLUDE[href]) +4347 except KeyError: +4348 raise OSError("resource not found") +4349 if parse == "xml": -4337 data = parse == "xml": +4350 data = etree.etree.fromstring(data) -4338 return data -
4339 -
4340 - def test_xinclude_failures(self): -
4341 # Test infinitely recursive includes. -4342 document = self.xinclude_loader("Recursive1.xml").getroottree() -4343 with self.assertRaises(self.ElementInclude.FatalIncludeError) as cm: -4344 self.include(document, self.xinclude_loader) -4345 self.assertEqual(str(cm.exception), -4346 "recursive include of 'Recursive2.xml' detected") -4347 -4348 # Test 'max_depth' limitation. -4349 document = self.xinclude_loader("Recursive1.xml").getroottree() -4350 with self.assertRaises(self.ElementInclude.FatalIncludeError) as cm: -4351 self.fromstring(data) +4351 return data +
4352 +
4353 - def test_xinclude_failures(self): +
4354 # Test infinitely recursive includes. +4355 document = self.xinclude_loader("Recursive1.xml").getroottree() +4356 with self.assertRaises(self.ElementInclude.FatalIncludeError) as cm: +4357 self.include(document, self.xinclude_loader, max_depth=None) -4352 self.assertEqual(str(cm.exception), -4353 "recursive include of 'Recursive2.xml' detected") -4354 -4355 document = self.xinclude_loader("Recursive1.xml").getroottree() -4356 with self.assertRaises(self.ElementInclude.LimitedRecursiveIncludeError) as cm: -4357 self.include(document, self.xinclude_loader, max_depth=0) -4358 self.assertEqual(str(cm.exception), -4359 "maximum xinclude depth reached when including file Recursive2.xml") +lxml.tests.test_etree.ElementIncludeTestCase.include" class="py-name" href="#" onclick="return doclink('link-4488', 'include', 'link-4409');">include(document, self.xinclude_loader) +4358 self.assertEqual(str(cm.exception), +4359 "recursive include of 'Recursive2.xml' detected") 4360 -4361 document = self.xinclude_loader("Recursive1.xml").getroottree() -4362 with self.assertRaises(self.ElementInclude.LimitedRecursiveIncludeError) as cm: -4363 self.4361 # Test 'max_depth' limitation. +4362 document = self.xinclude_loader("Recursive1.xml").getroottree() +4363 with self.assertRaises(self.ElementInclude.FatalIncludeError) as cm: +4364 self.include(document, self.xinclude_loader, max_depth=1) -4364 self.assertEqual(str(cm.exception), -4365 "maximum xinclude depth reached when including file Recursive3.xml") -4366 -4367 document = self.xinclude_loader("Recursive1.xml").getroottree() -4368 with self.assertRaises(self.ElementInclude.LimitedRecursiveIncludeError) as cm: -4369 self.include(document, self.xinclude_loader, max_depth=None) +4365 self.assertEqual(str(cm.exception), +4366 "recursive include of 'Recursive2.xml' detected") +4367 +4368 document = self.xinclude_loader("Recursive1.xml").getroottree() +4369 with self.assertRaises(self.ElementInclude.LimitedRecursiveIncludeError) as cm: +4370 self.include(document, self.xinclude_loader, max_depth=2) -4370 self.assertEqual(str(cm.exception), -4371 "maximum xinclude depth reached when including file Recursive1.xml") -4372 -4373 document = self.xinclude_loader("Recursive1.xml").getroottree() -4374 with self.assertRaises(self.ElementInclude.FatalIncludeError) as cm: -4375 self.include(document, self.xinclude_loader, max_depth=0) +4371 self.assertEqual(str(cm.exception), +4372 "maximum xinclude depth reached when including file Recursive2.xml") +4373 +4374 document = self.xinclude_loader("Recursive1.xml").getroottree() +4375 with self.assertRaises(self.ElementInclude.LimitedRecursiveIncludeError) as cm: +4376 self.include(document, self.xinclude_loader, max_depth=3) -4376 self.assertEqual(str(cm.exception), -4377 "recursive include of 'Recursive2.xml' detected") -
4378 +lxml.tests.test_etree.ElementIncludeTestCase.include" class="py-name" href="#" onclick="return doclink('link-4509', 'include', 'link-4409');">include(document, self.xinclude_loader, max_depth=1) +4377 self.assertEqual(str(cm.exception), +4378 "maximum xinclude depth reached when including file Recursive3.xml") 4379 -
4380 -class ETreeC14NTestCase(HelperTestCase): -
4381 - def test_c14n(self): -
4382 tree = self.parse(_bytes('<a><b/></a>')) -4383 f = BytesIO() -4384 tree.write_c14n(f) -4385 s = f.getvalue() -4386 self.assertEqual(_bytes('<a><b></b></a>'), -4387 s) -
4388 -
4389 - def test_c14n_gzip(self): -
4390 tree = self.4380 document = self.xinclude_loader("Recursive1.xml").getroottree() +4381 with self.assertRaises(self.ElementInclude.LimitedRecursiveIncludeError) as cm: +4382 self.include(document, self.xinclude_loader, max_depth=2) +4383 self.assertEqual(str(cm.exception), +4384 "maximum xinclude depth reached when including file Recursive1.xml") +4385 +4386 document = self.xinclude_loader("Recursive1.xml").getroottree() +4387 with self.assertRaises(self.ElementInclude.FatalIncludeError) as cm: +4388 self.include(document, self.xinclude_loader, max_depth=3) +4389 self.assertEqual(str(cm.exception), +4390 "recursive include of 'Recursive2.xml' detected") +
4391 +4392 +
4393 -class ETreeC14NTestCase(HelperTestCase): +
4394 - def test_c14n(self): +
4395 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4391 f = BytesIO() -4392 tree.write_c14n(f, compression=9) -4393 with gzip.GzipFile(fileobj=BytesIO(f.getvalue())) as gzfile: -4394 s = gzfile.read() -4395 self.assertEqual(_bytes('<a>'+'<b></b>'*200+'</a>'), -4396 s) -
4397 -
4398 - def test_c14n_file(self): -
4399 tree = self.parse(_bytes('<a><b/></a>')) +4396 f = BytesIO() +4397 tree.write_c14n(f) +4398 s = f.getvalue() +4399 self.assertEqual(_bytes('<a><b></b></a>'), +4400 s) +
4401 +
4402 - def test_c14n_gzip(self): +
4403 tree = self.parse(_bytes('<a><b/></a>')) -4400 with tmpfile() as filename: -4401 tree.write_c14n(filename) -4402 data = read_file(filename, 'rb') -4403 self.assertEqual(_bytes('<a><b></b></a>'), -4404 data) -
4405 -
4406 - def test_c14n_file_gzip(self): -
4407 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4404 f = BytesIO() +4405 tree.write_c14n(f, compression=9) +4406 with gzip.GzipFile(fileobj=BytesIO(f.getvalue())) as gzfile: +4407 s = gzfile.read() +4408 self.assertEqual(_bytes('<a>'+'<b></b>'*200+'</a>'), +4409 s) +
4410 +
4411 - def test_c14n_file(self): +
4412 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4408 with tmpfile() as filename: -4409 tree.write_c14n(filename, compression=9) -4410 with gzip.open(filename, 'rb') as f: -4411 data = f.read() -4412 self.assertEqual(_bytes('<a>'+'<b></b>'*200+'</a>'), -4413 data) -
4414 -
4415 - def test_c14n2_file_gzip(self): -
4416 tree = self.parse(_bytes('<a><b/></a>')) +4413 with tmpfile() as filename: +4414 tree.write_c14n(filename) +4415 data = read_file(filename, 'rb') +4416 self.assertEqual(_bytes('<a><b></b></a>'), +4417 data) +
4418 +
4419 - def test_c14n_file_gzip(self): +
4420 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4417 with tmpfile() as filename: -4418 tree.write(filename, method='c14n2', compression=9) -4419 with gzip.open(filename, 'rb') as f: -4420 data = f.read() -4421 self.assertEqual(_bytes('<a>'+'<b></b>'*200+'</a>'), -4422 data) -
4423 -
4424 - def test_c14n2_with_text(self): -
4425 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4421 with tmpfile() as filename: +4422 tree.write_c14n(filename, compression=9) +4423 with gzip.open(filename, 'rb') as f: +4424 data = f.read() +4425 self.assertEqual(_bytes('<a>'+'<b></b>'*200+'</a>'), +4426 data) +
4427 +
4428 - def test_c14n2_file_gzip(self): +
4429 tree = self.parse( -4426 b'<?xml version="1.0"?> <a> abc \n <b> btext </b> btail <c/> ctail </a> ') -4427 f = BytesIO() -4428 tree.write(f, method='c14n2') -4429 s = f.getvalue() -4430 self.assertEqual(b'<a> abc \n <b> btext </b> btail <c></c> ctail </a>', -4431 s) -4432 -4433 f = BytesIO() -4434 tree.write(f, method='c14n2', strip_text=True) -4435 s = f.getvalue() -4436 self.assertEqual(b'<a>abc<b>btext</b>btail<c></c>ctail</a>', -4437 s) -
4438 -
4439 - def test_c14n_with_comments(self): -
4440 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4430 with tmpfile() as filename: +4431 tree.write(filename, method='c14n2', compression=9) +4432 with gzip.open(filename, 'rb') as f: +4433 data = f.read() +4434 self.assertEqual(_bytes('<a>'+'<b></b>'*200+'</a>'), +4435 data) +
4436 +
4437 - def test_c14n2_with_text(self): +
4438 tree = self.parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) -4441 f = BytesIO() -4442 tree.write_c14n(f) -4443 s = f.getvalue() -4444 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), -4445 s) +lxml.tests.common_imports.HelperTestCase.parse" class="py-name" href="#" onclick="return doclink('link-4569', 'parse', 'link-867');">parse( +4439 b'<?xml version="1.0"?> <a> abc \n <b> btext </b> btail <c/> ctail </a> ') +4440 f = BytesIO() +4441 tree.write(f, method='c14n2') +4442 s = f.getvalue() +4443 self.assertEqual(b'<a> abc \n <b> btext </b> btail <c></c> ctail </a>', +4444 s) +4445 4446 f = BytesIO() -4447 tree.write_c14n(f, with_comments=True) +4447 tree.write(f, method='c14n2', strip_text=True) 4448 s = f.getvalue() -4449 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), -4450 s) -4451 f = BytesIO() -4452 tree.write_c14n(f, with_comments=False) -4453 s = f.getvalue() -4454 self.assertEqual(_bytes('<a><b></b></a>'), -4455 s) -
4456 -
4457 - def test_c14n2_with_comments(self): -
4458 tree = self.4449 self.assertEqual(b'<a>abc<b>btext</b>btail<c></c>ctail</a>', +4450 s) +
4451 +
4452 - def test_c14n_with_comments(self): +
4453 tree = self.parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) +lxml.tests.common_imports.HelperTestCase.parse" class="py-name" href="#" onclick="return doclink('link-4574', 'parse', 'link-867');">parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) +4454 f = BytesIO() +4455 tree.write_c14n(f) +4456 s = f.getvalue() +4457 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4458 s) 4459 f = BytesIO() -4460 tree.write(f, method='c14n2') +4460 tree.write_c14n(f, with_comments=True) 4461 s = f.getvalue() -4462 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4462 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), 4463 s) 4464 f = BytesIO() -4465 tree.write(f, method='c14n2', with_comments=True) +4465 tree.write_c14n(f, with_comments=False) 4466 s = f.getvalue() -4467 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4467 self.assertEqual(_bytes('<a><b></b></a>'), 4468 s) -4469 f = BytesIO() -4470 tree.write(f, method='c14n2', with_comments=False) -4471 s = f.getvalue() -4472 self.assertEqual(_bytes('<a><b></b></a>'), -4473 s) -
4474 -
4476 tree = self.4469 +
4470 - def test_c14n2_with_comments(self): +
4471 tree = self.parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) -4477 s = parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) +4472 f = BytesIO() +4473 tree.write(f, method='c14n2') +4474 s = f.getvalue() +4475 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4476 s) +4477 f = BytesIO() +4478 tree.write(f, method='c14n2', with_comments=True) +4479 s = f.getvalue() +4480 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4481 s) +4482 f = BytesIO() +4483 tree.write(f, method='c14n2', with_comments=False) +4484 s = f.getvalue() +4485 self.assertEqual(_bytes('<a><b></b></a>'), +4486 s) +
4487 +
4489 tree = self.parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) +4490 s = etree.tostring(tree, method='c14n') -4478 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), -4479 s) -4480 s = etree.tostring(tree, method='c14n') +4491 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4492 s) +4493 s = etree.tostring(tree, method='c14n', with_comments=True) -4481 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), -4482 s) -4483 s = etree.tostring(tree, method='c14n', with_comments=True) +4494 self.assertEqual(_bytes('<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->'), +4495 s) +4496 s = etree.tostring(tree, method='c14n', with_comments=False) -4484 self.assertEqual(_bytes('<a><b></b></a>'), -4485 s) -
4486 -
4488 tree = self.etree.tostring(tree, method='c14n', with_comments=False) +4497 self.assertEqual(_bytes('<a><b></b></a>'), +4498 s) +
4499 +
4501 tree = self.parse(b'<!--hi--><a><!--ho--><b/></a><!--hu-->') -4489 s = parse(b'<!--hi--><a><!--ho--><b/></a><!--hu-->') +4502 s = etree.tostring(tree, method='c14n2') -4490 self.assertEqual(b'<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->', -4491 s) -4492 s = etree.tostring(tree, method='c14n2') +4503 self.assertEqual(b'<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->', +4504 s) +4505 s = etree.tostring(tree, method='c14n2', with_comments=True) -4493 self.assertEqual(b'<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->', -4494 s) -4495 s = etree.tostring(tree, method='c14n2', with_comments=True) +4506 self.assertEqual(b'<!--hi-->\n<a><!--ho--><b></b></a>\n<!--hu-->', +4507 s) +4508 s = etree.tostring(tree, method='c14n2', with_comments=False) -4496 self.assertEqual(b'<a><b></b></a>', -4497 s) -
4498 -
4500 tree = self.etree.tostring(tree, method='c14n2', with_comments=False) +4509 self.assertEqual(b'<a><b></b></a>', +4510 s) +
4511 +
4513 tree = self.parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) -4501 s = parse(_bytes('<!--hi--><a><!--ho--><b/></a><!--hu-->')) +4514 s = etree.tostring(tree.getroot(), method='c14n') -4502 self.assertEqual(_bytes('<a><!--ho--><b></b></a>'), -4503 s) -4504 s = etree.tostring(tree.getroot(), method='c14n') +4515 self.assertEqual(_bytes('<a><!--ho--><b></b></a>'), +4516 s) +4517 s = etree.tostring(tree.getroot(), method='c14n', with_comments=True) -4505 self.assertEqual(_bytes('<a><!--ho--><b></b></a>'), -4506 s) -4507 s = etree.tostring(tree.getroot(), method='c14n', with_comments=True) +4518 self.assertEqual(_bytes('<a><!--ho--><b></b></a>'), +4519 s) +4520 s = etree.tostring(tree.getroot(), method='c14n', with_comments=False) -4508 self.assertEqual(_bytes('<a><b></b></a>'), -4509 s) -
4510 -
4511 - def test_c14n_exclusive(self): -
4512 tree = self.etree.tostring(tree.getroot(), method='c14n', with_comments=False) +4521 self.assertEqual(_bytes('<a><b></b></a>'), +4522 s) +
4523 +
4524 - def test_c14n_exclusive(self): +
4525 tree = self.parse(_bytes( -4513 '<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) -4514 f = BytesIO() -4515 tree.write_c14n(f) -4516 s = f.getvalue() -4517 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4518 s) -4519 f = BytesIO() -4520 tree.write_c14n(f, exclusive=False) -4521 s = f.getvalue() -4522 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4523 s) -4524 f = BytesIO() -4525 tree.write_c14n(f, exclusive=True) -4526 s = f.getvalue() -4527 self.assertEqual(_bytes('<a xmlns="http://abc"><z:b xmlns:z="http://cde"></z:b></a>'), -4528 s) -4529 -4530 f = BytesIO() -4531 tree.write_c14n(f, exclusive=True, inclusive_ns_prefixes=['z']) -4532 s = f.getvalue() -4533 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:z="http://cde"><z:b></z:b></a>'), -4534 s) -
4535 -
4537 tree = self.parse(_bytes( +4526 '<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) +4527 f = BytesIO() +4528 tree.write_c14n(f) +4529 s = f.getvalue() +4530 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4531 s) +4532 f = BytesIO() +4533 tree.write_c14n(f, exclusive=False) +4534 s = f.getvalue() +4535 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4536 s) +4537 f = BytesIO() +4538 tree.write_c14n(f, exclusive=True) +4539 s = f.getvalue() +4540 self.assertEqual(_bytes('<a xmlns="http://abc"><z:b xmlns:z="http://cde"></z:b></a>'), +4541 s) +4542 +4543 f = BytesIO() +4544 tree.write_c14n(f, exclusive=True, inclusive_ns_prefixes=['z']) +4545 s = f.getvalue() +4546 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:z="http://cde"><z:b></z:b></a>'), +4547 s) +
4548 +
4550 tree = self.parse(_bytes( -4538 '<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) -4539 s = parse(_bytes( +4551 '<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) +4552 s = etree.tostring(tree, method='c14n') -4540 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4541 s) -4542 s = etree.tostring(tree, method='c14n') +4553 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4554 s) +4555 s = etree.tostring(tree, method='c14n', exclusive=False) -4543 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4544 s) -4545 s = etree.tostring(tree, method='c14n', exclusive=False) +4556 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4557 s) +4558 s = etree.tostring(tree, method='c14n', exclusive=True) -4546 self.assertEqual(_bytes('<a xmlns="http://abc"><z:b xmlns:z="http://cde"></z:b></a>'), -4547 s) -4548 -4549 s = etree.tostring(tree, method='c14n', exclusive=True) +4559 self.assertEqual(_bytes('<a xmlns="http://abc"><z:b xmlns:z="http://cde"></z:b></a>'), +4560 s) +4561 +4562 s = etree.tostring(tree, method='c14n', exclusive=True, inclusive_ns_prefixes=['y']) -4550 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd"><z:b xmlns:z="http://cde"></z:b></a>'), -4551 s) -
4552 -
4554 tree = self.etree.tostring(tree, method='c14n', exclusive=True, inclusive_ns_prefixes=['y']) +4563 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd"><z:b xmlns:z="http://cde"></z:b></a>'), +4564 s) +
4565 +
4567 tree = self.parse(_bytes( -4555 '<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) -4556 s = parse(_bytes( +4568 '<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) +4569 s = etree.tostring(tree.getroot(), method='c14n') -4557 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4558 s) -4559 s = etree.tostring(tree.getroot(), method='c14n') +4570 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4571 s) +4572 s = etree.tostring(tree.getroot(), method='c14n', exclusive=False) -4560 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4561 s) -4562 s = etree.tostring(tree.getroot(), method='c14n', exclusive=False) +4573 self.assertEqual(_bytes('<a xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4574 s) +4575 s = etree.tostring(tree.getroot(), method='c14n', exclusive=True) -4563 self.assertEqual(_bytes('<a xmlns="http://abc"><z:b xmlns:z="http://cde"></z:b></a>'), -4564 s) -4565 -4566 s = etree.tostring(tree.getroot(), method='c14n', exclusive=True) +4576 self.assertEqual(_bytes('<a xmlns="http://abc"><z:b xmlns:z="http://cde"></z:b></a>'), +4577 s) +4578 +4579 s = etree.tostring(tree.getroot()[0], method='c14n', exclusive=False) -4567 self.assertEqual(_bytes('<z:b xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"></z:b>'), -4568 s) -4569 s = etree.tostring(tree.getroot()[0], method='c14n', exclusive=False) +4580 self.assertEqual(_bytes('<z:b xmlns="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"></z:b>'), +4581 s) +4582 s = etree.tostring(tree.getroot()[0], method='c14n', exclusive=True) -4570 self.assertEqual(_bytes('<z:b xmlns:z="http://cde"></z:b>'), -4571 s) -4572 -4573 s = etree.tostring(tree.getroot()[0], method='c14n', exclusive=True) +4583 self.assertEqual(_bytes('<z:b xmlns:z="http://cde"></z:b>'), +4584 s) +4585 +4586 s = etree.tostring(tree.getroot()[0], method='c14n', exclusive=True, inclusive_ns_prefixes=['y']) -4574 self.assertEqual(_bytes('<z:b xmlns:y="http://bcd" xmlns:z="http://cde"></z:b>'), -4575 s) -
4576 -
4578 """ Regression test to fix memory allocation issues (use 3+ inclusive NS spaces)""" -4579 tree = self.etree.tostring(tree.getroot()[0], method='c14n', exclusive=True, inclusive_ns_prefixes=['y']) +4587 self.assertEqual(_bytes('<z:b xmlns:y="http://bcd" xmlns:z="http://cde"></z:b>'), +4588 s) +
4589 +
4591 """ Regression test to fix memory allocation issues (use 3+ inclusive NS spaces)""" +4592 tree = self.parse(_bytes( -4580 '<a xmlns:x="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) -4581 -4582 s = parse(_bytes( +4593 '<a xmlns:x="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b/></a>')) +4594 +4595 s = etree.tostring(tree, method='c14n', exclusive=True, inclusive_ns_prefixes=['x', 'y', 'z']) -4583 self.assertEqual(_bytes('<a xmlns:x="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), -4584 s) -
4585 -4586 -
4587 -class ETreeWriteTestCase(HelperTestCase): -
4588 - def test_write(self): -
4589 tree = self.etree.tostring(tree, method='c14n', exclusive=True, inclusive_ns_prefixes=['x', 'y', 'z']) +4596 self.assertEqual(_bytes('<a xmlns:x="http://abc" xmlns:y="http://bcd" xmlns:z="http://cde"><z:b></z:b></a>'), +4597 s) +
4598 +4599 +
4600 -class ETreeWriteTestCase(HelperTestCase): +
4601 - def test_write(self): +
4602 tree = self.parse(_bytes('<a><b/></a>')) -4590 f = BytesIO() -4591 tree.write(f) -4592 s = f.getvalue() -4593 self.assertEqual(_bytes('<a><b/></a>'), -4594 s) -
4595 -
4596 - def test_write_doctype(self): -
4597 tree = self.parse(_bytes('<a><b/></a>')) +4603 f = BytesIO() +4604 tree.write(f) +4605 s = f.getvalue() +4606 self.assertEqual(_bytes('<a><b/></a>'), +4607 s) +
4608 +
4609 - def test_write_doctype(self): +
4610 tree = self.parse(_bytes('<a><b/></a>')) -4598 f = BytesIO() -4599 tree.write(f, doctype='HUHU') -4600 s = f.getvalue() -4601 self.assertEqual(_bytes('HUHU\n<a><b/></a>'), -4602 s) -
4603 -
4604 - def test_write_gzip(self): -
4605 tree = self.parse(_bytes('<a><b/></a>')) +4611 f = BytesIO() +4612 tree.write(f, doctype='HUHU') +4613 s = f.getvalue() +4614 self.assertEqual(_bytes('HUHU\n<a><b/></a>'), +4615 s) +
4616 +
4617 - def test_write_gzip(self): +
4618 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4606 f = BytesIO() -4607 tree.write(f, compression=9) -4608 with gzip.GzipFile(fileobj=BytesIO(f.getvalue())) as gzfile: -4609 s = gzfile.read() -4610 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4611 s) -
4612 -
4613 - def test_write_gzip_doctype(self): -
4614 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4619 f = BytesIO() +4620 tree.write(f, compression=9) +4621 with gzip.GzipFile(fileobj=BytesIO(f.getvalue())) as gzfile: +4622 s = gzfile.read() +4623 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4624 s) +
4625 +
4626 - def test_write_gzip_doctype(self): +
4627 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4615 f = BytesIO() -4616 tree.write(f, compression=9, doctype='<!DOCTYPE a>') -4617 with gzip.GzipFile(fileobj=BytesIO(f.getvalue())) as gzfile: -4618 s = gzfile.read() -4619 self.assertEqual(_bytes('<!DOCTYPE a>\n<a>'+'<b/>'*200+'</a>'), -4620 s) -
4621 -
4622 - def test_write_gzip_level(self): -
4623 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4628 f = BytesIO() +4629 tree.write(f, compression=9, doctype='<!DOCTYPE a>') +4630 with gzip.GzipFile(fileobj=BytesIO(f.getvalue())) as gzfile: +4631 s = gzfile.read() +4632 self.assertEqual(_bytes('<!DOCTYPE a>\n<a>'+'<b/>'*200+'</a>'), +4633 s) +
4634 +
4635 - def test_write_gzip_level(self): +
4636 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4624 f = BytesIO() -4625 tree.write(f, compression=0) -4626 s0 = f.getvalue() -4627 -4628 f = BytesIO() -4629 tree.write(f) -4630 self.assertEqual(f.getvalue(), s0) -4631 -4632 f = BytesIO() -4633 tree.write(f, compression=1) -4634 s = f.getvalue() -4635 self.assertTrue(len(s) <= len(s0)) -4636 with gzip.GzipFile(fileobj=BytesIO(s)) as gzfile: -4637 s1 = gzfile.read() -4638 -4639 f = BytesIO() -4640 tree.write(f, compression=9) -4641 s = f.getvalue() -4642 self.assertTrue(len(s) <= len(s0)) -4643 with gzip.GzipFile(fileobj=BytesIO(s)) as gzfile: -4644 s9 = gzfile.read() -4645 -4646 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4647 s0) -4648 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4649 s1) -4650 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4651 s9) -
4652 -
4653 - def test_write_file(self): -
4654 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4637 f = BytesIO() +4638 tree.write(f, compression=0) +4639 s0 = f.getvalue() +4640 +4641 f = BytesIO() +4642 tree.write(f) +4643 self.assertEqual(f.getvalue(), s0) +4644 +4645 f = BytesIO() +4646 tree.write(f, compression=1) +4647 s = f.getvalue() +4648 self.assertTrue(len(s) <= len(s0)) +4649 with gzip.GzipFile(fileobj=BytesIO(s)) as gzfile: +4650 s1 = gzfile.read() +4651 +4652 f = BytesIO() +4653 tree.write(f, compression=9) +4654 s = f.getvalue() +4655 self.assertTrue(len(s) <= len(s0)) +4656 with gzip.GzipFile(fileobj=BytesIO(s)) as gzfile: +4657 s9 = gzfile.read() +4658 +4659 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4660 s0) +4661 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4662 s1) +4663 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4664 s9) +
4665 +
4666 - def test_write_file(self): +
4667 tree = self.parse(_bytes('<a><b/></a>')) -4655 with tmpfile() as filename: -4656 tree.write(filename) -4657 data = read_file(filename, 'rb') -4658 self.assertEqual(_bytes('<a><b/></a>'), -4659 data) -
4660 -
4661 - def test_write_file_gzip(self): -
4662 tree = self.parse(_bytes('<a><b/></a>')) +4668 with tmpfile() as filename: +4669 tree.write(filename) +4670 data = read_file(filename, 'rb') +4671 self.assertEqual(_bytes('<a><b/></a>'), +4672 data) +
4673 +
4674 - def test_write_file_gzip(self): +
4675 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4663 with tmpfile() as filename: -4664 tree.write(filename, compression=9) -4665 with gzip.open(filename, 'rb') as f: -4666 data = f.read() -4667 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4668 data) -
4669 -
4670 - def test_write_file_gzip_parse(self): -
4671 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4676 with tmpfile() as filename: +4677 tree.write(filename, compression=9) +4678 with gzip.open(filename, 'rb') as f: +4679 data = f.read() +4680 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4681 data) +
4682 +
4683 - def test_write_file_gzip_parse(self): +
4684 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4672 with tmpfile() as filename: -4673 tree.write(filename, compression=9) -4674 data = parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4685 with tmpfile() as filename: +4686 tree.write(filename, compression=9) +4687 data = etree.tostring(etree.tostring(etree.etree.parse(filename)) -4675 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4676 data) -
4677 -
4679 tree = self.parse(filename)) +4688 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4689 data) +
4690 +
4692 tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>')) -4680 with tmpfile() as filename: -4681 tree.write(filename, compression=9) -4682 with gzip.GzipFile(filename) as f: -4683 data = parse(_bytes('<a>'+'<b/>'*200+'</a>')) +4693 with tmpfile() as filename: +4694 tree.write(filename, compression=9) +4695 with gzip.GzipFile(filename) as f: +4696 data = etree.tostring(etree.tostring(etree.etree.parse(f)) -4684 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), -4685 data) -
4686 -
4687 - def test_write_file_url(self): -
4688 xml = _bytes('<a>'+'<b/>'*200+'</a>') -4689 tree = self.parse(f)) +4697 self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'), +4698 data) +
4699 +
4700 - def test_write_file_url(self): +
4701 xml = _bytes('<a>'+'<b/>'*200+'</a>') +4702 tree = self.parse(xml) -4690 with tmpfile(prefix="p+%20", suffix=".xml") as filename: -4691 url = 'file://' + (filename if sys.platform != 'win32' -4692 else '/' + filename.replace('\\', '/')) -4693 tree.write(url) -4694 data = read_file(filename, 'rb').replace(_bytes('\n'), _bytes('')) -4695 self.assertEqual(data, xml) -
4696 -4697 -
4698 -class ETreeErrorLogTest(HelperTestCase): -
4699 parse(xml) +4703 with tmpfile(prefix="p+%20", suffix=".xml") as filename: +4704 url = 'file://' + (filename if sys.platform != 'win32' +4705 else '/' + filename.replace('\\', '/')) +4706 tree.write(url) +4707 data = read_file(filename, 'rb').replace(_bytes('\n'), _bytes('')) +4708 self.assertEqual(data, xml) +
4709 +4710 +
4711 -class ETreeErrorLogTest(HelperTestCase): +
4712 etree = etree = etree -4700 -
4701 - def test_parse_error_logging(self): -
4702 etree +4713 +
4714 - def test_parse_error_logging(self): +
4715 parse = self.parse = self.etree.etree.parse -4703 f = BytesIO('<a><b></c></b></a>') -4704 self.parse +4716 f = BytesIO('<a><b></c></b></a>') +4717 self.etree.clear_error_log() -4705 try: -4706 etree.clear_error_log() +4718 try: +4719 parse(f) -4707 logs = None -4708 except SyntaxError: -4709 e = sys.exc_info()[1] -4710 logs = e.parse(f) +4720 logs = None +4721 except SyntaxError: +4722 e = sys.exc_info()[1] +4723 logs = e.error_log -4711 f.error_log +4724 f.close() -4712 self.assertTrue([ log for log in logs -4713 if 'mismatch' in log.message ]) -4714 self.assertTrue([ log for log in logs -4715 if 'PARSER' in log.domain_name]) -4716 self.assertTrue([ log for log in logs -4717 if 'ERR_TAG_NAME_MISMATCH' in log.type_name ]) -4718 self.assertTrue([ log for log in logs -4719 if 1 == log.line ]) -4720 self.assertTrue([ log for log in logs -4721 if 15 == log.column ]) -
4722 -
4723 - def _test_python_error_logging(self): -
4724 """This can't really be tested as long as there isn't a way to -4725 reset the logging setup ... -4726 """ -4727 close() +4725 self.assertTrue([ log for log in logs +4726 if 'mismatch' in log.message ]) +4727 self.assertTrue([ log for log in logs +4728 if 'PARSER' in log.domain_name]) +4729 self.assertTrue([ log for log in logs +4730 if 'ERR_TAG_NAME_MISMATCH' in log.type_name ]) +4731 self.assertTrue([ log for log in logs +4732 if 1 == log.line ]) +4733 self.assertTrue([ log for log in logs +4734 if 15 == log.column ]) +
4735 +
4736 - def _test_python_error_logging(self): +
4737 """This can't really be tested as long as there isn't a way to +4738 reset the logging setup ... +4739 """ +4740 parse = self.parse = self.etree.etree.parse -4728 -4729 messages = [] -4730 class Logger(self.etree.PyErrorLog): -4731 def log(self, entry, message, *args): -4732 messages.append(message) -
4733 -4734 self.parse +4741 +4742 messages = [] +4743 class Logger(self.etree.PyErrorLog): +4744 def log(self, entry, message, *args): +4745 messages.append(message) +
4746 +4747 self.etree.use_global_python_log(Logger()) -4735 f = BytesIO('<a><b></c></b></a>') -4736 try: -4737 etree.use_global_python_log(Logger()) +4748 f = BytesIO('<a><b></c></b></a>') +4749 try: +4750 parse(f) -4738 except SyntaxError: -4739 pass -4740 f.parse(f) +4751 except SyntaxError: +4752 pass +4753 f.close() -4741 -4742 self.assertTrue([ message for message in messages -4743 if 'mismatch' in message ]) -4744 self.assertTrue([ message for message in messages -4745 if ':PARSER:' in message]) -4746 self.assertTrue([ message for message in messages -4747 if ':ERR_TAG_NAME_MISMATCH:' in message ]) -4748 self.assertTrue([ message for message in messages -4749 if ':1:15:' in message ]) -4750 -4751 -
4752 -class XMLPullParserTest(unittest.TestCase): -
4753 close() +4754 +4755 self.assertTrue([ message for message in messages +4756 if 'mismatch' in message ]) +4757 self.assertTrue([ message for message in messages +4758 if ':PARSER:' in message]) +4759 self.assertTrue([ message for message in messages +4760 if ':ERR_TAG_NAME_MISMATCH:' in message ]) +4761 self.assertTrue([ message for message in messages +4762 if ':1:15:' in message ]) +
4763 +4764 +
4765 -class XMLPullParserTest(unittest.TestCase): +
4766 etree = etree = etree -4754 -
4755 - def assert_event_tags(self, events, expected): -
4756 self.assertEqual([(action, elem.etree +4767 +
4768 - def assert_event_tags(self, events, expected): +
4769 self.assertEqual([(action, elem.tag) for action, elem in events], -4757 expected) -
4758 -
4760 class Target(object): -4761 def start(self, tag, attrib): -4762 return 'start(%s)' % tag) for action, elem in events], +4770 expected) +
4771 +
4773 class Target(object): +4774 def start(self, tag, attrib): +4775 return 'start(%s)' % tag -
4763 def end(self, tag): -4764 return 'end(%s)' % tag +
4776 def end(self, tag): +4777 return 'end(%s)' % tag -
4765 def close(self): -4766 return 'close()' -4767 -4768 parser = self.tag +4778 def close(self): +4779 return 'close()' +4780 +4781 parser = self.etree.XMLPullParser(target=Target()) -4769 events = parser.read_events() -4770 -4771 parser.feed('<root><element>') -4772 self.assertFalse(list(events)) -4773 self.assertFalse(list(events)) -4774 parser.feed('</element><child>') -4775 self.assertEqual([('end', 'end(element)')], list(events)) -4776 parser.feed('</child>') -4777 self.assertEqual([('end', 'end(child)')], list(events)) -4778 parser.feed('</root>') -4779 self.assertEqual([('end', 'end(root)')], list(events)) -4780 self.assertFalse(list(events)) -4781 self.assertEqual('close()', parser.etree.XMLPullParser(target=Target()) +4782 events = parser.read_events() +4783 +4784 parser.feed('<root><element>') +4785 self.assertFalse(list(events)) +4786 self.assertFalse(list(events)) +4787 parser.feed('</element><child>') +4788 self.assertEqual([('end', 'end(element)')], list(events)) +4789 parser.feed('</child>') +4790 self.assertEqual([('end', 'end(child)')], list(events)) +4791 parser.feed('</root>') +4792 self.assertEqual([('end', 'end(root)')], list(events)) +4793 self.assertFalse(list(events)) +4794 self.assertEqual('close()', parser.close()) -4782 -
4784 class Target(object): -4785 def start(self, tag, attrib): -4786 return 'start(%s)' % close()) +
4795 +
4797 class Target(object): +4798 def start(self, tag, attrib): +4799 return 'start(%s)' % tag -
4787 def end(self, tag): -4788 return 'end(%s)' % tag +4800 def end(self, tag): +4801 return 'end(%s)' % tag -4789 def close(self): -4790 return 'close()' -4791 -4792 parser = self.tag +4802 def close(self): +4803 return 'close()' +4804 +4805 parser = self.etree.XMLPullParser( -4793 ['start', 'end'], target=Target()) -4794 events = parser.read_events() -4795 -4796 parser.feed('<root><element>') -4797 self.assertEqual( -4798 [('start', 'start(root)'), ('start', 'start(element)')], -4799 list(events)) -4800 self.assertFalse(list(events)) -4801 parser.feed('</element><child>') -4802 self.assertEqual( -4803 [('end', 'end(element)'), ('start', 'start(child)')], -4804 list(events)) -4805 parser.feed('</child>') -4806 self.assertEqual( -4807 [('end', 'end(child)')], -4808 list(events)) -4809 parser.feed('</root>') +lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-4877', 'etree', 'link-3');">etree
.XMLPullParser(
+4806 ['start', 'end'], target=Target()) +4807 events = parser.read_events() +4808 +4809 parser.feed('<root><element>') 4810 self.assertEqual( -4811 [('end', 'end(root)')], +4811 [('start', 'start(root)'), ('start', 'start(element)')], 4812 list(events)) 4813 self.assertFalse(list(events)) -4814 self.assertEqual('close()', parser.4814 parser.feed('</element><child>') +4815 self.assertEqual( +4816 [('end', 'end(element)'), ('start', 'start(child)')], +4817 list(events)) +4818 parser.feed('</child>') +4819 self.assertEqual( +4820 [('end', 'end(child)')], +4821 list(events)) +4822 parser.feed('</root>') +4823 self.assertEqual( +4824 [('end', 'end(root)')], +4825 list(events)) +4826 self.assertFalse(list(events)) +4827 self.assertEqual('close()', parser.close()) -4815 -
4816 - def test_pull_from_tree_builder(self): -
4817 parser = self.close()) +
4828 +
4829 - def test_pull_from_tree_builder(self): +
4830 parser = self.etree.XMLPullParser( -4818 ['start', 'end'], target=etree.XMLPullParser( +4831 ['start', 'end'], target=etree.TreeBuilder()) -4819 events = parser.read_events() -4820 -4821 parser.feed('<root><element>') -4822 self.assert_event_tags( -4823 events, [('start', 'root'), ('start', 'element')]) -4824 self.assertFalse(list(events)) -4825 parser.feed('</element><child>') -4826 self.assert_event_tags( -4827 events, [('end', 'element'), ('start', 'child')]) -4828 parser.feed('</child>') -4829 self.assert_event_tags( -4830 events, [('end', 'child')]) -4831 parser.feed('</root>') -4832 self.assert_event_tags( -4833 events, [('end', 'root')]) -4834 self.assertFalse(list(events)) -4835 root = parser.etree.TreeBuilder()) +4832 events = parser.read_events() +4833 +4834 parser.feed('<root><element>') +4835 self.assert_event_tags( +4836 events, [('start', 'root'), ('start', 'element')]) +4837 self.assertFalse(list(events)) +4838 parser.feed('</element><child>') +4839 self.assert_event_tags( +4840 events, [('end', 'element'), ('start', 'child')]) +4841 parser.feed('</child>') +4842 self.assert_event_tags( +4843 events, [('end', 'child')]) +4844 parser.feed('</root>') +4845 self.assert_event_tags( +4846 events, [('end', 'root')]) +4847 self.assertFalse(list(events)) +4848 root = parser.close() -4836 self.assertEqual('root', root.close() +4849 self.assertEqual('root', root.tag) -
4837 -
4839 class Target(etree.TreeBuilder): -4840 def end(self, tag): -4841 el = super(Target, self).end(tag) +
4850 +
4852 class Target(etree.TreeBuilder): +4853 def end(self, tag): +4854 el = super(Target, self).end(tag) -4842 el.tag) +4855 el.tag += '-huhu' -4843 return el -
4844 -4845 parser = self.tag += '-huhu' +4856 return el +4857 +4858 parser = self.etree.XMLPullParser( -4846 ['start', 'end'], target=Target()) -4847 events = parser.read_events() -4848 -4849 parser.feed('<root><element>') -4850 self.assert_event_tags( -4851 events, [('start', 'root'), ('start', 'element')]) -4852 self.assertFalse(list(events)) -4853 parser.feed('</element><child>') -4854 self.assert_event_tags( -4855 events, [('end', 'element-huhu'), ('start', 'child')]) -4856 parser.feed('</child>') -4857 self.assert_event_tags( -4858 events, [('end', 'child-huhu')]) -4859 parser.feed('</root>') -4860 self.assert_event_tags( -4861 events, [('end', 'root-huhu')]) -4862 self.assertFalse(list(events)) -4863 root = parser.etree.XMLPullParser( +4859 ['start', 'end'], target=Target()) +4860 events = parser.read_events() +4861 +4862 parser.feed('<root><element>') +4863 self.assert_event_tags( +4864 events, [('start', 'root'), ('start', 'element')]) +4865 self.assertFalse(list(events)) +4866 parser.feed('</element><child>') +4867 self.assert_event_tags( +4868 events, [('end', 'element-huhu'), ('start', 'child')]) +4869 parser.feed('</child>') +4870 self.assert_event_tags( +4871 events, [('end', 'child-huhu')]) +4872 parser.feed('</root>') +4873 self.assert_event_tags( +4874 events, [('end', 'root-huhu')]) +4875 self.assertFalse(list(events)) +4876 root = parser.close() -4864 self.assertEqual('root-huhu', root.tag) -4865 -4866 -
4867 -def test_suite(): -
4868 suite = unittest.TestSuite() -4869 suite.addTests([unittest.makeSuite(ETreeOnlyTestCase)]) -4870 suite.addTests([unittest.makeSuite(ETreeXIncludeTestCase)]) -4871 suite.addTests([unittest.makeSuite(ElementIncludeTestCase)]) -4872 suite.addTests([unittest.makeSuite(ETreeC14NTestCase)]) -4873 suite.addTests([unittest.makeSuite(ETreeWriteTestCase)]) -4874 suite.addTests([unittest.makeSuite(ETreeErrorLogTest)]) -4875 suite.addTests([unittest.makeSuite(XMLPullParserTest)]) -4876 -4877 # add original doctests from ElementTree selftest modules -4878 from . import selftest, selftest2 -4879 suite.addTests(doctest.DocTestSuite(selftest)) -4880 suite.addTests(doctest.DocTestSuite(selftest2)) -4881 -4882 # add doctests -4883 suite.addTests(doctest.DocTestSuite(etree)) -4884 suite.addTests( -4885 [make_doctest('../../../doc/tutorial.txt')]) -4886 suite.addTests( -4887 [make_doctest('../../../doc/api.txt')]) -4888 suite.addTests( -4889 [make_doctest('../../../doc/FAQ.txt')]) -4890 suite.addTests( -4891 [make_doctest('../../../doc/parsing.txt')]) -4892 suite.addTests( -4893 [make_doctest('../../../doc/resolvers.txt')]) -4894 return suite -
4895 -4896 -4897 if __name__ == '__main__': -4898 print('to test use test.py %s' % __file__) -4899
-

How to build lxml from source

+

How to build lxml from source

To build lxml from source, you need libxml2 and libxslt properly installed, including the header files. These are likely shipped in @@ -317,7 +317,7 @@ installed using dpkg -i

diff --git a/doc/html/capi.html b/doc/html/capi.html index 713b0b4..bf79c0d 100644 --- a/doc/html/capi.html +++ b/doc/html/capi.html @@ -24,7 +24,7 @@ function hide_menu() {
-

The public C-API of lxml.etree

+

The public C-API of lxml.etree

As of version 1.1, lxml.etree provides a public C-API. This allows external C extensions to efficiently access public functions and classes of lxml, @@ -127,7 +127,7 @@ includes may not be sufficient.

diff --git a/doc/html/changes-4.4.0.html b/doc/html/changes-4.4.1.html similarity index 99% rename from doc/html/changes-4.4.0.html rename to doc/html/changes-4.4.1.html index 5b69bef..5600977 100644 --- a/doc/html/changes-4.4.0.html +++ b/doc/html/changes-4.4.1.html @@ -12,6 +12,17 @@

lxml changelog

+

4.4.1 (2019-08-11)

+
+

Bugs fixed

+
    +
  • LP#1838252: The order of an OrderedDict was lost in 4.4.0 when passing it as +attrib mapping during element creation.
  • +
  • LP#1838521: The package metadata now lists the supported Python versions.
  • +
+
+
+

4.4.0 (2019-07-27)

Features added

@@ -39,7 +50,7 @@ tree when set to false. a c14n2 serialisation method.
-
+

Bugs fixed

  • When writing to file paths that contain the URL escape character '%', the file @@ -82,61 +93,61 @@ in a future release.
-
+

4.3.5 (2019-07-27)

  • Rebuilt with Cython 0.29.13 to support Python 3.8.
-
+

4.3.4 (2019-06-10)

  • Rebuilt with Cython 0.29.10 to support Python 3.8.
-
+

4.3.3 (2019-03-26)

-
+

Bugs fixed

  • Fix leak of output buffer and unclosed files in _XSLTResultTree.write_output().
-
+

4.3.2 (2019-02-29)

-
+

Bugs fixed

  • Crash in 4.3.1 when appending a child subtree with certain text nodes.
-
+

Other changes

  • Built with Cython 0.29.6.
-
+

4.3.1 (2019-02-08)

-
+

Bugs fixed

  • LP#1814522: Crash when appending a child subtree that contains unsubstituted entity references.
-
+

Other changes

  • Built with Cython 0.29.5.
-
+

4.3.0 (2019-01-04)

-
+

Features added

  • The module lxml.sax is compiled using Cython in order to speed it up.
  • @@ -147,7 +158,7 @@ is used. Patch by Lennart Regebro. and the corresponding schema to the 2016 version (with optional "properties").
-
+

Other changes

  • GH#270, GH#271: Support for Python 2.6 and 3.3 was removed. @@ -158,9 +169,9 @@ which were released in 2014 and 2012 respectively.
-
+

4.2.6 (2019-01-02)

-
+

Bugs fixed

  • LP#1799755: Fix a DeprecationWarning in Py3.7+.
  • @@ -168,9 +179,9 @@ which were released in 2014 and 2012 respectively.
-
+

4.2.5 (2018-09-09)

-
+

Bugs fixed

  • Javascript URLs that used URL escaping were not removed by the HTML cleaner. @@ -178,16 +189,16 @@ Security problem found by Omar Eissa. (CVE-2018-19787)
-
+

4.2.4 (2018-08-03)

-
+

Features added

  • GH#259: Allow using pkg-config for build configuration. Patch by Patrick Griffis.
-
+

Bugs fixed

  • LP#1773749, GH#268: Crash when moving an element to another document with @@ -196,18 +207,18 @@ Patch by Alexander Weggerle.
-
+

4.2.3 (2018-06-27)

-
+

Bugs fixed

  • Reverted GH#265: lxml links against zlib as a shared library again.
-
+

4.2.2 (2018-06-22)

-
+

Bugs fixed

  • GH#266: Fix sporadic crash during GC when parse-time schema validation is used @@ -218,9 +229,9 @@ Patch by Nehal J Wani.
-
+

4.2.1 (2018-03-21)

-
+

Bugs fixed

  • LP#1755825: iterwalk() failed to return the 'start' event for the initial @@ -230,9 +241,9 @@ element if a tag selector is used.
-
+

4.2.0 (2018-03-13)

-
+

Features added

  • GH#255: SelectElement.value returns more standard-compliant and @@ -245,7 +256,7 @@ first one). If no options are present (not standard-compliant) Patch by stranac.
-
+

Bugs fixed

  • LP#1551797: Some XSLT messages were not captured by the transform error log.
  • @@ -253,19 +264,19 @@ Patch by stranac. validation.
-
+

Other changes

-
+

4.1.1 (2017-11-04)

  • Rebuild with Cython 0.27.3 to improve support for Py3.7.
-
+

4.1.0 (2017-10-13)

-
+

Features added

  • ElementPath supports text predicates for current node, like "[.='text']".
  • @@ -277,7 +288,7 @@ This should have a beneficial impact on the overall performance by providing a tighter compiler integration between lxml and libxml2/libxslt.
-
+

Bugs fixed

  • LP#1722776: Requesting non-Element objects like comments from a document with @@ -285,9 +296,9 @@ a tighter compiler integration between lxml and libxml2/libxslt.
-
+

4.0.0 (2017-09-17)

-
+

Features added

  • The ElementPath implementation is now compiled using Cython, @@ -303,7 +314,7 @@ allow relative resource lookups.
  • output data into a file according to the <xsl:output> configuration.
-
+

Bugs fixed

  • GH#251: HTML comments were handled incorrectly by the soupparser. @@ -336,7 +347,7 @@ to output end tags even after writing failed with an exception.

-
+

Other changes

  • The main module source files were renamed from lxml.*.pyx to plain @@ -347,9 +358,9 @@ be worth validating that third-party code does not notice this change.
-
+

3.8.0 (2017-06-03)

-
+

Features added

  • ElementTree.write() has a new option doctype that writes out a @@ -365,7 +376,7 @@ responsible for the error. Patch by Bob Kline.
  • a default namespace when passing a None prefix.
-
+

Bugs fixed

  • GH#238: Character escapes were not hex-encoded in the xmlfile serialiser. @@ -379,7 +390,7 @@ multi-threaded XSLT processing.
  • LP#1673355, GH#233: fromstring() html5parser failed to parse byte strings.
-
+

Other changes

  • The previously undocumented docstring option in ElementTree.write() @@ -387,9 +398,9 @@ produces a deprecation warning and will eventually be removed.
-
+

3.7.4 (2017-??-??)

-
+

Bugs fixed

  • LP#1551797: revert previous fix for XSLT error logging as it breaks @@ -398,9 +409,9 @@ multi-threaded XSLT processing.
-
+

3.7.3 (2017-02-18)

-
+

Bugs fixed

  • GH#218 was ineffective in Python 3.
  • @@ -409,13 +420,13 @@ Patch by Jakub Wilk.
-
+

3.7.2 (2017-01-08)

  • GH#220: xmlfile allows switching output methods at an element level. Patch by Burak Arslan.
-
+

Bugs fixed

  • Work around installation problems in recent Python 2.7 versions @@ -427,16 +438,16 @@ script/style tags. Patch by Burak Arslan.
-
+

3.7.1 (2016-12-23)

  • No source changes, issued only to solve problems with the binary packages released for 3.7.0.
-
+

3.7.0 (2016-12-10)

-
+

Features added

  • GH#217: XMLSyntaxError now behaves more like its SyntaxError @@ -454,14 +465,14 @@ serialises like <div attrname& marked as disabled in HTML. Patch by Kristian Klemon.
-
+

Bugs fixed

  • GH#206: File name and line number were missing from XSLT error messages. Patch by Marcus Brinkmann.
-
+

Other changes

  • Log entries no longer allow anything but plain string objects as message text @@ -470,27 +481,27 @@ and file name.
-
+

3.6.4 (2016-08-20)

-
+

3.6.3 (2016-08-18)

  • LP#1614603: change linker flags to build multi-linux wheels
-
+

3.6.2 (2016-08-18)

  • LP#1614603: release without source changes to provide cleanly built Linux wheels
-
+

3.6.1 (2016-07-24)

-
+

Features added

  • GH#180: Separate option inline_style for Cleaner that only removes style @@ -498,7 +509,7 @@ attributes instead of all styles. Patch by Christian Pedersen.
  • GH#196: Windows build support for Python 3.5. Contribution by Maximilian Hils.
-
+

Bugs fixed

  • GH#199: Exclude file fields from FormElement.form_values (as browsers do). @@ -511,9 +522,9 @@ Patch by Holger Joukl.
-
+

3.6.0 (2016-03-17)

-
+

Features added

  • GH#187: Now supports (only) version 5.x and later of PyPy. @@ -522,7 +533,7 @@ Patch by Armin Rigo.
  • is installed. Patch by Dirkjan Ochtman.
-
+

Bugs fixed

  • GH#189: Static builds honour FTP proxy configurations when downloading @@ -534,9 +545,9 @@ Patch by Petr Demin.
-
+

3.5.0 (2015-11-13)

-
+

Bugs fixed

  • Unicode string results failed XPath queries in PyPy.
  • @@ -548,7 +559,7 @@ and continued parsing instead.

3.5.0b1 (2015-09-18)

-
+

Features added

  • cleanup_namespaces() accepts a new argument keep_ns_prefixes @@ -580,7 +591,7 @@ Patch by Olli Pottonen.
  • of version 3 if available.
-
+

Bugs fixed

  • Memory errors that occur during tree adaptations (e.g. moving subtrees @@ -607,9 +618,9 @@ with ElementPath to avoid hiding bugs in user code.
-
+

3.4.4 (2015-04-25)

-
+

Bugs fixed

  • An ElementTree compatibility test added in lxml 3.4.3 that failed in @@ -617,9 +628,9 @@ Python 3.4+ was removed again.
-
+

3.4.3 (2015-04-15)

-
+

Bugs fixed

  • Expression cache in ElementPath was ignored. Fix by Changaco.
  • @@ -632,9 +643,9 @@ double quotes. Patch by Olli Pottonen.
-
+

3.4.2 (2015-02-07)

-
+

Bugs fixed

  • LP#1415907: Crash when creating an XMLSchema from a non-root element @@ -646,25 +657,25 @@ with pseudo-attributes.
-
+

3.4.1 (2014-11-20)

-
+

Features added

  • New htmlfile HTML generator to accompany the incremental xmlfile serialisation API. Patch by Burak Arslan.
-
+

Bugs fixed

  • lxml.sax.ElementTreeContentHandler did not initialise its superclass.
-
+

3.4.0 (2014-09-10)

-
+

Features added

  • xmlfile(buffered=False) disables output buffering and flushes the @@ -689,10 +700,10 @@ if it had opened it internally.
  • Allow "bytearray" type for ASCII text input.
-
+

Bugs fixed

-
+

Other changes

  • LP#400588: decoding errors have become hard errors even in recovery mode. @@ -706,9 +717,9 @@ use lxml 3.3.x with older versions.
-
+

3.3.6 (2014-08-28)

-
+

Bugs fixed

  • Prevent tree cycle creation when adding Elements as siblings.
  • @@ -718,9 +729,9 @@ extension functions.
-
+

3.3.5 (2014-04-18)

-
+

Bugs fixed

  • HTML cleaning could fail to strip javascript links that mix control @@ -728,34 +739,34 @@ characters into the link scheme.
-
+

3.3.4 (2014-04-03)

-
+

Features added

  • Source line numbers above 65535 are available on Elements when using libxml2 2.9 or later.
-
+

Bugs fixed

  • lxml.html.fragment_fromstring() failed for bytes input in Py3.
-
+

Other changes

-
+

3.3.3 (2014-03-04)

-
+

Bugs fixed

  • LP#1287118: Crash when using Element subtypes with __slots__.
-
+

Other changes

  • The internal classes _LogEntry and _Attrib can no longer be @@ -763,9 +774,9 @@ subclassed from Python code.
-
+

3.3.2 (2014-02-26)

-
+

Bugs fixed

  • The properties resolvers and version, as well as the methods @@ -786,12 +797,12 @@ provide the same interface as that returned for Elements.
-
+

3.3.1 (2014-02-12)

-
+

Features added

-
+

Bugs fixed

  • LP#1014290: HTML documents parsed with parser.feed() failed to find @@ -803,36 +814,36 @@ header file.
  • LP#1274118: iterparse() failed to parse BOM prefixed files.
-
+

Other changes

-
+

3.3.0 (2014-01-26)

-
+

Features added

-
+

Bugs fixed

  • The heuristic that distinguishes file paths from URLs was tightened to produce less false negatives.
-
+

Other changes

3.3.0beta5 (2014-01-18)

-
+

Features added

  • The PEP 393 unicode parsing support gained a fallback for wchar strings which might still be somewhat common on Windows systems.
-
+

Bugs fixed

  • Several error handling problems were fixed throughout the code base that @@ -845,7 +856,7 @@ propagate exceptions (its return type is void) parsing the string character by character.
-
+

Other changes

  • Document cleanup code was simplified using the new GC features in @@ -855,10 +866,10 @@ Cython 0.20.

3.3.0beta4 (2014-01-12)

-
+

Features added

-
+

Bugs fixed

  • The (empty) value returned by the attrib property of Entity and Comment @@ -871,7 +882,7 @@ and keyword arguments could modify the mapping passed as +

    Other changes

    • Built with Cython 0.20pre (gitrev 012ae82eb) to prepare support for @@ -881,39 +892,39 @@ Python 3.4.

    3.3.0beta3 (2014-01-02)

    -
    +

    Features added

    • Unicode string parsing was optimised for Python 3.3 (PEP 393).
    -
    +

    Bugs fixed

    • HTML parsing of Unicode strings could misdecode the input on some platforms.
    • Crash in xmlfile() when closing open elements out of order in an error case.
    -
    +

    Other changes

    3.3.0beta2 (2013-12-20)

    -
    +

    Features added

    • iterparse() supports the recover option.
    -
    +

    Bugs fixed

    • Crash in iterparse() for HTML parsing.
    • Crash in target parsing with attributes.
    -
    +

    Other changes

    • The safety check in the read-only tree implementation (e.g. used by @@ -926,7 +937,7 @@ behaviour.

    3.3.0beta1 (2013-12-12)

    -
    +

    Features added

    • New option handle_failures in make_links_absolute() and @@ -938,7 +949,7 @@ incremental parsing, as implemented for ElementTree in Python 3.4.
    • (html=True).
    -
    +

    Bugs fixed

    • LP#1255132: crash when trying to run validation over non-Element (e.g. @@ -960,7 +971,7 @@ The textarea used to be cleared before the new content was set, which removed the name attribute.
    -
    +

    Other changes

    • Some basic API classes use freelists internally for faster @@ -971,12 +982,12 @@ classes internally instead of being a parser itself.
    -
    +

    3.2.5 (2014-01-02)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • Crash in xmlfile() when closing open elements out of order in an error case.
    • @@ -985,16 +996,16 @@ classes internally instead of being a parser itself. comment or PI).
    -
    +

    Other changes

    -
    +

    3.2.4 (2013-11-07)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • Memory leak when creating an XPath evaluator in a thread.
    • @@ -1005,32 +1016,32 @@ to one of its own descendants.
    • Compressed plain-text serialisation to file-like objects was broken.
    -
    +

    Other changes

    -
    +

    3.2.3 (2013-07-28)

    -
    +

    Bugs fixed

    • Fix support for Python 2.4 which was lost in 3.2.2.
    -
    +

    3.2.2 (2013-07-28)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • LP#1185701: spurious XMLSyntaxError after finishing iterparse().
    • Crash in lxml.objectify during xsi annotation.
    -
    +

    Other changes

    • Return values of user provided element class lookup methods are now @@ -1039,9 +1050,9 @@ API class mismatches.
    -
    +

    3.2.1 (2013-05-11)

    -
    +

    Features added

    • The methods apply_templates() and process_children() of XSLT @@ -1050,7 +1061,7 @@ and remove_blank_text that discard either all strings from the result list.
    -
    +

    Bugs fixed

    • When moving Elements to another tree, the namespace cleanup mechanism @@ -1063,16 +1074,16 @@ to a crash.
    • crashed.
    -
    +

    Other changes

    -
    +

    3.2.0 (2013-04-28)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • LP#690319: Leading whitespace could change the behaviour of the string @@ -1091,16 +1102,16 @@ of overwriting the current value.
    • allowed by the user provided whitelist. Patch by Christine Koppelt.
    -
    +

    Other changes

    -
    +

    3.1.2 (2013-04-12)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • LP#1136509: Passing attributes through the namespace-unaware API of @@ -1112,16 +1123,16 @@ the result tree to a Unicode string.
    • by properly exported API function xmlBufUse().
    -
    +

    Other changes

    -
    +

    3.1.1 (2013-03-29)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • LP#1160386: Write access to lxml.html.FormElement.fields raised @@ -1129,7 +1140,7 @@ an AttributeError in Py3.
    • Illegal memory access during cleanup in incremental xmlfile writer.
    -
    +

    Other changes

    • The externally useless class lxml.etree._BaseParser was removed @@ -1137,16 +1148,16 @@ from the module dict.
    -
    +

    3.1.0 (2013-02-10)

    -
    +

    Features added

    • GH#89: lxml.html.clean allows overriding the set of attributes that it considers 'safe'. Patch by Francis Devereux.
    -
    +

    Bugs fixed

    • LP#1104370: copy.copy(el.attrib) raised an exception. It now returns @@ -1159,13 +1170,13 @@ in for the current run.
    • without threading support. Patch by Ulrich Seidl.
    -
    +

    Other changes

    3.1beta1 (2012-12-21)

    -
    +

    Features added

    • New build-time option --with-unicode-strings for Python 2 that @@ -1176,7 +1187,7 @@ instead of byte strings for plain ASCII content.
    • tags with non-identifier names without having to resort to getattr().
    -
    +

    Bugs fixed

    • When starting from a non-namespaced element in lxml.objectify, searching @@ -1188,7 +1199,7 @@ the search to non-namespaced children.
    • LP#1080792: Static build of libxml2 2.9.0 failed due to missing file.
    -
    +

    Other changes

    • The externally useless class _ObjectifyElementMakerCaller was @@ -1198,27 +1209,27 @@ many children. Patch by Anders Hammarquist.
    -
    +

    3.0.2 (2012-12-14)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • Fix crash during interpreter shutdown by switching to Cython 0.17.3 for building.
    -
    +

    Other changes

    -
    +

    3.0.1 (2012-10-14)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • LP#1065924: Element proxies could disappear during garbage collection @@ -1227,16 +1238,16 @@ in PyPy without proper cleanup.
    • LP#1065139: static MacOS-X build failed in Py3.
    -
    +

    Other changes

    -
    +

    3.0 (2012-10-08)

    -
    +

    Features added

    -
    +

    Bugs fixed

    • End-of-file handling was incorrect in iterparse() when reading from @@ -1244,7 +1255,7 @@ a low-level C file stream and failed in libxml2 2.9.0 due to its improved consistency checks.
    -
    +

    Other changes

    • The build no longer uses Cython by default unless the generated C files @@ -1257,21 +1268,21 @@ run special setup.py commands that do not actually run a build), pass

    3.0beta1 (2012-09-26)

    -
    +

    Features added

    • Python level access to (optional) libxml2 memory debugging features to simplify debugging of memory leaks etc.
    -
    +

    Bugs fixed

    • Fix a memory leak in XPath by switching to Cython 0.17.1.
    • Some tests were adapted to work with PyPy.
    -
    +

    Other changes

    • The code was adapted to work with the upcoming libxml2 2.9.0 release.
    • @@ -1280,7 +1291,7 @@ to simplify debugging of memory leaks etc.

    3.0alpha2 (2012-08-23)

    -
    +

    Features added

    diff --git a/doc/html/cssselect.html b/doc/html/cssselect.html index 50a12c1..b74079d 100644 --- a/doc/html/cssselect.html +++ b/doc/html/cssselect.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    lxml.cssselect

    +

    lxml.cssselect

    lxml supports a number of interesting languages for tree traversal and element selection. The most important is obviously XPath, but there is also @@ -113,7 +113,7 @@ namespace URIs: the CSSSelector class accepts

    diff --git a/doc/html/element_classes.html b/doc/html/element_classes.html index 09dd6c1..4fb82d3 100644 --- a/doc/html/element_classes.html +++ b/doc/html/element_classes.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Using custom Element classes in lxml

    +

    Using custom Element classes in lxml

    lxml has very sophisticated support for custom Element classes. You can provide your own classes for Elements and have lxml use them by @@ -525,7 +525,7 @@ and use the blank decorator instead:

    diff --git a/doc/html/elementsoup.html b/doc/html/elementsoup.html index 9811e11..21c942a 100644 --- a/doc/html/elementsoup.html +++ b/doc/html/elementsoup.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    BeautifulSoup Parser

    +

    BeautifulSoup Parser

    BeautifulSoup is a Python package for working with real-world and broken HTML, just like lxml.html. As of version 4.x, it can use @@ -203,7 +203,7 @@ you can simply pass the resulting Unicode string into lxml's parser.

    diff --git a/doc/html/extensions.html b/doc/html/extensions.html index f92e154..87299a5 100644 --- a/doc/html/extensions.html +++ b/doc/html/extensions.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Python extensions for XPath and XSLT

    +

    Python extensions for XPath and XSLT

    This document describes how to use Python extension functions in XPath and XSLT like this:

    @@ -530,7 +530,7 @@ will work:

    diff --git a/doc/html/html5parser.html b/doc/html/html5parser.html index b43a8d3..cfd847b 100644 --- a/doc/html/html5parser.html +++ b/doc/html/html5parser.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    html5lib Parser

    +

    html5lib Parser

    html5lib is a Python package that implements the HTML5 parsing algorithm which is heavily influenced by current browsers and based on the WHATWG @@ -90,7 +90,7 @@ module. Note that these are the parser classes provided by html5lib.

    diff --git a/doc/html/index.html b/doc/html/index.html index e977cce..bbc0734 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -26,7 +26,7 @@ function hide_menu() {
    -

    lxml - XML and HTML with Python

    +

    lxml - XML and HTML with Python

    @@ -72,7 +72,7 @@ Jetbrains supports the lxml project by donating free licenses of their

    Documentation

    -

    The complete lxml documentation is available for download as PDF +

    The complete lxml documentation is available for download as PDF documentation. The HTML documentation from this web site is part of the normal source download.

    diff --git a/doc/html/installation.html b/doc/html/installation.html index fc09293..38e0b75 100644 --- a/doc/html/installation.html +++ b/doc/html/installation.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Installing lxml

    +

    Installing lxml

    Contents

    @@ -208,7 +208,7 @@ read the
    diff --git a/doc/html/intro.html b/doc/html/intro.html index 5451d38..71e1456 100644 --- a/doc/html/intro.html +++ b/doc/html/intro.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Why lxml?

    +

    Why lxml?

    Contents

    @@ -82,7 +82,7 @@ having to learn new things -- XML is complicated enough.

    diff --git a/doc/html/lxml-source-howto.html b/doc/html/lxml-source-howto.html index 6529e1c..0d80db0 100644 --- a/doc/html/lxml-source-howto.html +++ b/doc/html/lxml-source-howto.html @@ -27,7 +27,7 @@ function hide_menu() {
    -

    How to read the source of lxml

    +

    How to read the source of lxml

    @@ -286,7 +286,7 @@ implemented in pure Python.

    diff --git a/doc/html/lxmlhtml.html b/doc/html/lxmlhtml.html index 861c363..049dc00 100644 --- a/doc/html/lxmlhtml.html +++ b/doc/html/lxmlhtml.html @@ -25,7 +25,7 @@ function hide_menu() {
    -

    lxml.html

    +

    lxml.html

    @@ -696,7 +696,7 @@ microformat.

    diff --git a/doc/html/objectify.html b/doc/html/objectify.html index 11ed672..26cf42d 100644 --- a/doc/html/objectify.html +++ b/doc/html/objectify.html @@ -25,7 +25,7 @@ function hide_menu() {
    -

    lxml.objectify

    +

    lxml.objectify

    @@ -1165,7 +1165,7 @@ support any XPath expression. diff --git a/doc/html/parsing.html b/doc/html/parsing.html index 18d5930..b93aafe 100644 --- a/doc/html/parsing.html +++ b/doc/html/parsing.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Parsing XML and HTML with lxml

    +

    Parsing XML and HTML with lxml

    lxml provides a very simple and powerful API for parsing XML and HTML. It supports one-step parsing as well as step-by-step parsing using an @@ -893,7 +893,7 @@ with UTF-8 is also considerably faster in most cases.

    diff --git a/doc/html/performance.html b/doc/html/performance.html index 636f111..9ebbfc4 100644 --- a/doc/html/performance.html +++ b/doc/html/performance.html @@ -27,7 +27,7 @@ function hide_menu() {
    -

    Benchmarks and Speed

    +

    Benchmarks and Speed

    @@ -798,7 +798,7 @@ random.

    diff --git a/doc/html/resolvers.html b/doc/html/resolvers.html index b7268a1..a41f643 100644 --- a/doc/html/resolvers.html +++ b/doc/html/resolvers.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Document loading and URL resolving

    +

    Document loading and URL resolving

    Contents

    @@ -250,7 +250,7 @@ documents or raises exceptions if access is denied.
    diff --git a/doc/html/sax.html b/doc/html/sax.html index 6e69e05..e66495e 100644 --- a/doc/html/sax.html +++ b/doc/html/sax.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Sax support

    +

    Sax support

    In this document we'll describe lxml's SAX support. lxml has support for producing SAX events for an ElementTree or Element. lxml can also turn SAX @@ -124,7 +124,7 @@ DOM implementation cannot generate SAX events from a DOM tree.

    diff --git a/doc/html/sitemap.html b/doc/html/sitemap.html index f1263bf..bd26440 100644 --- a/doc/html/sitemap.html +++ b/doc/html/sitemap.html @@ -8,5 +8,5 @@

    Sitemap of lxml.de - Processing XML and HTML with Python

    -
    +
    \ No newline at end of file diff --git a/doc/html/tutorial.html b/doc/html/tutorial.html index 6cca1e0..5f278fd 100644 --- a/doc/html/tutorial.html +++ b/doc/html/tutorial.html @@ -27,7 +27,7 @@ function hide_menu() {
    -

    The lxml.etree Tutorial

    +

    The lxml.etree Tutorial

    @@ -1184,7 +1184,7 @@ whereas the other two examples would raise a StopIt diff --git a/doc/html/validation.html b/doc/html/validation.html index f98c2d4..a69bba7 100644 --- a/doc/html/validation.html +++ b/doc/html/validation.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    Validation with lxml

    +

    Validation with lxml

    Apart from the built-in DTD support in parsers, lxml currently supports three schema languages: DTD, Relax NG and XML Schema. All three provide @@ -556,7 +556,7 @@ reporting during validation.

    diff --git a/doc/html/xpathxslt.html b/doc/html/xpathxslt.html index b270adc..1f65b34 100644 --- a/doc/html/xpathxslt.html +++ b/doc/html/xpathxslt.html @@ -24,7 +24,7 @@ function hide_menu() {
    -

    XPath and XSLT with lxml

    +

    XPath and XSLT with lxml

    lxml supports XPath 1.0, XSLT 1.0 and the EXSLT extensions through libxml2 and libxslt in a standards compliant way.

    @@ -632,7 +632,7 @@ If you want to free it from memory, just do:

    diff --git a/doc/main.txt b/doc/main.txt index a38aa3d..9497052 100644 --- a/doc/main.txt +++ b/doc/main.txt @@ -159,8 +159,8 @@ Index `_ (PyPI). It has the source that compiles on various platforms. The source distribution is signed with `this key `_. -The latest version is `lxml 4.4.0`_, released 2019-07-27 -(`changes for 4.4.0`_). `Older versions <#old-versions>`_ +The latest version is `lxml 4.4.1`_, released 2019-08-11 +(`changes for 4.4.1`_). `Older versions <#old-versions>`_ are listed below. Please take a look at the @@ -254,7 +254,9 @@ See the websites of lxml .. and the `latest in-development version `_. -.. _`PDF documentation`: lxmldoc-4.4.0.pdf +.. _`PDF documentation`: lxmldoc-4.4.1.pdf + +* `lxml 4.4.1`_, released 2019-08-11 (`changes for 4.4.1`_) * `lxml 4.4.0`_, released 2019-07-27 (`changes for 4.4.0`_) @@ -272,6 +274,7 @@ See the websites of lxml * `older releases `_ +.. _`lxml 4.4.1`: /files/lxml-4.4.1.tgz .. _`lxml 4.4.0`: /files/lxml-4.4.0.tgz .. _`lxml 4.3.5`: /files/lxml-4.3.5.tgz .. _`lxml 4.3.4`: /files/lxml-4.3.4.tgz @@ -280,6 +283,7 @@ See the websites of lxml .. _`lxml 4.3.1`: /files/lxml-4.3.1.tgz .. _`lxml 4.3.0`: /files/lxml-4.3.0.tgz +.. _`changes for 4.4.1`: /changes-4.4.1.html .. _`changes for 4.4.0`: /changes-4.4.0.html .. _`changes for 4.3.5`: /changes-4.3.5.html .. _`changes for 4.3.4`: /changes-4.3.4.html diff --git a/setup.py b/setup.py index d61a771..03b9edb 100644 --- a/setup.py +++ b/setup.py @@ -56,6 +56,9 @@ if versioninfo.is_pre_release(): extra_options = {} if 'setuptools' in sys.modules: extra_options['zip_safe'] = False + extra_options['python_requires'] = ( + # NOTE: keep in sync with Trove classifier list below. + '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*') try: import pkg_resources @@ -222,10 +225,10 @@ an appropriate version of Cython installed. 'Intended Audience :: Information Technology', 'License :: OSI Approved :: BSD License', 'Programming Language :: Cython', + # NOTE: keep in sync with 'python_requires' list above. 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', diff --git a/src/lxml.egg-info/PKG-INFO b/src/lxml.egg-info/PKG-INFO index 3c28354..32ab494 100644 --- a/src/lxml.egg-info/PKG-INFO +++ b/src/lxml.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: lxml -Version: 4.4.0 +Version: 4.4.1 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. Home-page: http://lxml.de/ Author: lxml dev team @@ -38,90 +38,16 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr as soon as a maintenance branch has been established. Note that this requires Cython to be installed at an appropriate version for the build. - 4.4.0 (2019-07-27) + 4.4.1 (2019-08-11) ================== - Features added - -------------- - - * ``Element.clear()`` accepts a new keyword argument ``keep_tail=True`` to - clear everything but the tail text. This is helpful in some document-style - use cases. - - * When creating attributes or namespaces from a dict in Python 3.6+, lxml now - preserves the original insertion order of that dict, instead of always sorting - the items by name. A similar change was made for ElementTree in CPython 3.8. - See https://bugs.python.org/issue34160 - - * Integer elements in ``lxml.objectify`` implement the ``__index__()`` special method. - - * GH#269: Read-only elements in XSLT were missing the ``nsmap`` property. - Original patch by Jan Pazdziora. - - * ElementInclude can now restrict the maximum inclusion depth via a ``max_depth`` - argument to prevent content explosion. It is limited to 6 by default. - - * The ``target`` object of the XMLParser can have ``start_ns()`` and ``end_ns()`` - callback methods to listen to namespace declarations. - - * The ``TreeBuilder`` has new arguments ``comment_factory`` and ``pi_factory`` to - pass factories for creating comments and processing instructions, as well as - flag arguments ``insert_comments`` and ``insert_pis`` to discard them from the - tree when set to false. - - * A `C14N 2.0 `_ implementation was added as - ``etree.canonicalize()``, a corresponding ``C14NWriterTarget`` class, and - a ``c14n2`` serialisation method. - Bugs fixed ---------- - * When writing to file paths that contain the URL escape character '%', the file - path could wrongly be mangled by URL unescaping and thus write to a different - file or directory. Code that writes to file paths that are provided by untrusted - sources, but that must work with previous versions of lxml, should best either - reject paths that contain '%' characters, or otherwise make sure that the path - does not contain maliciously injected '%XX' URL hex escapes for paths like '../'. - - * Assigning to Element child slices with negative step could insert the slice at - the wrong position, starting too far on the left. - - * Assigning to Element child slices with overly large step size could take very - long, regardless of the length of the actual slice. - - * Assigning to Element child slices of the wrong size could sometimes fail to - raise a ValueError (like a list assignment would) and instead assign outside - of the original slice bounds or leave parts of it unreplaced. - - * The ``comment`` and ``pi`` events in ``iterwalk()`` were never triggered, and - instead, comments and processing instructions in the tree were reported as - ``start`` elements. Also, when walking an ElementTree (as opposed to its root - element), comments and PIs outside of the root element are now reported. - - * LP#1827833: The RelaxNG compact syntax support was broken with recent versions - of ``rnc2rng``. - - * LP#1758553: The HTML elements ``source`` and ``track`` were added to the list - of empty tags in ``lxml.html.defs``. - - * Registering a prefix other than "xml" for the XML namespace is now rejected. - - * Failing to write XSLT output to a file could raise a misleading exception. - It now raises ``IOError``. - - Other changes - ------------- - - * Support for Python 3.4 was removed. - - * When using ``Element.find*()`` with prefix-namespace mappings, the empty string - is now accepted to define a default namespace, in addition to the previously - supported ``None`` prefix. Empty strings are more convenient since they keep - all prefix keys in a namespace dict strings, which simplifies sorting etc. + * LP#1838252: The order of an OrderedDict was lost in 4.4.0 when passing it as + attrib mapping during element creation. - * The ``ElementTree.write_c14n()`` method has been deprecated in favour of the - long preferred ``ElementTree.write(f, method="c14n")``. It will be removed - in a future release. + * LP#1838521: The package metadata now lists the supported Python versions. @@ -134,7 +60,6 @@ Classifier: Programming Language :: Cython Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 @@ -143,6 +68,7 @@ Classifier: Operating System :: OS Independent Classifier: Topic :: Text Processing :: Markup :: HTML Classifier: Topic :: Text Processing :: Markup :: XML Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.* Provides-Extra: cssselect Provides-Extra: html5 Provides-Extra: htmlsoup diff --git a/src/lxml.egg-info/SOURCES.txt b/src/lxml.egg-info/SOURCES.txt index 1214f2c..8fe5d7d 100644 --- a/src/lxml.egg-info/SOURCES.txt +++ b/src/lxml.egg-info/SOURCES.txt @@ -56,7 +56,7 @@ doc/html/FAQ.html doc/html/api.html doc/html/build.html doc/html/capi.html -doc/html/changes-4.4.0.html +doc/html/changes-4.4.1.html doc/html/compatibility.html doc/html/credits.html doc/html/cssselect.html @@ -854,6 +854,7 @@ src/lxml/tests/c14n-20/out_inNsXml_c14nDefault.xml src/lxml/tests/c14n-20/out_inNsXml_c14nPrefix.xml src/lxml/tests/c14n-20/out_inNsXml_c14nPrefixQname.xml src/lxml/tests/c14n-20/out_inNsXml_c14nQname.xml +src/lxml/tests/c14n-20/world.txt src/lxml/tests/include/test_xinclude.xml tools/xpathgrep.py tools/manylinux/build-wheels.sh \ No newline at end of file diff --git a/src/lxml/apihelpers.pxi b/src/lxml/apihelpers.pxi index d54bf8d..a66f127 100644 --- a/src/lxml/apihelpers.pxi +++ b/src/lxml/apihelpers.pxi @@ -292,17 +292,12 @@ cdef _iter_attrib(attrib): Create a reproducibly ordered iterable from an attrib mapping. Tries to preserve an existing order and sorts if it assumes no order. """ - # attrib will usually be a plain unordered dict - if isinstance(attrib, dict): - if python.PY_VERSION_HEX >= 0x03060000: - # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - return attrib.items() - return sorted(attrib.items()) - elif isinstance(attrib, (_Attrib, OrderedDict)): + # dicts are insertion-ordered in Py3.6+ => keep the user provided order. + if python.PY_VERSION_HEX >= 0x03060000 and isinstance(attrib, dict) or ( + isinstance(attrib, (_Attrib, OrderedDict))): return attrib.items() - else: - # assume it's an unordered mapping of some kind - return sorted(attrib.items()) + # assume it's an unordered mapping of some kind + return sorted(attrib.items()) cdef _initNodeAttributes(xmlNode* c_node, _Document doc, attrib, dict extra): diff --git a/src/lxml/etree.c b/src/lxml/etree.c index 77c7202..4deb95b 100644 --- a/src/lxml/etree.c +++ b/src/lxml/etree.c @@ -5,90 +5,90 @@ "distutils": { "define_macros": [ [ - "CYTHON_CLINE_IN_TRACEBACK", + "CYTHON_CLINE_IN_TRACEBACK", "0" ] - ], + ], "depends": [ - "/usr/include/libxml2/libxml/HTMLtree.h", - "/usr/include/libxml2/libxml/chvalid.h", - "/usr/include/libxml2/libxml/encoding.h", - "/usr/include/libxml2/libxml/globals.h", - "/usr/include/libxml2/libxml/hash.h", - "/usr/include/libxml2/libxml/tree.h", - "/usr/include/libxml2/libxml/uri.h", - "/usr/include/libxml2/libxml/valid.h", - "/usr/include/libxml2/libxml/xmlIO.h", - "/usr/include/libxml2/libxml/xmlmemory.h", - "/usr/include/libxml2/libxml/xmlsave.h", - "/usr/include/libxml2/libxml/xmlstring.h", - "/usr/include/libxml2/libxml/xmlversion.h", - "src/lxml/apihelpers.pxi", - "src/lxml/classlookup.pxi", - "src/lxml/cleanup.pxi", - "src/lxml/debug.pxi", - "src/lxml/docloader.pxi", - "src/lxml/dtd.pxi", - "src/lxml/extensions.pxi", - "src/lxml/includes/__init__.pxd", - "src/lxml/includes/c14n.pxd", - "src/lxml/includes/config.pxd", - "src/lxml/includes/dtdvalid.pxd", - "src/lxml/includes/etree_defs.h", - "src/lxml/includes/htmlparser.pxd", - "src/lxml/includes/lxml-version.h", - "src/lxml/includes/relaxng.pxd", - "src/lxml/includes/schematron.pxd", - "src/lxml/includes/tree.pxd", - "src/lxml/includes/uri.pxd", - "src/lxml/includes/xinclude.pxd", - "src/lxml/includes/xmlerror.pxd", - "src/lxml/includes/xmlparser.pxd", - "src/lxml/includes/xmlschema.pxd", - "src/lxml/includes/xpath.pxd", - "src/lxml/includes/xslt.pxd", - "src/lxml/iterparse.pxi", - "src/lxml/lxml_endian.h", - "src/lxml/nsclasses.pxi", - "src/lxml/parser.pxi", - "src/lxml/parsertarget.pxi", - "src/lxml/proxy.pxi", - "src/lxml/public-api.pxi", - "src/lxml/readonlytree.pxi", - "src/lxml/relaxng.pxi", - "src/lxml/saxparser.pxi", - "src/lxml/schematron.pxi", - "src/lxml/serializer.pxi", - "src/lxml/xinclude.pxi", - "src/lxml/xmlerror.pxi", - "src/lxml/xmlid.pxi", - "src/lxml/xmlschema.pxi", - "src/lxml/xpath.pxi", - "src/lxml/xslt.pxi", + "/usr/include/libxml2/libxml/HTMLtree.h", + "/usr/include/libxml2/libxml/chvalid.h", + "/usr/include/libxml2/libxml/encoding.h", + "/usr/include/libxml2/libxml/globals.h", + "/usr/include/libxml2/libxml/hash.h", + "/usr/include/libxml2/libxml/tree.h", + "/usr/include/libxml2/libxml/uri.h", + "/usr/include/libxml2/libxml/valid.h", + "/usr/include/libxml2/libxml/xmlIO.h", + "/usr/include/libxml2/libxml/xmlmemory.h", + "/usr/include/libxml2/libxml/xmlsave.h", + "/usr/include/libxml2/libxml/xmlstring.h", + "/usr/include/libxml2/libxml/xmlversion.h", + "src/lxml/apihelpers.pxi", + "src/lxml/classlookup.pxi", + "src/lxml/cleanup.pxi", + "src/lxml/debug.pxi", + "src/lxml/docloader.pxi", + "src/lxml/dtd.pxi", + "src/lxml/extensions.pxi", + "src/lxml/includes/__init__.pxd", + "src/lxml/includes/c14n.pxd", + "src/lxml/includes/config.pxd", + "src/lxml/includes/dtdvalid.pxd", + "src/lxml/includes/etree_defs.h", + "src/lxml/includes/htmlparser.pxd", + "src/lxml/includes/lxml-version.h", + "src/lxml/includes/relaxng.pxd", + "src/lxml/includes/schematron.pxd", + "src/lxml/includes/tree.pxd", + "src/lxml/includes/uri.pxd", + "src/lxml/includes/xinclude.pxd", + "src/lxml/includes/xmlerror.pxd", + "src/lxml/includes/xmlparser.pxd", + "src/lxml/includes/xmlschema.pxd", + "src/lxml/includes/xpath.pxd", + "src/lxml/includes/xslt.pxd", + "src/lxml/iterparse.pxi", + "src/lxml/lxml_endian.h", + "src/lxml/nsclasses.pxi", + "src/lxml/parser.pxi", + "src/lxml/parsertarget.pxi", + "src/lxml/proxy.pxi", + "src/lxml/public-api.pxi", + "src/lxml/readonlytree.pxi", + "src/lxml/relaxng.pxi", + "src/lxml/saxparser.pxi", + "src/lxml/schematron.pxi", + "src/lxml/serializer.pxi", + "src/lxml/xinclude.pxi", + "src/lxml/xmlerror.pxi", + "src/lxml/xmlid.pxi", + "src/lxml/xmlschema.pxi", + "src/lxml/xpath.pxi", + "src/lxml/xslt.pxi", "src/lxml/xsltext.pxi" - ], + ], "extra_compile_args": [ "-w" - ], + ], "include_dirs": [ - "src/lxml", - "src/lxml/includes", - "/usr/include/libxml2", + "src/lxml", + "src/lxml/includes", + "/usr/include/libxml2", "src" - ], + ], "libraries": [ - "xslt", - "exslt", - "xml2", - "rt", - "z", + "xslt", + "exslt", + "xml2", + "rt", + "z", "m" - ], - "name": "lxml.etree", + ], + "name": "lxml.etree", "sources": [ "src/lxml/etree.pyx" ] - }, + }, "module_name": "lxml.etree" } END: Cython Metadata */ @@ -1161,7 +1161,7 @@ struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags; struct __pyx_opt_args_4lxml_5etree_16C14NWriterTarget__qname; struct __pyx_opt_args_4lxml_5etree_16C14NWriterTarget__start; -/* "src/lxml/apihelpers.pxi":1548 +/* "src/lxml/apihelpers.pxi":1543 * * * cdef enum: # <<<<<<<<<<<<<< @@ -1344,7 +1344,7 @@ struct __pyx_opt_args_4lxml_5etree__adoptForeignDoc { int is_owned; }; -/* "src/lxml/apihelpers.pxi":350 +/* "src/lxml/apihelpers.pxi":345 * * * ctypedef struct _ns_node_ref: # <<<<<<<<<<<<<< @@ -22218,215 +22218,142 @@ static PyObject *__pyx_f_4lxml_5etree__iter_attrib(PyObject *__pyx_v_attrib) { __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; + int __pyx_t_3; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + int __pyx_t_5; PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; __Pyx_RefNannySetupContext("_iter_attrib", 0); /* "src/lxml/apihelpers.pxi":296 * """ - * # attrib will usually be a plain unordered dict - * if isinstance(attrib, dict): # <<<<<<<<<<<<<< - * if python.PY_VERSION_HEX >= 0x03060000: - * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - */ - __pyx_t_1 = PyDict_Check(__pyx_v_attrib); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "src/lxml/apihelpers.pxi":297 - * # attrib will usually be a plain unordered dict - * if isinstance(attrib, dict): - * if python.PY_VERSION_HEX >= 0x03060000: # <<<<<<<<<<<<<< - * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - * return attrib.items() - */ - __pyx_t_2 = ((PY_VERSION_HEX >= 0x03060000) != 0); - if (__pyx_t_2) { - - /* "src/lxml/apihelpers.pxi":299 - * if python.PY_VERSION_HEX >= 0x03060000: - * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - * return attrib.items() # <<<<<<<<<<<<<< - * return sorted(attrib.items()) - * elif isinstance(attrib, (_Attrib, OrderedDict)): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "src/lxml/apihelpers.pxi":297 - * # attrib will usually be a plain unordered dict - * if isinstance(attrib, dict): - * if python.PY_VERSION_HEX >= 0x03060000: # <<<<<<<<<<<<<< - * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - * return attrib.items() - */ - } - - /* "src/lxml/apihelpers.pxi":300 - * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - * return attrib.items() - * return sorted(attrib.items()) # <<<<<<<<<<<<<< - * elif isinstance(attrib, (_Attrib, OrderedDict)): + * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. + * if python.PY_VERSION_HEX >= 0x03060000 and isinstance(attrib, dict) or ( # <<<<<<<<<<<<<< + * isinstance(attrib, (_Attrib, OrderedDict))): * return attrib.items() */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 300, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 300, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 300, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_3 = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_7 = PyList_Sort(__pyx_t_3); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(5, 300, __pyx_L1_error) - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "src/lxml/apihelpers.pxi":296 - * """ - * # attrib will usually be a plain unordered dict - * if isinstance(attrib, dict): # <<<<<<<<<<<<<< - * if python.PY_VERSION_HEX >= 0x03060000: - * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. - */ + __pyx_t_2 = ((PY_VERSION_HEX >= 0x03060000) != 0); + if (!__pyx_t_2) { + goto __pyx_L5_next_or; + } else { } + __pyx_t_2 = PyDict_Check(__pyx_v_attrib); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_L5_next_or:; - /* "src/lxml/apihelpers.pxi":301 - * return attrib.items() - * return sorted(attrib.items()) - * elif isinstance(attrib, (_Attrib, OrderedDict)): # <<<<<<<<<<<<<< + /* "src/lxml/apihelpers.pxi":297 + * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. + * if python.PY_VERSION_HEX >= 0x03060000 and isinstance(attrib, dict) or ( + * isinstance(attrib, (_Attrib, OrderedDict))): # <<<<<<<<<<<<<< * return attrib.items() - * else: + * # assume it's an unordered mapping of some kind */ __Pyx_INCREF(__pyx_v_4lxml_5etree_OrderedDict); - __pyx_t_3 = __pyx_v_4lxml_5etree_OrderedDict; - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_attrib, __pyx_ptype_4lxml_5etree__Attrib); - __pyx_t_8 = (__pyx_t_1 != 0); - if (!__pyx_t_8) { + __pyx_t_4 = __pyx_v_4lxml_5etree_OrderedDict; + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_attrib, __pyx_ptype_4lxml_5etree__Attrib); + __pyx_t_5 = (__pyx_t_2 != 0); + if (!__pyx_t_5) { } else { - __pyx_t_2 = __pyx_t_8; - goto __pyx_L5_bool_binop_done; + __pyx_t_3 = __pyx_t_5; + goto __pyx_L7_bool_binop_done; } - __pyx_t_8 = PyObject_IsInstance(__pyx_v_attrib, __pyx_t_3); - __pyx_t_1 = (__pyx_t_8 != 0); - __pyx_t_2 = __pyx_t_1; - __pyx_L5_bool_binop_done:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = (__pyx_t_2 != 0); + __pyx_t_5 = PyObject_IsInstance(__pyx_v_attrib, __pyx_t_4); + __pyx_t_2 = (__pyx_t_5 != 0); + __pyx_t_3 = __pyx_t_2; + __pyx_L7_bool_binop_done:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + + /* "src/lxml/apihelpers.pxi":296 + * """ + * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. + * if python.PY_VERSION_HEX >= 0x03060000 and isinstance(attrib, dict) or ( # <<<<<<<<<<<<<< + * isinstance(attrib, (_Attrib, OrderedDict))): + * return attrib.items() + */ if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":302 - * return sorted(attrib.items()) - * elif isinstance(attrib, (_Attrib, OrderedDict)): + /* "src/lxml/apihelpers.pxi":298 + * if python.PY_VERSION_HEX >= 0x03060000 and isinstance(attrib, dict) or ( + * isinstance(attrib, (_Attrib, OrderedDict))): * return attrib.items() # <<<<<<<<<<<<<< - * else: - * # assume it's an unordered mapping of some kind + * # assume it's an unordered mapping of some kind + * return sorted(attrib.items()) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); + __Pyx_DECREF_SET(__pyx_t_6, function); } } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":301 - * return attrib.items() - * return sorted(attrib.items()) - * elif isinstance(attrib, (_Attrib, OrderedDict)): # <<<<<<<<<<<<<< + /* "src/lxml/apihelpers.pxi":296 + * """ + * # dicts are insertion-ordered in Py3.6+ => keep the user provided order. + * if python.PY_VERSION_HEX >= 0x03060000 and isinstance(attrib, dict) or ( # <<<<<<<<<<<<<< + * isinstance(attrib, (_Attrib, OrderedDict))): * return attrib.items() - * else: */ } - /* "src/lxml/apihelpers.pxi":305 - * else: - * # assume it's an unordered mapping of some kind - * return sorted(attrib.items()) # <<<<<<<<<<<<<< + /* "src/lxml/apihelpers.pxi":300 + * return attrib.items() + * # assume it's an unordered mapping of some kind + * return sorted(attrib.items()) # <<<<<<<<<<<<<< * * */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 305, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); } - __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 305, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 305, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_3 = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_7 = PyList_Sort(__pyx_t_3); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(5, 305, __pyx_L1_error) - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; } + __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PySequence_List(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_9 = PyList_Sort(__pyx_t_4); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 300, __pyx_L1_error) + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; /* "src/lxml/apihelpers.pxi":290 * @@ -22438,10 +22365,10 @@ static PyObject *__pyx_f_4lxml_5etree__iter_attrib(PyObject *__pyx_v_attrib) { /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("lxml.etree._iter_attrib", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -22450,7 +22377,7 @@ static PyObject *__pyx_f_4lxml_5etree__iter_attrib(PyObject *__pyx_v_attrib) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":308 +/* "src/lxml/apihelpers.pxi":303 * * * cdef _initNodeAttributes(xmlNode* c_node, _Document doc, attrib, dict extra): # <<<<<<<<<<<<<< @@ -22481,7 +22408,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod int __pyx_t_14; __Pyx_RefNannySetupContext("_initNodeAttributes", 0); - /* "src/lxml/apihelpers.pxi":313 + /* "src/lxml/apihelpers.pxi":308 * cdef bint is_html * cdef xmlNs* c_ns * if attrib is not None and not hasattr(attrib, u'items'): # <<<<<<<<<<<<<< @@ -22495,13 +22422,13 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } - __pyx_t_3 = __Pyx_HasAttr(__pyx_v_attrib, __pyx_n_u_items); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 313, __pyx_L1_error) + __pyx_t_3 = __Pyx_HasAttr(__pyx_v_attrib, __pyx_n_u_items); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 308, __pyx_L1_error) __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":314 + /* "src/lxml/apihelpers.pxi":309 * cdef xmlNs* c_ns * if attrib is not None and not hasattr(attrib, u'items'): * raise TypeError, f"Invalid attribute dictionary: {python._fqtypename(attrib).decode('utf8')}" # <<<<<<<<<<<<<< @@ -22509,16 +22436,16 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod * return # nothing to do */ __pyx_t_4 = _fqtypename(__pyx_v_attrib); - __pyx_t_5 = __Pyx_decode_c_string(__pyx_t_4, 0, strlen(__pyx_t_4), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 314, __pyx_L1_error) + __pyx_t_5 = __Pyx_decode_c_string(__pyx_t_4, 0, strlen(__pyx_t_4), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_attribute_dictionary, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 314, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_attribute_dictionary, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_6, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(5, 314, __pyx_L1_error) + __PYX_ERR(5, 309, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":313 + /* "src/lxml/apihelpers.pxi":308 * cdef bint is_html * cdef xmlNs* c_ns * if attrib is not None and not hasattr(attrib, u'items'): # <<<<<<<<<<<<<< @@ -22527,27 +22454,27 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":315 + /* "src/lxml/apihelpers.pxi":310 * if attrib is not None and not hasattr(attrib, u'items'): * raise TypeError, f"Invalid attribute dictionary: {python._fqtypename(attrib).decode('utf8')}" * if not attrib and not extra: # <<<<<<<<<<<<<< * return # nothing to do * is_html = doc._parser._for_html */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(5, 315, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(5, 310, __pyx_L1_error) __pyx_t_3 = ((!__pyx_t_2) != 0); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L7_bool_binop_done; } - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(5, 315, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(5, 310, __pyx_L1_error) __pyx_t_2 = ((!__pyx_t_3) != 0); __pyx_t_1 = __pyx_t_2; __pyx_L7_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":316 + /* "src/lxml/apihelpers.pxi":311 * raise TypeError, f"Invalid attribute dictionary: {python._fqtypename(attrib).decode('utf8')}" * if not attrib and not extra: * return # nothing to do # <<<<<<<<<<<<<< @@ -22558,7 +22485,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":315 + /* "src/lxml/apihelpers.pxi":310 * if attrib is not None and not hasattr(attrib, u'items'): * raise TypeError, f"Invalid attribute dictionary: {python._fqtypename(attrib).decode('utf8')}" * if not attrib and not extra: # <<<<<<<<<<<<<< @@ -22567,7 +22494,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":317 + /* "src/lxml/apihelpers.pxi":312 * if not attrib and not extra: * return # nothing to do * is_html = doc._parser._for_html # <<<<<<<<<<<<<< @@ -22577,29 +22504,29 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __pyx_t_1 = __pyx_v_doc->_parser->_for_html; __pyx_v_is_html = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":318 + /* "src/lxml/apihelpers.pxi":313 * return # nothing to do * is_html = doc._parser._for_html * seen = set() # <<<<<<<<<<<<<< * if extra: * if python.PY_VERSION_HEX >= 0x03060000: */ - __pyx_t_6 = PySet_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 318, __pyx_L1_error) + __pyx_t_6 = PySet_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_seen = ((PyObject*)__pyx_t_6); __pyx_t_6 = 0; - /* "src/lxml/apihelpers.pxi":319 + /* "src/lxml/apihelpers.pxi":314 * is_html = doc._parser._for_html * seen = set() * if extra: # <<<<<<<<<<<<<< * if python.PY_VERSION_HEX >= 0x03060000: * for name, value in extra.items(): */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 319, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 314, __pyx_L1_error) if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":320 + /* "src/lxml/apihelpers.pxi":315 * seen = set() * if extra: * if python.PY_VERSION_HEX >= 0x03060000: # <<<<<<<<<<<<<< @@ -22609,7 +22536,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((PY_VERSION_HEX >= 0x03060000) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":321 + /* "src/lxml/apihelpers.pxi":316 * if extra: * if python.PY_VERSION_HEX >= 0x03060000: * for name, value in extra.items(): # <<<<<<<<<<<<<< @@ -22618,17 +22545,17 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod */ if (unlikely(__pyx_v_extra == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(5, 321, __pyx_L1_error) + __PYX_ERR(5, 316, __pyx_L1_error) } - __pyx_t_6 = __Pyx_PyDict_Items(__pyx_v_extra); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyDict_Items(__pyx_v_extra); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) { __pyx_t_5 = __pyx_t_6; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 316, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; for (;;) { @@ -22636,17 +22563,17 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 316, __pyx_L1_error) #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 316, __pyx_L1_error) #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } @@ -22656,7 +22583,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 321, __pyx_L1_error) + else __PYX_ERR(5, 316, __pyx_L1_error) } break; } @@ -22668,7 +22595,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 321, __pyx_L1_error) + __PYX_ERR(5, 316, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -22681,15 +22608,15 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else - __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { Py_ssize_t index = -1; - __pyx_t_11 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 321, __pyx_L1_error) + __pyx_t_11 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; @@ -22697,7 +22624,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L13_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(5, 321, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(5, 316, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L14_unpacking_done; @@ -22705,7 +22632,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(5, 321, __pyx_L1_error) + __PYX_ERR(5, 316, __pyx_L1_error) __pyx_L14_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_9); @@ -22713,16 +22640,16 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_10); __pyx_t_10 = 0; - /* "src/lxml/apihelpers.pxi":322 + /* "src/lxml/apihelpers.pxi":317 * if python.PY_VERSION_HEX >= 0x03060000: * for name, value in extra.items(): * _addAttributeToNode(c_node, doc, is_html, name, value, seen) # <<<<<<<<<<<<<< * else: * for name, value in sorted(extra.items()): */ - __pyx_t_13 = __pyx_f_4lxml_5etree__addAttributeToNode(__pyx_v_c_node, __pyx_v_doc, __pyx_v_is_html, __pyx_v_name, __pyx_v_value, __pyx_v_seen); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(5, 322, __pyx_L1_error) + __pyx_t_13 = __pyx_f_4lxml_5etree__addAttributeToNode(__pyx_v_c_node, __pyx_v_doc, __pyx_v_is_html, __pyx_v_name, __pyx_v_value, __pyx_v_seen); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(5, 317, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":321 + /* "src/lxml/apihelpers.pxi":316 * if extra: * if python.PY_VERSION_HEX >= 0x03060000: * for name, value in extra.items(): # <<<<<<<<<<<<<< @@ -22732,7 +22659,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":320 + /* "src/lxml/apihelpers.pxi":315 * seen = set() * if extra: * if python.PY_VERSION_HEX >= 0x03060000: # <<<<<<<<<<<<<< @@ -22742,7 +22669,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod goto __pyx_L10; } - /* "src/lxml/apihelpers.pxi":324 + /* "src/lxml/apihelpers.pxi":319 * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * else: * for name, value in sorted(extra.items()): # <<<<<<<<<<<<<< @@ -22752,28 +22679,28 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod /*else*/ { if (unlikely(__pyx_v_extra == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(5, 324, __pyx_L1_error) + __PYX_ERR(5, 319, __pyx_L1_error) } - __pyx_t_6 = __Pyx_PyDict_Items(__pyx_v_extra); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyDict_Items(__pyx_v_extra); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = PySequence_List(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_10 = PySequence_List(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = ((PyObject*)__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_14 = PyList_Sort(__pyx_t_5); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_14 = PyList_Sort(__pyx_t_5); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(5, 319, __pyx_L1_error) if (unlikely(__pyx_t_5 == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(5, 324, __pyx_L1_error) + __PYX_ERR(5, 319, __pyx_L1_error) } __pyx_t_10 = __pyx_t_5; __Pyx_INCREF(__pyx_t_10); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; for (;;) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_10)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 319, __pyx_L1_error) #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_10, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_5 = PySequence_ITEM(__pyx_t_10, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { @@ -22782,7 +22709,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 324, __pyx_L1_error) + __PYX_ERR(5, 319, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -22795,15 +22722,15 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_9); #else - __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; - __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 324, __pyx_L1_error) + __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; @@ -22811,7 +22738,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L17_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(5, 324, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(5, 319, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L18_unpacking_done; @@ -22819,7 +22746,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(5, 324, __pyx_L1_error) + __PYX_ERR(5, 319, __pyx_L1_error) __pyx_L18_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); @@ -22827,16 +22754,16 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_9); __pyx_t_9 = 0; - /* "src/lxml/apihelpers.pxi":325 + /* "src/lxml/apihelpers.pxi":320 * else: * for name, value in sorted(extra.items()): * _addAttributeToNode(c_node, doc, is_html, name, value, seen) # <<<<<<<<<<<<<< * if attrib: * for name, value in _iter_attrib(attrib): */ - __pyx_t_13 = __pyx_f_4lxml_5etree__addAttributeToNode(__pyx_v_c_node, __pyx_v_doc, __pyx_v_is_html, __pyx_v_name, __pyx_v_value, __pyx_v_seen); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(5, 325, __pyx_L1_error) + __pyx_t_13 = __pyx_f_4lxml_5etree__addAttributeToNode(__pyx_v_c_node, __pyx_v_doc, __pyx_v_is_html, __pyx_v_name, __pyx_v_value, __pyx_v_seen); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(5, 320, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":324 + /* "src/lxml/apihelpers.pxi":319 * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * else: * for name, value in sorted(extra.items()): # <<<<<<<<<<<<<< @@ -22848,7 +22775,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod } __pyx_L10:; - /* "src/lxml/apihelpers.pxi":319 + /* "src/lxml/apihelpers.pxi":314 * is_html = doc._parser._for_html * seen = set() * if extra: # <<<<<<<<<<<<<< @@ -22857,32 +22784,32 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":326 + /* "src/lxml/apihelpers.pxi":321 * for name, value in sorted(extra.items()): * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * if attrib: # <<<<<<<<<<<<<< * for name, value in _iter_attrib(attrib): * _addAttributeToNode(c_node, doc, is_html, name, value, seen) */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 326, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 321, __pyx_L1_error) if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":327 + /* "src/lxml/apihelpers.pxi":322 * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * if attrib: * for name, value in _iter_attrib(attrib): # <<<<<<<<<<<<<< * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * */ - __pyx_t_10 = __pyx_f_4lxml_5etree__iter_attrib(__pyx_v_attrib); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_10 = __pyx_f_4lxml_5etree__iter_attrib(__pyx_v_attrib); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); if (likely(PyList_CheckExact(__pyx_t_10)) || PyTuple_CheckExact(__pyx_t_10)) { __pyx_t_5 = __pyx_t_10; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 322, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; for (;;) { @@ -22890,17 +22817,17 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_10 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_10); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_10 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_10); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 322, __pyx_L1_error) #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); #endif } else { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_10); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_10); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 322, __pyx_L1_error) #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_10 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); #endif } @@ -22910,7 +22837,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 327, __pyx_L1_error) + else __PYX_ERR(5, 322, __pyx_L1_error) } break; } @@ -22922,7 +22849,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 327, __pyx_L1_error) + __PYX_ERR(5, 322, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -22935,15 +22862,15 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_6); #else - __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { Py_ssize_t index = -1; - __pyx_t_11 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 327, __pyx_L1_error) + __pyx_t_11 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; @@ -22951,7 +22878,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L22_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(5, 327, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(5, 322, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L23_unpacking_done; @@ -22959,7 +22886,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(5, 327, __pyx_L1_error) + __PYX_ERR(5, 322, __pyx_L1_error) __pyx_L23_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_9); @@ -22967,16 +22894,16 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6); __pyx_t_6 = 0; - /* "src/lxml/apihelpers.pxi":328 + /* "src/lxml/apihelpers.pxi":323 * if attrib: * for name, value in _iter_attrib(attrib): * _addAttributeToNode(c_node, doc, is_html, name, value, seen) # <<<<<<<<<<<<<< * * */ - __pyx_t_13 = __pyx_f_4lxml_5etree__addAttributeToNode(__pyx_v_c_node, __pyx_v_doc, __pyx_v_is_html, __pyx_v_name, __pyx_v_value, __pyx_v_seen); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(5, 328, __pyx_L1_error) + __pyx_t_13 = __pyx_f_4lxml_5etree__addAttributeToNode(__pyx_v_c_node, __pyx_v_doc, __pyx_v_is_html, __pyx_v_name, __pyx_v_value, __pyx_v_seen); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(5, 323, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":327 + /* "src/lxml/apihelpers.pxi":322 * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * if attrib: * for name, value in _iter_attrib(attrib): # <<<<<<<<<<<<<< @@ -22986,7 +22913,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":326 + /* "src/lxml/apihelpers.pxi":321 * for name, value in sorted(extra.items()): * _addAttributeToNode(c_node, doc, is_html, name, value, seen) * if attrib: # <<<<<<<<<<<<<< @@ -22995,7 +22922,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":308 + /* "src/lxml/apihelpers.pxi":303 * * * cdef _initNodeAttributes(xmlNode* c_node, _Document doc, attrib, dict extra): # <<<<<<<<<<<<<< @@ -23023,7 +22950,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod return __pyx_r; } -/* "src/lxml/apihelpers.pxi":331 +/* "src/lxml/apihelpers.pxi":326 * * * cdef int _addAttributeToNode(xmlNode* c_node, _Document doc, bint is_html, # <<<<<<<<<<<<<< @@ -23049,14 +22976,14 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str xmlNs *__pyx_t_8; __Pyx_RefNannySetupContext("_addAttributeToNode", 0); - /* "src/lxml/apihelpers.pxi":333 + /* "src/lxml/apihelpers.pxi":328 * cdef int _addAttributeToNode(xmlNode* c_node, _Document doc, bint is_html, * name, value, set seen_tags) except -1: * ns_utf, name_utf = tag = _getNsTag(name) # <<<<<<<<<<<<<< * if tag in seen_tags: * return 0 */ - __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 333, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; @@ -23064,7 +22991,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 333, __pyx_L1_error) + __PYX_ERR(5, 328, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); @@ -23072,13 +22999,13 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 333, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 333, __pyx_L1_error) + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 333, __pyx_L1_error) + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 328, __pyx_L1_error) } __pyx_v_ns_utf = __pyx_t_2; __pyx_t_2 = 0; @@ -23088,7 +23015,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str __pyx_v_tag = ((PyObject*)__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":334 + /* "src/lxml/apihelpers.pxi":329 * name, value, set seen_tags) except -1: * ns_utf, name_utf = tag = _getNsTag(name) * if tag in seen_tags: # <<<<<<<<<<<<<< @@ -23097,13 +23024,13 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str */ if (unlikely(__pyx_v_seen_tags == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(5, 334, __pyx_L1_error) + __PYX_ERR(5, 329, __pyx_L1_error) } - __pyx_t_4 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_seen_tags, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(5, 334, __pyx_L1_error) + __pyx_t_4 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_seen_tags, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(5, 329, __pyx_L1_error) __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { - /* "src/lxml/apihelpers.pxi":335 + /* "src/lxml/apihelpers.pxi":330 * ns_utf, name_utf = tag = _getNsTag(name) * if tag in seen_tags: * return 0 # <<<<<<<<<<<<<< @@ -23113,7 +23040,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":334 + /* "src/lxml/apihelpers.pxi":329 * name, value, set seen_tags) except -1: * ns_utf, name_utf = tag = _getNsTag(name) * if tag in seen_tags: # <<<<<<<<<<<<<< @@ -23122,7 +23049,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str */ } - /* "src/lxml/apihelpers.pxi":336 + /* "src/lxml/apihelpers.pxi":331 * if tag in seen_tags: * return 0 * seen_tags.add(tag) # <<<<<<<<<<<<<< @@ -23131,11 +23058,11 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str */ if (unlikely(__pyx_v_seen_tags == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add"); - __PYX_ERR(5, 336, __pyx_L1_error) + __PYX_ERR(5, 331, __pyx_L1_error) } - __pyx_t_6 = PySet_Add(__pyx_v_seen_tags, __pyx_v_tag); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 336, __pyx_L1_error) + __pyx_t_6 = PySet_Add(__pyx_v_seen_tags, __pyx_v_tag); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 331, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":337 + /* "src/lxml/apihelpers.pxi":332 * return 0 * seen_tags.add(tag) * if not is_html: # <<<<<<<<<<<<<< @@ -23145,16 +23072,16 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str __pyx_t_5 = ((!(__pyx_v_is_html != 0)) != 0); if (__pyx_t_5) { - /* "src/lxml/apihelpers.pxi":338 + /* "src/lxml/apihelpers.pxi":333 * seen_tags.add(tag) * if not is_html: * _attributeValidOrRaise(name_utf) # <<<<<<<<<<<<<< * value_utf = _utf8(value) * if ns_utf is None: */ - __pyx_t_7 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(5, 338, __pyx_L1_error) + __pyx_t_7 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(5, 333, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":337 + /* "src/lxml/apihelpers.pxi":332 * return 0 * seen_tags.add(tag) * if not is_html: # <<<<<<<<<<<<<< @@ -23163,19 +23090,19 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str */ } - /* "src/lxml/apihelpers.pxi":339 + /* "src/lxml/apihelpers.pxi":334 * if not is_html: * _attributeValidOrRaise(name_utf) * value_utf = _utf8(value) # <<<<<<<<<<<<<< * if ns_utf is None: * tree.xmlNewProp(c_node, _xcstr(name_utf), _xcstr(value_utf)) */ - __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 339, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 334, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_value_utf = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":340 + /* "src/lxml/apihelpers.pxi":335 * _attributeValidOrRaise(name_utf) * value_utf = _utf8(value) * if ns_utf is None: # <<<<<<<<<<<<<< @@ -23186,7 +23113,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { - /* "src/lxml/apihelpers.pxi":341 + /* "src/lxml/apihelpers.pxi":336 * value_utf = _utf8(value) * if ns_utf is None: * tree.xmlNewProp(c_node, _xcstr(name_utf), _xcstr(value_utf)) # <<<<<<<<<<<<<< @@ -23195,7 +23122,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str */ (void)(xmlNewProp(__pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_name_utf), (const xmlChar*)PyBytes_AS_STRING(__pyx_v_value_utf))); - /* "src/lxml/apihelpers.pxi":340 + /* "src/lxml/apihelpers.pxi":335 * _attributeValidOrRaise(name_utf) * value_utf = _utf8(value) * if ns_utf is None: # <<<<<<<<<<<<<< @@ -23205,7 +23132,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str goto __pyx_L5; } - /* "src/lxml/apihelpers.pxi":343 + /* "src/lxml/apihelpers.pxi":338 * tree.xmlNewProp(c_node, _xcstr(name_utf), _xcstr(value_utf)) * else: * _uriValidOrRaise(ns_utf) # <<<<<<<<<<<<<< @@ -23213,19 +23140,19 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str * tree.xmlNewNsProp(c_node, c_ns, */ /*else*/ { - __pyx_t_7 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_ns_utf); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(5, 343, __pyx_L1_error) + __pyx_t_7 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_ns_utf); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(5, 338, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":344 + /* "src/lxml/apihelpers.pxi":339 * else: * _uriValidOrRaise(ns_utf) * c_ns = doc._findOrBuildNodeNs(c_node, _xcstr(ns_utf), NULL, 1) # <<<<<<<<<<<<<< * tree.xmlNewNsProp(c_node, c_ns, * _xcstr(name_utf), _xcstr(value_utf)) */ - __pyx_t_8 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns_utf), NULL, 1); if (unlikely(__pyx_t_8 == ((xmlNs *)NULL))) __PYX_ERR(5, 344, __pyx_L1_error) + __pyx_t_8 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns_utf), NULL, 1); if (unlikely(__pyx_t_8 == ((xmlNs *)NULL))) __PYX_ERR(5, 339, __pyx_L1_error) __pyx_v_c_ns = __pyx_t_8; - /* "src/lxml/apihelpers.pxi":345 + /* "src/lxml/apihelpers.pxi":340 * _uriValidOrRaise(ns_utf) * c_ns = doc._findOrBuildNodeNs(c_node, _xcstr(ns_utf), NULL, 1) * tree.xmlNewNsProp(c_node, c_ns, # <<<<<<<<<<<<<< @@ -23236,7 +23163,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str } __pyx_L5:; - /* "src/lxml/apihelpers.pxi":347 + /* "src/lxml/apihelpers.pxi":342 * tree.xmlNewNsProp(c_node, c_ns, * _xcstr(name_utf), _xcstr(value_utf)) * return 0 # <<<<<<<<<<<<<< @@ -23246,7 +23173,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":331 + /* "src/lxml/apihelpers.pxi":326 * * * cdef int _addAttributeToNode(xmlNode* c_node, _Document doc, bint is_html, # <<<<<<<<<<<<<< @@ -23270,7 +23197,7 @@ static int __pyx_f_4lxml_5etree__addAttributeToNode(xmlNode *__pyx_v_c_node, str return __pyx_r; } -/* "src/lxml/apihelpers.pxi":355 +/* "src/lxml/apihelpers.pxi":350 * * * cdef int _collectNsDefs(xmlNode* c_element, _ns_node_ref **_c_ns_list, # <<<<<<<<<<<<<< @@ -23291,7 +23218,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_4lxml_5etree__ns_node_ref __pyx_t_3; __Pyx_RefNannySetupContext("_collectNsDefs", 0); - /* "src/lxml/apihelpers.pxi":357 + /* "src/lxml/apihelpers.pxi":352 * cdef int _collectNsDefs(xmlNode* c_element, _ns_node_ref **_c_ns_list, * size_t *_c_ns_list_len, size_t *_c_ns_list_size) except -1: * c_ns_list = _c_ns_list[0] # <<<<<<<<<<<<<< @@ -23300,7 +23227,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_ns_list = (__pyx_v__c_ns_list[0]); - /* "src/lxml/apihelpers.pxi":358 + /* "src/lxml/apihelpers.pxi":353 * size_t *_c_ns_list_len, size_t *_c_ns_list_size) except -1: * c_ns_list = _c_ns_list[0] * cdef size_t c_ns_list_len = _c_ns_list_len[0] # <<<<<<<<<<<<<< @@ -23309,7 +23236,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_ns_list_len = (__pyx_v__c_ns_list_len[0]); - /* "src/lxml/apihelpers.pxi":359 + /* "src/lxml/apihelpers.pxi":354 * c_ns_list = _c_ns_list[0] * cdef size_t c_ns_list_len = _c_ns_list_len[0] * cdef size_t c_ns_list_size = _c_ns_list_size[0] # <<<<<<<<<<<<<< @@ -23318,7 +23245,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_ns_list_size = (__pyx_v__c_ns_list_size[0]); - /* "src/lxml/apihelpers.pxi":361 + /* "src/lxml/apihelpers.pxi":356 * cdef size_t c_ns_list_size = _c_ns_list_size[0] * * c_nsdef = c_element.nsDef # <<<<<<<<<<<<<< @@ -23328,7 +23255,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_1 = __pyx_v_c_element->nsDef; __pyx_v_c_nsdef = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":362 + /* "src/lxml/apihelpers.pxi":357 * * c_nsdef = c_element.nsDef * while c_nsdef is not NULL: # <<<<<<<<<<<<<< @@ -23339,7 +23266,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_2 = ((__pyx_v_c_nsdef != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":363 + /* "src/lxml/apihelpers.pxi":358 * c_nsdef = c_element.nsDef * while c_nsdef is not NULL: * if c_ns_list_len >= c_ns_list_size: # <<<<<<<<<<<<<< @@ -23349,7 +23276,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_2 = ((__pyx_v_c_ns_list_len >= __pyx_v_c_ns_list_size) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":364 + /* "src/lxml/apihelpers.pxi":359 * while c_nsdef is not NULL: * if c_ns_list_len >= c_ns_list_size: * if c_ns_list is NULL: # <<<<<<<<<<<<<< @@ -23359,7 +23286,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_2 = ((__pyx_v_c_ns_list == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":365 + /* "src/lxml/apihelpers.pxi":360 * if c_ns_list_len >= c_ns_list_size: * if c_ns_list is NULL: * c_ns_list_size = 20 # <<<<<<<<<<<<<< @@ -23368,7 +23295,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_ns_list_size = 20; - /* "src/lxml/apihelpers.pxi":364 + /* "src/lxml/apihelpers.pxi":359 * while c_nsdef is not NULL: * if c_ns_list_len >= c_ns_list_size: * if c_ns_list is NULL: # <<<<<<<<<<<<<< @@ -23378,7 +23305,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx goto __pyx_L6; } - /* "src/lxml/apihelpers.pxi":367 + /* "src/lxml/apihelpers.pxi":362 * c_ns_list_size = 20 * else: * c_ns_list_size *= 2 # <<<<<<<<<<<<<< @@ -23390,7 +23317,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx } __pyx_L6:; - /* "src/lxml/apihelpers.pxi":368 + /* "src/lxml/apihelpers.pxi":363 * else: * c_ns_list_size *= 2 * c_nsref_ptr = <_ns_node_ref*> python.lxml_realloc( # <<<<<<<<<<<<<< @@ -23399,7 +23326,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_nsref_ptr = ((__pyx_t_4lxml_5etree__ns_node_ref *)lxml_realloc(__pyx_v_c_ns_list, __pyx_v_c_ns_list_size, (sizeof(__pyx_t_4lxml_5etree__ns_node_ref)))); - /* "src/lxml/apihelpers.pxi":370 + /* "src/lxml/apihelpers.pxi":365 * c_nsref_ptr = <_ns_node_ref*> python.lxml_realloc( * c_ns_list, c_ns_list_size, sizeof(_ns_node_ref)) * if c_nsref_ptr is NULL: # <<<<<<<<<<<<<< @@ -23409,7 +23336,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_2 = ((__pyx_v_c_nsref_ptr == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":371 + /* "src/lxml/apihelpers.pxi":366 * c_ns_list, c_ns_list_size, sizeof(_ns_node_ref)) * if c_nsref_ptr is NULL: * if c_ns_list is not NULL: # <<<<<<<<<<<<<< @@ -23419,7 +23346,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_2 = ((__pyx_v_c_ns_list != NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":372 + /* "src/lxml/apihelpers.pxi":367 * if c_nsref_ptr is NULL: * if c_ns_list is not NULL: * python.lxml_free(c_ns_list) # <<<<<<<<<<<<<< @@ -23428,7 +23355,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ lxml_free(__pyx_v_c_ns_list); - /* "src/lxml/apihelpers.pxi":373 + /* "src/lxml/apihelpers.pxi":368 * if c_ns_list is not NULL: * python.lxml_free(c_ns_list) * _c_ns_list[0] = NULL # <<<<<<<<<<<<<< @@ -23437,7 +23364,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ (__pyx_v__c_ns_list[0]) = NULL; - /* "src/lxml/apihelpers.pxi":371 + /* "src/lxml/apihelpers.pxi":366 * c_ns_list, c_ns_list_size, sizeof(_ns_node_ref)) * if c_nsref_ptr is NULL: * if c_ns_list is not NULL: # <<<<<<<<<<<<<< @@ -23446,16 +23373,16 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ } - /* "src/lxml/apihelpers.pxi":374 + /* "src/lxml/apihelpers.pxi":369 * python.lxml_free(c_ns_list) * _c_ns_list[0] = NULL * raise MemoryError() # <<<<<<<<<<<<<< * c_ns_list = c_nsref_ptr * */ - PyErr_NoMemory(); __PYX_ERR(5, 374, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(5, 369, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":370 + /* "src/lxml/apihelpers.pxi":365 * c_nsref_ptr = <_ns_node_ref*> python.lxml_realloc( * c_ns_list, c_ns_list_size, sizeof(_ns_node_ref)) * if c_nsref_ptr is NULL: # <<<<<<<<<<<<<< @@ -23464,7 +23391,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ } - /* "src/lxml/apihelpers.pxi":375 + /* "src/lxml/apihelpers.pxi":370 * _c_ns_list[0] = NULL * raise MemoryError() * c_ns_list = c_nsref_ptr # <<<<<<<<<<<<<< @@ -23473,7 +23400,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_ns_list = __pyx_v_c_nsref_ptr; - /* "src/lxml/apihelpers.pxi":363 + /* "src/lxml/apihelpers.pxi":358 * c_nsdef = c_element.nsDef * while c_nsdef is not NULL: * if c_ns_list_len >= c_ns_list_size: # <<<<<<<<<<<<<< @@ -23482,7 +23409,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ } - /* "src/lxml/apihelpers.pxi":377 + /* "src/lxml/apihelpers.pxi":372 * c_ns_list = c_nsref_ptr * * c_ns_list[c_ns_list_len] = _ns_node_ref(c_nsdef, c_element) # <<<<<<<<<<<<<< @@ -23493,7 +23420,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_t_3.node = __pyx_v_c_element; (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]) = __pyx_t_3; - /* "src/lxml/apihelpers.pxi":378 + /* "src/lxml/apihelpers.pxi":373 * * c_ns_list[c_ns_list_len] = _ns_node_ref(c_nsdef, c_element) * c_ns_list_len += 1 # <<<<<<<<<<<<<< @@ -23502,7 +23429,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ __pyx_v_c_ns_list_len = (__pyx_v_c_ns_list_len + 1); - /* "src/lxml/apihelpers.pxi":379 + /* "src/lxml/apihelpers.pxi":374 * c_ns_list[c_ns_list_len] = _ns_node_ref(c_nsdef, c_element) * c_ns_list_len += 1 * c_nsdef = c_nsdef.next # <<<<<<<<<<<<<< @@ -23513,7 +23440,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx __pyx_v_c_nsdef = __pyx_t_1; } - /* "src/lxml/apihelpers.pxi":381 + /* "src/lxml/apihelpers.pxi":376 * c_nsdef = c_nsdef.next * * _c_ns_list_size[0] = c_ns_list_size # <<<<<<<<<<<<<< @@ -23522,7 +23449,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ (__pyx_v__c_ns_list_size[0]) = __pyx_v_c_ns_list_size; - /* "src/lxml/apihelpers.pxi":382 + /* "src/lxml/apihelpers.pxi":377 * * _c_ns_list_size[0] = c_ns_list_size * _c_ns_list_len[0] = c_ns_list_len # <<<<<<<<<<<<<< @@ -23531,7 +23458,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ (__pyx_v__c_ns_list_len[0]) = __pyx_v_c_ns_list_len; - /* "src/lxml/apihelpers.pxi":383 + /* "src/lxml/apihelpers.pxi":378 * _c_ns_list_size[0] = c_ns_list_size * _c_ns_list_len[0] = c_ns_list_len * _c_ns_list[0] = c_ns_list # <<<<<<<<<<<<<< @@ -23540,7 +23467,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx */ (__pyx_v__c_ns_list[0]) = __pyx_v_c_ns_list; - /* "src/lxml/apihelpers.pxi":355 + /* "src/lxml/apihelpers.pxi":350 * * * cdef int _collectNsDefs(xmlNode* c_element, _ns_node_ref **_c_ns_list, # <<<<<<<<<<<<<< @@ -23559,7 +23486,7 @@ static int __pyx_f_4lxml_5etree__collectNsDefs(xmlNode *__pyx_v_c_element, __pyx return __pyx_r; } -/* "src/lxml/apihelpers.pxi":386 +/* "src/lxml/apihelpers.pxi":381 * * * cdef int _removeUnusedNamespaceDeclarations(xmlNode* c_element, set prefixes_to_keep) except -1: # <<<<<<<<<<<<<< @@ -23588,7 +23515,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py xmlNs *__pyx_t_10; __Pyx_RefNannySetupContext("_removeUnusedNamespaceDeclarations", 0); - /* "src/lxml/apihelpers.pxi":394 + /* "src/lxml/apihelpers.pxi":389 * """ * cdef xmlNode* c_node * cdef _ns_node_ref* c_ns_list = NULL # <<<<<<<<<<<<<< @@ -23597,7 +23524,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ __pyx_v_c_ns_list = NULL; - /* "src/lxml/apihelpers.pxi":395 + /* "src/lxml/apihelpers.pxi":390 * cdef xmlNode* c_node * cdef _ns_node_ref* c_ns_list = NULL * cdef size_t c_ns_list_size = 0 # <<<<<<<<<<<<<< @@ -23606,7 +23533,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ __pyx_v_c_ns_list_size = 0; - /* "src/lxml/apihelpers.pxi":396 + /* "src/lxml/apihelpers.pxi":391 * cdef _ns_node_ref* c_ns_list = NULL * cdef size_t c_ns_list_size = 0 * cdef size_t c_ns_list_len = 0 # <<<<<<<<<<<<<< @@ -23615,7 +23542,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ __pyx_v_c_ns_list_len = 0; - /* "src/lxml/apihelpers.pxi":399 + /* "src/lxml/apihelpers.pxi":394 * cdef size_t i * * if c_element.parent and c_element.parent.type == tree.XML_DOCUMENT_NODE: # <<<<<<<<<<<<<< @@ -23633,16 +23560,16 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":401 + /* "src/lxml/apihelpers.pxi":396 * if c_element.parent and c_element.parent.type == tree.XML_DOCUMENT_NODE: * # include declarations on the document node * _collectNsDefs(c_element.parent, &c_ns_list, &c_ns_list_len, &c_ns_list_size) # <<<<<<<<<<<<<< * * tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_element, c_element, 1) */ - __pyx_t_3 = __pyx_f_4lxml_5etree__collectNsDefs(__pyx_v_c_element->parent, (&__pyx_v_c_ns_list), (&__pyx_v_c_ns_list_len), (&__pyx_v_c_ns_list_size)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 401, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__collectNsDefs(__pyx_v_c_element->parent, (&__pyx_v_c_ns_list), (&__pyx_v_c_ns_list_len), (&__pyx_v_c_ns_list_size)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 396, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":399 + /* "src/lxml/apihelpers.pxi":394 * cdef size_t i * * if c_element.parent and c_element.parent.type == tree.XML_DOCUMENT_NODE: # <<<<<<<<<<<<<< @@ -23651,7 +23578,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":403 + /* "src/lxml/apihelpers.pxi":398 * _collectNsDefs(c_element.parent, &c_ns_list, &c_ns_list_len, &c_ns_list_size) * * tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_element, c_element, 1) # <<<<<<<<<<<<<< @@ -23660,7 +23587,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ BEGIN_FOR_EACH_ELEMENT_FROM(__pyx_v_c_element, __pyx_v_c_element, 1); - /* "src/lxml/apihelpers.pxi":405 + /* "src/lxml/apihelpers.pxi":400 * tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_element, c_element, 1) * # collect all new namespace declarations into the ns list * if c_element.nsDef: # <<<<<<<<<<<<<< @@ -23670,16 +23597,16 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_1 = (__pyx_v_c_element->nsDef != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":406 + /* "src/lxml/apihelpers.pxi":401 * # collect all new namespace declarations into the ns list * if c_element.nsDef: * _collectNsDefs(c_element, &c_ns_list, &c_ns_list_len, &c_ns_list_size) # <<<<<<<<<<<<<< * * # remove all namespace declarations from the list that are referenced */ - __pyx_t_3 = __pyx_f_4lxml_5etree__collectNsDefs(__pyx_v_c_element, (&__pyx_v_c_ns_list), (&__pyx_v_c_ns_list_len), (&__pyx_v_c_ns_list_size)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 406, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__collectNsDefs(__pyx_v_c_element, (&__pyx_v_c_ns_list), (&__pyx_v_c_ns_list_len), (&__pyx_v_c_ns_list_size)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 401, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":405 + /* "src/lxml/apihelpers.pxi":400 * tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_element, c_element, 1) * # collect all new namespace declarations into the ns list * if c_element.nsDef: # <<<<<<<<<<<<<< @@ -23688,7 +23615,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":409 + /* "src/lxml/apihelpers.pxi":404 * * # remove all namespace declarations from the list that are referenced * if c_ns_list_len and c_element.type == tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -23706,7 +23633,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_L8_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":410 + /* "src/lxml/apihelpers.pxi":405 * # remove all namespace declarations from the list that are referenced * if c_ns_list_len and c_element.type == tree.XML_ELEMENT_NODE: * c_node = c_element # <<<<<<<<<<<<<< @@ -23715,7 +23642,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ __pyx_v_c_node = __pyx_v_c_element; - /* "src/lxml/apihelpers.pxi":411 + /* "src/lxml/apihelpers.pxi":406 * if c_ns_list_len and c_element.type == tree.XML_ELEMENT_NODE: * c_node = c_element * while c_node and c_ns_list_len: # <<<<<<<<<<<<<< @@ -23734,7 +23661,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_L12_bool_binop_done:; if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":412 + /* "src/lxml/apihelpers.pxi":407 * c_node = c_element * while c_node and c_ns_list_len: * if c_node.ns: # <<<<<<<<<<<<<< @@ -23744,7 +23671,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_1 = (__pyx_v_c_node->ns != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":413 + /* "src/lxml/apihelpers.pxi":408 * while c_node and c_ns_list_len: * if c_node.ns: * for i in range(c_ns_list_len): # <<<<<<<<<<<<<< @@ -23756,7 +23683,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; - /* "src/lxml/apihelpers.pxi":414 + /* "src/lxml/apihelpers.pxi":409 * if c_node.ns: * for i in range(c_ns_list_len): * if c_node.ns is c_ns_list[i].ns: # <<<<<<<<<<<<<< @@ -23766,7 +23693,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_1 = ((__pyx_v_c_node->ns == (__pyx_v_c_ns_list[__pyx_v_i]).ns) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":415 + /* "src/lxml/apihelpers.pxi":410 * for i in range(c_ns_list_len): * if c_node.ns is c_ns_list[i].ns: * c_ns_list_len -= 1 # <<<<<<<<<<<<<< @@ -23775,7 +23702,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ __pyx_v_c_ns_list_len = (__pyx_v_c_ns_list_len - 1); - /* "src/lxml/apihelpers.pxi":416 + /* "src/lxml/apihelpers.pxi":411 * if c_node.ns is c_ns_list[i].ns: * c_ns_list_len -= 1 * c_ns_list[i] = c_ns_list[c_ns_list_len] # <<<<<<<<<<<<<< @@ -23784,7 +23711,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ (__pyx_v_c_ns_list[__pyx_v_i]) = (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]); - /* "src/lxml/apihelpers.pxi":418 + /* "src/lxml/apihelpers.pxi":413 * c_ns_list[i] = c_ns_list[c_ns_list_len] * #c_ns_list[c_ns_list_len] = _ns_node_ref(NULL, NULL) * break # <<<<<<<<<<<<<< @@ -23793,7 +23720,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ goto __pyx_L16_break; - /* "src/lxml/apihelpers.pxi":414 + /* "src/lxml/apihelpers.pxi":409 * if c_node.ns: * for i in range(c_ns_list_len): * if c_node.ns is c_ns_list[i].ns: # <<<<<<<<<<<<<< @@ -23804,7 +23731,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py } __pyx_L16_break:; - /* "src/lxml/apihelpers.pxi":412 + /* "src/lxml/apihelpers.pxi":407 * c_node = c_element * while c_node and c_ns_list_len: * if c_node.ns: # <<<<<<<<<<<<<< @@ -23813,7 +23740,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":419 + /* "src/lxml/apihelpers.pxi":414 * #c_ns_list[c_ns_list_len] = _ns_node_ref(NULL, NULL) * break * if c_node is c_element: # <<<<<<<<<<<<<< @@ -23823,7 +23750,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_1 = ((__pyx_v_c_node == __pyx_v_c_element) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":421 + /* "src/lxml/apihelpers.pxi":416 * if c_node is c_element: * # continue with attributes * c_node = c_element.properties # <<<<<<<<<<<<<< @@ -23832,7 +23759,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ __pyx_v_c_node = ((xmlNode *)__pyx_v_c_element->properties); - /* "src/lxml/apihelpers.pxi":419 + /* "src/lxml/apihelpers.pxi":414 * #c_ns_list[c_ns_list_len] = _ns_node_ref(NULL, NULL) * break * if c_node is c_element: # <<<<<<<<<<<<<< @@ -23842,7 +23769,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py goto __pyx_L18; } - /* "src/lxml/apihelpers.pxi":423 + /* "src/lxml/apihelpers.pxi":418 * c_node = c_element.properties * else: * c_node = c_node.next # <<<<<<<<<<<<<< @@ -23856,7 +23783,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_L18:; } - /* "src/lxml/apihelpers.pxi":409 + /* "src/lxml/apihelpers.pxi":404 * * # remove all namespace declarations from the list that are referenced * if c_ns_list_len and c_element.type == tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -23865,7 +23792,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":424 + /* "src/lxml/apihelpers.pxi":419 * else: * c_node = c_node.next * tree.END_FOR_EACH_ELEMENT_FROM(c_element) # <<<<<<<<<<<<<< @@ -23874,7 +23801,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_element); - /* "src/lxml/apihelpers.pxi":426 + /* "src/lxml/apihelpers.pxi":421 * tree.END_FOR_EACH_ELEMENT_FROM(c_element) * * if c_ns_list is NULL: # <<<<<<<<<<<<<< @@ -23884,7 +23811,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_1 = ((__pyx_v_c_ns_list == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":427 + /* "src/lxml/apihelpers.pxi":422 * * if c_ns_list is NULL: * return 0 # <<<<<<<<<<<<<< @@ -23894,7 +23821,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":426 + /* "src/lxml/apihelpers.pxi":421 * tree.END_FOR_EACH_ELEMENT_FROM(c_element) * * if c_ns_list is NULL: # <<<<<<<<<<<<<< @@ -23903,7 +23830,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":432 + /* "src/lxml/apihelpers.pxi":427 * # except for those we should keep explicitly * cdef xmlNs* c_nsdef * for i in range(c_ns_list_len): # <<<<<<<<<<<<<< @@ -23915,7 +23842,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; - /* "src/lxml/apihelpers.pxi":433 + /* "src/lxml/apihelpers.pxi":428 * cdef xmlNs* c_nsdef * for i in range(c_ns_list_len): * if prefixes_to_keep is not None: # <<<<<<<<<<<<<< @@ -23926,7 +23853,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":434 + /* "src/lxml/apihelpers.pxi":429 * for i in range(c_ns_list_len): * if prefixes_to_keep is not None: * if c_ns_list[i].ns.prefix and c_ns_list[i].ns.prefix in prefixes_to_keep: # <<<<<<<<<<<<<< @@ -23939,20 +23866,20 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_2 = __pyx_t_1; goto __pyx_L24_bool_binop_done; } - __pyx_t_8 = __Pyx_PyBytes_FromCString((__pyx_v_c_ns_list[__pyx_v_i]).ns->prefix); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 434, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyBytes_FromCString((__pyx_v_c_ns_list[__pyx_v_i]).ns->prefix); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (unlikely(__pyx_v_prefixes_to_keep == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(5, 434, __pyx_L1_error) + __PYX_ERR(5, 429, __pyx_L1_error) } - __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_t_8, __pyx_v_prefixes_to_keep, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 434, __pyx_L1_error) + __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_t_8, __pyx_v_prefixes_to_keep, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 429, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = (__pyx_t_1 != 0); __pyx_t_2 = __pyx_t_9; __pyx_L24_bool_binop_done:; if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":435 + /* "src/lxml/apihelpers.pxi":430 * if prefixes_to_keep is not None: * if c_ns_list[i].ns.prefix and c_ns_list[i].ns.prefix in prefixes_to_keep: * continue # <<<<<<<<<<<<<< @@ -23961,7 +23888,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ goto __pyx_L20_continue; - /* "src/lxml/apihelpers.pxi":434 + /* "src/lxml/apihelpers.pxi":429 * for i in range(c_ns_list_len): * if prefixes_to_keep is not None: * if c_ns_list[i].ns.prefix and c_ns_list[i].ns.prefix in prefixes_to_keep: # <<<<<<<<<<<<<< @@ -23970,7 +23897,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":433 + /* "src/lxml/apihelpers.pxi":428 * cdef xmlNs* c_nsdef * for i in range(c_ns_list_len): * if prefixes_to_keep is not None: # <<<<<<<<<<<<<< @@ -23979,7 +23906,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":436 + /* "src/lxml/apihelpers.pxi":431 * if c_ns_list[i].ns.prefix and c_ns_list[i].ns.prefix in prefixes_to_keep: * continue * c_node = c_ns_list[i].node # <<<<<<<<<<<<<< @@ -23989,7 +23916,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_7 = (__pyx_v_c_ns_list[__pyx_v_i]).node; __pyx_v_c_node = __pyx_t_7; - /* "src/lxml/apihelpers.pxi":437 + /* "src/lxml/apihelpers.pxi":432 * continue * c_node = c_ns_list[i].node * c_nsdef = c_node.nsDef # <<<<<<<<<<<<<< @@ -23999,7 +23926,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_10 = __pyx_v_c_node->nsDef; __pyx_v_c_nsdef = __pyx_t_10; - /* "src/lxml/apihelpers.pxi":438 + /* "src/lxml/apihelpers.pxi":433 * c_node = c_ns_list[i].node * c_nsdef = c_node.nsDef * if c_nsdef is c_ns_list[i].ns: # <<<<<<<<<<<<<< @@ -24009,7 +23936,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_2 = ((__pyx_v_c_nsdef == (__pyx_v_c_ns_list[__pyx_v_i]).ns) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":439 + /* "src/lxml/apihelpers.pxi":434 * c_nsdef = c_node.nsDef * if c_nsdef is c_ns_list[i].ns: * c_node.nsDef = c_node.nsDef.next # <<<<<<<<<<<<<< @@ -24019,7 +23946,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_10 = __pyx_v_c_node->nsDef->next; __pyx_v_c_node->nsDef = __pyx_t_10; - /* "src/lxml/apihelpers.pxi":438 + /* "src/lxml/apihelpers.pxi":433 * c_node = c_ns_list[i].node * c_nsdef = c_node.nsDef * if c_nsdef is c_ns_list[i].ns: # <<<<<<<<<<<<<< @@ -24029,7 +23956,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py goto __pyx_L26; } - /* "src/lxml/apihelpers.pxi":441 + /* "src/lxml/apihelpers.pxi":436 * c_node.nsDef = c_node.nsDef.next * else: * while c_nsdef.next is not c_ns_list[i].ns: # <<<<<<<<<<<<<< @@ -24041,7 +23968,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_2 = ((__pyx_v_c_nsdef->next != (__pyx_v_c_ns_list[__pyx_v_i]).ns) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":442 + /* "src/lxml/apihelpers.pxi":437 * else: * while c_nsdef.next is not c_ns_list[i].ns: * c_nsdef = c_nsdef.next # <<<<<<<<<<<<<< @@ -24052,7 +23979,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_v_c_nsdef = __pyx_t_10; } - /* "src/lxml/apihelpers.pxi":443 + /* "src/lxml/apihelpers.pxi":438 * while c_nsdef.next is not c_ns_list[i].ns: * c_nsdef = c_nsdef.next * c_nsdef.next = c_nsdef.next.next # <<<<<<<<<<<<<< @@ -24064,7 +23991,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py } __pyx_L26:; - /* "src/lxml/apihelpers.pxi":444 + /* "src/lxml/apihelpers.pxi":439 * c_nsdef = c_nsdef.next * c_nsdef.next = c_nsdef.next.next * tree.xmlFreeNs(c_ns_list[i].ns) # <<<<<<<<<<<<<< @@ -24075,7 +24002,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_L20_continue:; } - /* "src/lxml/apihelpers.pxi":446 + /* "src/lxml/apihelpers.pxi":441 * tree.xmlFreeNs(c_ns_list[i].ns) * * if c_ns_list is not NULL: # <<<<<<<<<<<<<< @@ -24085,7 +24012,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_t_2 = ((__pyx_v_c_ns_list != NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":447 + /* "src/lxml/apihelpers.pxi":442 * * if c_ns_list is not NULL: * python.lxml_free(c_ns_list) # <<<<<<<<<<<<<< @@ -24094,7 +24021,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ lxml_free(__pyx_v_c_ns_list); - /* "src/lxml/apihelpers.pxi":446 + /* "src/lxml/apihelpers.pxi":441 * tree.xmlFreeNs(c_ns_list[i].ns) * * if c_ns_list is not NULL: # <<<<<<<<<<<<<< @@ -24103,7 +24030,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":448 + /* "src/lxml/apihelpers.pxi":443 * if c_ns_list is not NULL: * python.lxml_free(c_ns_list) * return 0 # <<<<<<<<<<<<<< @@ -24113,7 +24040,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":386 + /* "src/lxml/apihelpers.pxi":381 * * * cdef int _removeUnusedNamespaceDeclarations(xmlNode* c_element, set prefixes_to_keep) except -1: # <<<<<<<<<<<<<< @@ -24131,7 +24058,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py return __pyx_r; } -/* "src/lxml/apihelpers.pxi":450 +/* "src/lxml/apihelpers.pxi":445 * return 0 * * cdef xmlNs* _searchNsByHref(xmlNode* c_node, const_xmlChar* c_href, bint is_attribute): # <<<<<<<<<<<<<< @@ -24151,7 +24078,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons xmlNs *__pyx_t_4; __Pyx_RefNannySetupContext("_searchNsByHref", 0); - /* "src/lxml/apihelpers.pxi":459 + /* "src/lxml/apihelpers.pxi":454 * """ * cdef xmlNs* c_ns * cdef xmlNs* c_default_ns = NULL # <<<<<<<<<<<<<< @@ -24160,7 +24087,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_v_c_default_ns = NULL; - /* "src/lxml/apihelpers.pxi":461 + /* "src/lxml/apihelpers.pxi":456 * cdef xmlNs* c_default_ns = NULL * cdef xmlNode* c_element * if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE: # <<<<<<<<<<<<<< @@ -24184,7 +24111,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":462 + /* "src/lxml/apihelpers.pxi":457 * cdef xmlNode* c_element * if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE: * return NULL # <<<<<<<<<<<<<< @@ -24194,7 +24121,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":461 + /* "src/lxml/apihelpers.pxi":456 * cdef xmlNs* c_default_ns = NULL * cdef xmlNode* c_element * if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE: # <<<<<<<<<<<<<< @@ -24203,7 +24130,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":463 + /* "src/lxml/apihelpers.pxi":458 * if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE: * return NULL * if tree.xmlStrcmp(c_href, tree.XML_XML_NAMESPACE) == 0: # <<<<<<<<<<<<<< @@ -24213,7 +24140,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((xmlStrcmp(__pyx_v_c_href, XML_XML_NAMESPACE) == 0) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":465 + /* "src/lxml/apihelpers.pxi":460 * if tree.xmlStrcmp(c_href, tree.XML_XML_NAMESPACE) == 0: * # no special cases here, let libxml2 handle this * return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href) # <<<<<<<<<<<<<< @@ -24223,7 +24150,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_r = xmlSearchNsByHref(__pyx_v_c_node->doc, __pyx_v_c_node, __pyx_v_c_href); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":463 + /* "src/lxml/apihelpers.pxi":458 * if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE: * return NULL * if tree.xmlStrcmp(c_href, tree.XML_XML_NAMESPACE) == 0: # <<<<<<<<<<<<<< @@ -24232,7 +24159,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":466 + /* "src/lxml/apihelpers.pxi":461 * # no special cases here, let libxml2 handle this * return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href) * if c_node.type == tree.XML_ATTRIBUTE_NODE: # <<<<<<<<<<<<<< @@ -24242,7 +24169,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_node->type == XML_ATTRIBUTE_NODE) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":467 + /* "src/lxml/apihelpers.pxi":462 * return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href) * if c_node.type == tree.XML_ATTRIBUTE_NODE: * is_attribute = 1 # <<<<<<<<<<<<<< @@ -24251,7 +24178,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_v_is_attribute = 1; - /* "src/lxml/apihelpers.pxi":466 + /* "src/lxml/apihelpers.pxi":461 * # no special cases here, let libxml2 handle this * return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href) * if c_node.type == tree.XML_ATTRIBUTE_NODE: # <<<<<<<<<<<<<< @@ -24260,7 +24187,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":468 + /* "src/lxml/apihelpers.pxi":463 * if c_node.type == tree.XML_ATTRIBUTE_NODE: * is_attribute = 1 * while c_node is not NULL and c_node.type != tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -24279,7 +24206,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L11_bool_binop_done:; if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":469 + /* "src/lxml/apihelpers.pxi":464 * is_attribute = 1 * while c_node is not NULL and c_node.type != tree.XML_ELEMENT_NODE: * c_node = c_node.parent # <<<<<<<<<<<<<< @@ -24290,7 +24217,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_v_c_node = __pyx_t_3; } - /* "src/lxml/apihelpers.pxi":470 + /* "src/lxml/apihelpers.pxi":465 * while c_node is not NULL and c_node.type != tree.XML_ELEMENT_NODE: * c_node = c_node.parent * c_element = c_node # <<<<<<<<<<<<<< @@ -24299,7 +24226,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_v_c_element = __pyx_v_c_node; - /* "src/lxml/apihelpers.pxi":471 + /* "src/lxml/apihelpers.pxi":466 * c_node = c_node.parent * c_element = c_node * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -24310,7 +24237,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":472 + /* "src/lxml/apihelpers.pxi":467 * c_element = c_node * while c_node is not NULL: * if c_node.type == tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -24320,7 +24247,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":473 + /* "src/lxml/apihelpers.pxi":468 * while c_node is not NULL: * if c_node.type == tree.XML_ELEMENT_NODE: * c_ns = c_node.nsDef # <<<<<<<<<<<<<< @@ -24330,7 +24257,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_4 = __pyx_v_c_node->nsDef; __pyx_v_c_ns = __pyx_t_4; - /* "src/lxml/apihelpers.pxi":474 + /* "src/lxml/apihelpers.pxi":469 * if c_node.type == tree.XML_ELEMENT_NODE: * c_ns = c_node.nsDef * while c_ns is not NULL: # <<<<<<<<<<<<<< @@ -24341,7 +24268,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_ns != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":475 + /* "src/lxml/apihelpers.pxi":470 * c_ns = c_node.nsDef * while c_ns is not NULL: * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: # <<<<<<<<<<<<<< @@ -24359,7 +24286,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L19_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":476 + /* "src/lxml/apihelpers.pxi":471 * while c_ns is not NULL: * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: * if c_ns.prefix is NULL and is_attribute: # <<<<<<<<<<<<<< @@ -24377,7 +24304,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L22_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":480 + /* "src/lxml/apihelpers.pxi":475 * # prefix, but keep the first default namespace * # declaration that we found * if c_default_ns is NULL: # <<<<<<<<<<<<<< @@ -24387,7 +24314,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_default_ns == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":481 + /* "src/lxml/apihelpers.pxi":476 * # declaration that we found * if c_default_ns is NULL: * c_default_ns = c_ns # <<<<<<<<<<<<<< @@ -24396,7 +24323,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_v_c_default_ns = __pyx_v_c_ns; - /* "src/lxml/apihelpers.pxi":480 + /* "src/lxml/apihelpers.pxi":475 * # prefix, but keep the first default namespace * # declaration that we found * if c_default_ns is NULL: # <<<<<<<<<<<<<< @@ -24405,7 +24332,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":476 + /* "src/lxml/apihelpers.pxi":471 * while c_ns is not NULL: * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: * if c_ns.prefix is NULL and is_attribute: # <<<<<<<<<<<<<< @@ -24415,7 +24342,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons goto __pyx_L21; } - /* "src/lxml/apihelpers.pxi":483 + /* "src/lxml/apihelpers.pxi":478 * c_default_ns = c_ns * elif tree.xmlSearchNs( * c_element.doc, c_element, c_ns.prefix) is c_ns: # <<<<<<<<<<<<<< @@ -24424,7 +24351,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_t_1 = ((xmlSearchNs(__pyx_v_c_element->doc, __pyx_v_c_element, __pyx_v_c_ns->prefix) == __pyx_v_c_ns) != 0); - /* "src/lxml/apihelpers.pxi":482 + /* "src/lxml/apihelpers.pxi":477 * if c_default_ns is NULL: * c_default_ns = c_ns * elif tree.xmlSearchNs( # <<<<<<<<<<<<<< @@ -24433,7 +24360,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":485 + /* "src/lxml/apihelpers.pxi":480 * c_element.doc, c_element, c_ns.prefix) is c_ns: * # start node is in namespace scope => found! * return c_ns # <<<<<<<<<<<<<< @@ -24443,7 +24370,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_r = __pyx_v_c_ns; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":482 + /* "src/lxml/apihelpers.pxi":477 * if c_default_ns is NULL: * c_default_ns = c_ns * elif tree.xmlSearchNs( # <<<<<<<<<<<<<< @@ -24453,7 +24380,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons } __pyx_L21:; - /* "src/lxml/apihelpers.pxi":475 + /* "src/lxml/apihelpers.pxi":470 * c_ns = c_node.nsDef * while c_ns is not NULL: * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: # <<<<<<<<<<<<<< @@ -24462,7 +24389,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":486 + /* "src/lxml/apihelpers.pxi":481 * # start node is in namespace scope => found! * return c_ns * c_ns = c_ns.next # <<<<<<<<<<<<<< @@ -24473,7 +24400,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_v_c_ns = __pyx_t_4; } - /* "src/lxml/apihelpers.pxi":487 + /* "src/lxml/apihelpers.pxi":482 * return c_ns * c_ns = c_ns.next * if c_node is not c_element and c_node.ns is not NULL: # <<<<<<<<<<<<<< @@ -24491,7 +24418,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L26_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":489 + /* "src/lxml/apihelpers.pxi":484 * if c_node is not c_element and c_node.ns is not NULL: * # optimise: the node may have the namespace itself * c_ns = c_node.ns # <<<<<<<<<<<<<< @@ -24501,7 +24428,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_4 = __pyx_v_c_node->ns; __pyx_v_c_ns = __pyx_t_4; - /* "src/lxml/apihelpers.pxi":490 + /* "src/lxml/apihelpers.pxi":485 * # optimise: the node may have the namespace itself * c_ns = c_node.ns * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: # <<<<<<<<<<<<<< @@ -24519,7 +24446,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L29_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":491 + /* "src/lxml/apihelpers.pxi":486 * c_ns = c_node.ns * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: * if c_ns.prefix is NULL and is_attribute: # <<<<<<<<<<<<<< @@ -24537,7 +24464,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_L32_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":495 + /* "src/lxml/apihelpers.pxi":490 * # prefix, but keep the first default namespace * # declaration that we found * if c_default_ns is NULL: # <<<<<<<<<<<<<< @@ -24547,7 +24474,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_default_ns == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":496 + /* "src/lxml/apihelpers.pxi":491 * # declaration that we found * if c_default_ns is NULL: * c_default_ns = c_ns # <<<<<<<<<<<<<< @@ -24556,7 +24483,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_v_c_default_ns = __pyx_v_c_ns; - /* "src/lxml/apihelpers.pxi":495 + /* "src/lxml/apihelpers.pxi":490 * # prefix, but keep the first default namespace * # declaration that we found * if c_default_ns is NULL: # <<<<<<<<<<<<<< @@ -24565,7 +24492,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":491 + /* "src/lxml/apihelpers.pxi":486 * c_ns = c_node.ns * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: * if c_ns.prefix is NULL and is_attribute: # <<<<<<<<<<<<<< @@ -24575,7 +24502,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons goto __pyx_L31; } - /* "src/lxml/apihelpers.pxi":498 + /* "src/lxml/apihelpers.pxi":493 * c_default_ns = c_ns * elif tree.xmlSearchNs( * c_element.doc, c_element, c_ns.prefix) is c_ns: # <<<<<<<<<<<<<< @@ -24584,7 +24511,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ __pyx_t_1 = ((xmlSearchNs(__pyx_v_c_element->doc, __pyx_v_c_element, __pyx_v_c_ns->prefix) == __pyx_v_c_ns) != 0); - /* "src/lxml/apihelpers.pxi":497 + /* "src/lxml/apihelpers.pxi":492 * if c_default_ns is NULL: * c_default_ns = c_ns * elif tree.xmlSearchNs( # <<<<<<<<<<<<<< @@ -24593,7 +24520,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":500 + /* "src/lxml/apihelpers.pxi":495 * c_element.doc, c_element, c_ns.prefix) is c_ns: * # start node is in namespace scope => found! * return c_ns # <<<<<<<<<<<<<< @@ -24603,7 +24530,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_r = __pyx_v_c_ns; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":497 + /* "src/lxml/apihelpers.pxi":492 * if c_default_ns is NULL: * c_default_ns = c_ns * elif tree.xmlSearchNs( # <<<<<<<<<<<<<< @@ -24613,7 +24540,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons } __pyx_L31:; - /* "src/lxml/apihelpers.pxi":490 + /* "src/lxml/apihelpers.pxi":485 * # optimise: the node may have the namespace itself * c_ns = c_node.ns * if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0: # <<<<<<<<<<<<<< @@ -24622,7 +24549,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":487 + /* "src/lxml/apihelpers.pxi":482 * return c_ns * c_ns = c_ns.next * if c_node is not c_element and c_node.ns is not NULL: # <<<<<<<<<<<<<< @@ -24631,7 +24558,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":472 + /* "src/lxml/apihelpers.pxi":467 * c_element = c_node * while c_node is not NULL: * if c_node.type == tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -24640,7 +24567,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":501 + /* "src/lxml/apihelpers.pxi":496 * # start node is in namespace scope => found! * return c_ns * c_node = c_node.parent # <<<<<<<<<<<<<< @@ -24651,7 +24578,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_v_c_node = __pyx_t_3; } - /* "src/lxml/apihelpers.pxi":503 + /* "src/lxml/apihelpers.pxi":498 * c_node = c_node.parent * # nothing found => use a matching default namespace or fail * if c_default_ns is not NULL: # <<<<<<<<<<<<<< @@ -24661,7 +24588,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((__pyx_v_c_default_ns != NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":504 + /* "src/lxml/apihelpers.pxi":499 * # nothing found => use a matching default namespace or fail * if c_default_ns is not NULL: * if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns: # <<<<<<<<<<<<<< @@ -24671,7 +24598,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_t_1 = ((xmlSearchNs(__pyx_v_c_element->doc, __pyx_v_c_element, NULL) == __pyx_v_c_default_ns) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":505 + /* "src/lxml/apihelpers.pxi":500 * if c_default_ns is not NULL: * if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns: * return c_default_ns # <<<<<<<<<<<<<< @@ -24681,7 +24608,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_r = __pyx_v_c_default_ns; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":504 + /* "src/lxml/apihelpers.pxi":499 * # nothing found => use a matching default namespace or fail * if c_default_ns is not NULL: * if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns: # <<<<<<<<<<<<<< @@ -24690,7 +24617,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":503 + /* "src/lxml/apihelpers.pxi":498 * c_node = c_node.parent * # nothing found => use a matching default namespace or fail * if c_default_ns is not NULL: # <<<<<<<<<<<<<< @@ -24699,7 +24626,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons */ } - /* "src/lxml/apihelpers.pxi":506 + /* "src/lxml/apihelpers.pxi":501 * if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns: * return c_default_ns * return NULL # <<<<<<<<<<<<<< @@ -24709,7 +24636,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":450 + /* "src/lxml/apihelpers.pxi":445 * return 0 * * cdef xmlNs* _searchNsByHref(xmlNode* c_node, const_xmlChar* c_href, bint is_attribute): # <<<<<<<<<<<<<< @@ -24723,7 +24650,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons return __pyx_r; } -/* "src/lxml/apihelpers.pxi":508 +/* "src/lxml/apihelpers.pxi":503 * return NULL * * cdef int _replaceNodeByChildren(_Document doc, xmlNode* c_node) except -1: # <<<<<<<<<<<<<< @@ -24741,7 +24668,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py int __pyx_t_3; __Pyx_RefNannySetupContext("_replaceNodeByChildren", 0); - /* "src/lxml/apihelpers.pxi":512 + /* "src/lxml/apihelpers.pxi":507 * cdef xmlNode* c_parent * cdef xmlNode* c_child * if c_node.children is NULL: # <<<<<<<<<<<<<< @@ -24751,7 +24678,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_1 = ((__pyx_v_c_node->children == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":513 + /* "src/lxml/apihelpers.pxi":508 * cdef xmlNode* c_child * if c_node.children is NULL: * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -24760,7 +24687,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":514 + /* "src/lxml/apihelpers.pxi":509 * if c_node.children is NULL: * tree.xmlUnlinkNode(c_node) * return 0 # <<<<<<<<<<<<<< @@ -24770,7 +24697,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":512 + /* "src/lxml/apihelpers.pxi":507 * cdef xmlNode* c_parent * cdef xmlNode* c_child * if c_node.children is NULL: # <<<<<<<<<<<<<< @@ -24779,7 +24706,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py */ } - /* "src/lxml/apihelpers.pxi":516 + /* "src/lxml/apihelpers.pxi":511 * return 0 * * c_parent = c_node.parent # <<<<<<<<<<<<<< @@ -24789,7 +24716,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->parent; __pyx_v_c_parent = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":518 + /* "src/lxml/apihelpers.pxi":513 * c_parent = c_node.parent * # fix parent links of children * c_child = c_node.children # <<<<<<<<<<<<<< @@ -24799,7 +24726,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->children; __pyx_v_c_child = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":519 + /* "src/lxml/apihelpers.pxi":514 * # fix parent links of children * c_child = c_node.children * while c_child is not NULL: # <<<<<<<<<<<<<< @@ -24810,7 +24737,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":520 + /* "src/lxml/apihelpers.pxi":515 * c_child = c_node.children * while c_child is not NULL: * c_child.parent = c_parent # <<<<<<<<<<<<<< @@ -24819,7 +24746,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py */ __pyx_v_c_child->parent = __pyx_v_c_parent; - /* "src/lxml/apihelpers.pxi":521 + /* "src/lxml/apihelpers.pxi":516 * while c_child is not NULL: * c_child.parent = c_parent * c_child = c_child.next # <<<<<<<<<<<<<< @@ -24830,7 +24757,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_v_c_child = __pyx_t_2; } - /* "src/lxml/apihelpers.pxi":525 + /* "src/lxml/apihelpers.pxi":520 * # fix namespace references of children if their parent's namespace * # declarations get lost * if c_node.nsDef is not NULL: # <<<<<<<<<<<<<< @@ -24840,7 +24767,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_1 = ((__pyx_v_c_node->nsDef != NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":526 + /* "src/lxml/apihelpers.pxi":521 * # declarations get lost * if c_node.nsDef is not NULL: * c_child = c_node.children # <<<<<<<<<<<<<< @@ -24850,7 +24777,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->children; __pyx_v_c_child = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":527 + /* "src/lxml/apihelpers.pxi":522 * if c_node.nsDef is not NULL: * c_child = c_node.children * while c_child is not NULL: # <<<<<<<<<<<<<< @@ -24861,16 +24788,16 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":528 + /* "src/lxml/apihelpers.pxi":523 * c_child = c_node.children * while c_child is not NULL: * moveNodeToDocument(doc, doc._c_doc, c_child) # <<<<<<<<<<<<<< * c_child = c_child.next * */ - __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_doc->_c_doc, __pyx_v_c_child); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 528, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_doc->_c_doc, __pyx_v_c_child); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 523, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":529 + /* "src/lxml/apihelpers.pxi":524 * while c_child is not NULL: * moveNodeToDocument(doc, doc._c_doc, c_child) * c_child = c_child.next # <<<<<<<<<<<<<< @@ -24881,7 +24808,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_v_c_child = __pyx_t_2; } - /* "src/lxml/apihelpers.pxi":525 + /* "src/lxml/apihelpers.pxi":520 * # fix namespace references of children if their parent's namespace * # declarations get lost * if c_node.nsDef is not NULL: # <<<<<<<<<<<<<< @@ -24890,7 +24817,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py */ } - /* "src/lxml/apihelpers.pxi":532 + /* "src/lxml/apihelpers.pxi":527 * * # fix sibling links to/from child slice * if c_node.prev is NULL: # <<<<<<<<<<<<<< @@ -24900,7 +24827,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_1 = ((__pyx_v_c_node->prev == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":533 + /* "src/lxml/apihelpers.pxi":528 * # fix sibling links to/from child slice * if c_node.prev is NULL: * c_parent.children = c_node.children # <<<<<<<<<<<<<< @@ -24910,7 +24837,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->children; __pyx_v_c_parent->children = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":532 + /* "src/lxml/apihelpers.pxi":527 * * # fix sibling links to/from child slice * if c_node.prev is NULL: # <<<<<<<<<<<<<< @@ -24920,7 +24847,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py goto __pyx_L9; } - /* "src/lxml/apihelpers.pxi":535 + /* "src/lxml/apihelpers.pxi":530 * c_parent.children = c_node.children * else: * c_node.prev.next = c_node.children # <<<<<<<<<<<<<< @@ -24931,7 +24858,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->children; __pyx_v_c_node->prev->next = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":536 + /* "src/lxml/apihelpers.pxi":531 * else: * c_node.prev.next = c_node.children * c_node.children.prev = c_node.prev # <<<<<<<<<<<<<< @@ -24943,7 +24870,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py } __pyx_L9:; - /* "src/lxml/apihelpers.pxi":537 + /* "src/lxml/apihelpers.pxi":532 * c_node.prev.next = c_node.children * c_node.children.prev = c_node.prev * if c_node.next is NULL: # <<<<<<<<<<<<<< @@ -24953,7 +24880,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_1 = ((__pyx_v_c_node->next == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":538 + /* "src/lxml/apihelpers.pxi":533 * c_node.children.prev = c_node.prev * if c_node.next is NULL: * c_parent.last = c_node.last # <<<<<<<<<<<<<< @@ -24963,7 +24890,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->last; __pyx_v_c_parent->last = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":537 + /* "src/lxml/apihelpers.pxi":532 * c_node.prev.next = c_node.children * c_node.children.prev = c_node.prev * if c_node.next is NULL: # <<<<<<<<<<<<<< @@ -24973,7 +24900,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py goto __pyx_L10; } - /* "src/lxml/apihelpers.pxi":540 + /* "src/lxml/apihelpers.pxi":535 * c_parent.last = c_node.last * else: * c_node.next.prev = c_node.last # <<<<<<<<<<<<<< @@ -24984,7 +24911,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_t_2 = __pyx_v_c_node->last; __pyx_v_c_node->next->prev = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":541 + /* "src/lxml/apihelpers.pxi":536 * else: * c_node.next.prev = c_node.last * c_node.last.next = c_node.next # <<<<<<<<<<<<<< @@ -24996,7 +24923,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py } __pyx_L10:; - /* "src/lxml/apihelpers.pxi":544 + /* "src/lxml/apihelpers.pxi":539 * * # unlink c_node * c_node.children = c_node.last = NULL # <<<<<<<<<<<<<< @@ -25006,7 +24933,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_v_c_node->children = NULL; __pyx_v_c_node->last = NULL; - /* "src/lxml/apihelpers.pxi":545 + /* "src/lxml/apihelpers.pxi":540 * # unlink c_node * c_node.children = c_node.last = NULL * c_node.parent = c_node.next = c_node.prev = NULL # <<<<<<<<<<<<<< @@ -25017,7 +24944,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_v_c_node->next = NULL; __pyx_v_c_node->prev = NULL; - /* "src/lxml/apihelpers.pxi":546 + /* "src/lxml/apihelpers.pxi":541 * c_node.children = c_node.last = NULL * c_node.parent = c_node.next = c_node.prev = NULL * return 0 # <<<<<<<<<<<<<< @@ -25027,7 +24954,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":508 + /* "src/lxml/apihelpers.pxi":503 * return NULL * * cdef int _replaceNodeByChildren(_Document doc, xmlNode* c_node) except -1: # <<<<<<<<<<<<<< @@ -25044,7 +24971,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py return __pyx_r; } -/* "src/lxml/apihelpers.pxi":548 +/* "src/lxml/apihelpers.pxi":543 * return 0 * * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node): # <<<<<<<<<<<<<< @@ -25070,7 +24997,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element PyObject *__pyx_t_10 = NULL; __Pyx_RefNannySetupContext("_attributeValue", 0); - /* "src/lxml/apihelpers.pxi":549 + /* "src/lxml/apihelpers.pxi":544 * * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node): * c_href = _getNs(c_attrib_node) # <<<<<<<<<<<<<< @@ -25079,7 +25006,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element */ __pyx_v_c_href = _getNs(((xmlNode *)__pyx_v_c_attrib_node)); - /* "src/lxml/apihelpers.pxi":550 + /* "src/lxml/apihelpers.pxi":545 * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node): * c_href = _getNs(c_attrib_node) * value = tree.xmlGetNsProp(c_element, c_attrib_node.name, c_href) # <<<<<<<<<<<<<< @@ -25088,7 +25015,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element */ __pyx_v_value = xmlGetNsProp(__pyx_v_c_element, __pyx_v_c_attrib_node->name, __pyx_v_c_href); - /* "src/lxml/apihelpers.pxi":551 + /* "src/lxml/apihelpers.pxi":546 * c_href = _getNs(c_attrib_node) * value = tree.xmlGetNsProp(c_element, c_attrib_node.name, c_href) * try: # <<<<<<<<<<<<<< @@ -25097,20 +25024,20 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element */ /*try:*/ { - /* "src/lxml/apihelpers.pxi":552 + /* "src/lxml/apihelpers.pxi":547 * value = tree.xmlGetNsProp(c_element, c_attrib_node.name, c_href) * try: * result = funicode(value) # <<<<<<<<<<<<<< * finally: * tree.xmlFree(value) */ - __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 552, __pyx_L4_error) + __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 547, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_result = __pyx_t_1; __pyx_t_1 = 0; } - /* "src/lxml/apihelpers.pxi":554 + /* "src/lxml/apihelpers.pxi":549 * result = funicode(value) * finally: * tree.xmlFree(value) # <<<<<<<<<<<<<< @@ -25157,7 +25084,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element __pyx_L5:; } - /* "src/lxml/apihelpers.pxi":555 + /* "src/lxml/apihelpers.pxi":550 * finally: * tree.xmlFree(value) * return result # <<<<<<<<<<<<<< @@ -25169,7 +25096,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":548 + /* "src/lxml/apihelpers.pxi":543 * return 0 * * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node): # <<<<<<<<<<<<<< @@ -25189,7 +25116,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element return __pyx_r; } -/* "src/lxml/apihelpers.pxi":557 +/* "src/lxml/apihelpers.pxi":552 * return result * * cdef object _attributeValueFromNsName(xmlNode* c_element, # <<<<<<<<<<<<<< @@ -25215,7 +25142,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v PyObject *__pyx_t_11 = NULL; __Pyx_RefNannySetupContext("_attributeValueFromNsName", 0); - /* "src/lxml/apihelpers.pxi":559 + /* "src/lxml/apihelpers.pxi":554 * cdef object _attributeValueFromNsName(xmlNode* c_element, * const_xmlChar* c_href, const_xmlChar* c_name): * c_result = tree.xmlGetNsProp(c_element, c_name, c_href) # <<<<<<<<<<<<<< @@ -25224,7 +25151,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v */ __pyx_v_c_result = xmlGetNsProp(__pyx_v_c_element, __pyx_v_c_name, __pyx_v_c_href); - /* "src/lxml/apihelpers.pxi":560 + /* "src/lxml/apihelpers.pxi":555 * const_xmlChar* c_href, const_xmlChar* c_name): * c_result = tree.xmlGetNsProp(c_element, c_name, c_href) * if c_result is NULL: # <<<<<<<<<<<<<< @@ -25234,7 +25161,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v __pyx_t_1 = ((__pyx_v_c_result == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":561 + /* "src/lxml/apihelpers.pxi":556 * c_result = tree.xmlGetNsProp(c_element, c_name, c_href) * if c_result is NULL: * return None # <<<<<<<<<<<<<< @@ -25245,7 +25172,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":560 + /* "src/lxml/apihelpers.pxi":555 * const_xmlChar* c_href, const_xmlChar* c_name): * c_result = tree.xmlGetNsProp(c_element, c_name, c_href) * if c_result is NULL: # <<<<<<<<<<<<<< @@ -25254,7 +25181,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v */ } - /* "src/lxml/apihelpers.pxi":562 + /* "src/lxml/apihelpers.pxi":557 * if c_result is NULL: * return None * try: # <<<<<<<<<<<<<< @@ -25263,20 +25190,20 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v */ /*try:*/ { - /* "src/lxml/apihelpers.pxi":563 + /* "src/lxml/apihelpers.pxi":558 * return None * try: * result = funicode(c_result) # <<<<<<<<<<<<<< * finally: * tree.xmlFree(c_result) */ - __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 563, __pyx_L5_error) + __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 558, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_result = __pyx_t_2; __pyx_t_2 = 0; } - /* "src/lxml/apihelpers.pxi":565 + /* "src/lxml/apihelpers.pxi":560 * result = funicode(c_result) * finally: * tree.xmlFree(c_result) # <<<<<<<<<<<<<< @@ -25323,7 +25250,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v __pyx_L6:; } - /* "src/lxml/apihelpers.pxi":566 + /* "src/lxml/apihelpers.pxi":561 * finally: * tree.xmlFree(c_result) * return result # <<<<<<<<<<<<<< @@ -25335,7 +25262,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":557 + /* "src/lxml/apihelpers.pxi":552 * return result * * cdef object _attributeValueFromNsName(xmlNode* c_element, # <<<<<<<<<<<<<< @@ -25355,7 +25282,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v return __pyx_r; } -/* "src/lxml/apihelpers.pxi":568 +/* "src/lxml/apihelpers.pxi":563 * return result * * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default): # <<<<<<<<<<<<<< @@ -25387,14 +25314,14 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ PyObject *__pyx_t_14 = NULL; __Pyx_RefNannySetupContext("_getNodeAttributeValue", 0); - /* "src/lxml/apihelpers.pxi":569 + /* "src/lxml/apihelpers.pxi":564 * * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default): * ns, tag = _getNsTag(key) # <<<<<<<<<<<<<< * c_href = NULL if ns is None else _xcstr(ns) * c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href) */ - __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 569, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; @@ -25402,7 +25329,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 569, __pyx_L1_error) + __PYX_ERR(5, 564, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); @@ -25410,21 +25337,21 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 569, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 569, __pyx_L1_error) + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 569, __pyx_L1_error) + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 564, __pyx_L1_error) } __pyx_v_ns = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_tag = __pyx_t_3; __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":570 + /* "src/lxml/apihelpers.pxi":565 * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default): * ns, tag = _getNsTag(key) * c_href = NULL if ns is None else _xcstr(ns) # <<<<<<<<<<<<<< @@ -25439,7 +25366,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ } __pyx_v_c_href = __pyx_t_4; - /* "src/lxml/apihelpers.pxi":571 + /* "src/lxml/apihelpers.pxi":566 * ns, tag = _getNsTag(key) * c_href = NULL if ns is None else _xcstr(ns) * c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href) # <<<<<<<<<<<<<< @@ -25448,7 +25375,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ */ __pyx_v_c_result = xmlGetNsProp(__pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag), __pyx_v_c_href); - /* "src/lxml/apihelpers.pxi":572 + /* "src/lxml/apihelpers.pxi":567 * c_href = NULL if ns is None else _xcstr(ns) * c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href) * if c_result is NULL: # <<<<<<<<<<<<<< @@ -25458,7 +25385,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ __pyx_t_5 = ((__pyx_v_c_result == NULL) != 0); if (__pyx_t_5) { - /* "src/lxml/apihelpers.pxi":574 + /* "src/lxml/apihelpers.pxi":569 * if c_result is NULL: * # XXX free namespace that is not in use..? * return default # <<<<<<<<<<<<<< @@ -25470,7 +25397,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ __pyx_r = __pyx_v_default; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":572 + /* "src/lxml/apihelpers.pxi":567 * c_href = NULL if ns is None else _xcstr(ns) * c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href) * if c_result is NULL: # <<<<<<<<<<<<<< @@ -25479,7 +25406,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ */ } - /* "src/lxml/apihelpers.pxi":575 + /* "src/lxml/apihelpers.pxi":570 * # XXX free namespace that is not in use..? * return default * try: # <<<<<<<<<<<<<< @@ -25488,20 +25415,20 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ */ /*try:*/ { - /* "src/lxml/apihelpers.pxi":576 + /* "src/lxml/apihelpers.pxi":571 * return default * try: * result = funicode(c_result) # <<<<<<<<<<<<<< * finally: * tree.xmlFree(c_result) */ - __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 576, __pyx_L5_error) + __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 571, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_result = __pyx_t_1; __pyx_t_1 = 0; } - /* "src/lxml/apihelpers.pxi":578 + /* "src/lxml/apihelpers.pxi":573 * result = funicode(c_result) * finally: * tree.xmlFree(c_result) # <<<<<<<<<<<<<< @@ -25550,7 +25477,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ __pyx_L6:; } - /* "src/lxml/apihelpers.pxi":579 + /* "src/lxml/apihelpers.pxi":574 * finally: * tree.xmlFree(c_result) * return result # <<<<<<<<<<<<<< @@ -25562,7 +25489,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":568 + /* "src/lxml/apihelpers.pxi":563 * return result * * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default): # <<<<<<<<<<<<<< @@ -25586,7 +25513,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":581 +/* "src/lxml/apihelpers.pxi":576 * return result * * cdef inline object _getAttributeValue(_Element element, key, default): # <<<<<<<<<<<<<< @@ -25600,7 +25527,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__getAttributeValue(struct Lx PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("_getAttributeValue", 0); - /* "src/lxml/apihelpers.pxi":582 + /* "src/lxml/apihelpers.pxi":577 * * cdef inline object _getAttributeValue(_Element element, key, default): * return _getNodeAttributeValue(element._c_node, key, default) # <<<<<<<<<<<<<< @@ -25608,13 +25535,13 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__getAttributeValue(struct Lx * cdef int _setAttributeValue(_Element element, key, value) except -1: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_4lxml_5etree__getNodeAttributeValue(__pyx_v_element->_c_node, __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 582, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__getNodeAttributeValue(__pyx_v_element->_c_node, __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":581 + /* "src/lxml/apihelpers.pxi":576 * return result * * cdef inline object _getAttributeValue(_Element element, key, default): # <<<<<<<<<<<<<< @@ -25633,7 +25560,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__getAttributeValue(struct Lx return __pyx_r; } -/* "src/lxml/apihelpers.pxi":584 +/* "src/lxml/apihelpers.pxi":579 * return _getNodeAttributeValue(element._c_node, key, default) * * cdef int _setAttributeValue(_Element element, key, value) except -1: # <<<<<<<<<<<<<< @@ -25661,14 +25588,14 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __Pyx_RefNannySetupContext("_setAttributeValue", 0); __Pyx_INCREF(__pyx_v_value); - /* "src/lxml/apihelpers.pxi":587 + /* "src/lxml/apihelpers.pxi":582 * cdef const_xmlChar* c_value * cdef xmlNs* c_ns * ns, tag = _getNsTag(key) # <<<<<<<<<<<<<< * is_html = element._doc._parser._for_html * if not is_html: */ - __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 587, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; @@ -25676,7 +25603,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 587, __pyx_L1_error) + __PYX_ERR(5, 582, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); @@ -25684,21 +25611,21 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 587, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 587, __pyx_L1_error) + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 587, __pyx_L1_error) + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 582, __pyx_L1_error) } __pyx_v_ns = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_tag = __pyx_t_3; __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":588 + /* "src/lxml/apihelpers.pxi":583 * cdef xmlNs* c_ns * ns, tag = _getNsTag(key) * is_html = element._doc._parser._for_html # <<<<<<<<<<<<<< @@ -25708,7 +25635,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __pyx_t_4 = __pyx_v_element->_doc->_parser->_for_html; __pyx_v_is_html = __pyx_t_4; - /* "src/lxml/apihelpers.pxi":589 + /* "src/lxml/apihelpers.pxi":584 * ns, tag = _getNsTag(key) * is_html = element._doc._parser._for_html * if not is_html: # <<<<<<<<<<<<<< @@ -25718,16 +25645,16 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __pyx_t_4 = ((!(__pyx_v_is_html != 0)) != 0); if (__pyx_t_4) { - /* "src/lxml/apihelpers.pxi":590 + /* "src/lxml/apihelpers.pxi":585 * is_html = element._doc._parser._for_html * if not is_html: * _attributeValidOrRaise(tag) # <<<<<<<<<<<<<< * c_tag = _xcstr(tag) * if value is None and is_html: */ - __pyx_t_5 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_tag); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 590, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_tag); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 585, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":589 + /* "src/lxml/apihelpers.pxi":584 * ns, tag = _getNsTag(key) * is_html = element._doc._parser._for_html * if not is_html: # <<<<<<<<<<<<<< @@ -25736,7 +25663,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e */ } - /* "src/lxml/apihelpers.pxi":591 + /* "src/lxml/apihelpers.pxi":586 * if not is_html: * _attributeValidOrRaise(tag) * c_tag = _xcstr(tag) # <<<<<<<<<<<<<< @@ -25745,7 +25672,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e */ __pyx_v_c_tag = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag); - /* "src/lxml/apihelpers.pxi":592 + /* "src/lxml/apihelpers.pxi":587 * _attributeValidOrRaise(tag) * c_tag = _xcstr(tag) * if value is None and is_html: # <<<<<<<<<<<<<< @@ -25764,7 +25691,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __pyx_L5_bool_binop_done:; if (__pyx_t_4) { - /* "src/lxml/apihelpers.pxi":593 + /* "src/lxml/apihelpers.pxi":588 * c_tag = _xcstr(tag) * if value is None and is_html: * c_value = NULL # <<<<<<<<<<<<<< @@ -25773,7 +25700,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e */ __pyx_v_c_value = NULL; - /* "src/lxml/apihelpers.pxi":592 + /* "src/lxml/apihelpers.pxi":587 * _attributeValidOrRaise(tag) * c_tag = _xcstr(tag) * if value is None and is_html: # <<<<<<<<<<<<<< @@ -25783,7 +25710,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e goto __pyx_L4; } - /* "src/lxml/apihelpers.pxi":595 + /* "src/lxml/apihelpers.pxi":590 * c_value = NULL * else: * if isinstance(value, QName): # <<<<<<<<<<<<<< @@ -25795,19 +25722,19 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __pyx_t_7 = (__pyx_t_4 != 0); if (__pyx_t_7) { - /* "src/lxml/apihelpers.pxi":596 + /* "src/lxml/apihelpers.pxi":591 * else: * if isinstance(value, QName): * value = _resolveQNameText(element, value) # <<<<<<<<<<<<<< * else: * value = _utf8(value) */ - __pyx_t_1 = __pyx_f_4lxml_5etree__resolveQNameText(__pyx_v_element, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 596, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__resolveQNameText(__pyx_v_element, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":595 + /* "src/lxml/apihelpers.pxi":590 * c_value = NULL * else: * if isinstance(value, QName): # <<<<<<<<<<<<<< @@ -25817,7 +25744,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e goto __pyx_L7; } - /* "src/lxml/apihelpers.pxi":598 + /* "src/lxml/apihelpers.pxi":593 * value = _resolveQNameText(element, value) * else: * value = _utf8(value) # <<<<<<<<<<<<<< @@ -25825,14 +25752,14 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e * if ns is None: */ /*else*/ { - __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 598, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; } __pyx_L7:; - /* "src/lxml/apihelpers.pxi":599 + /* "src/lxml/apihelpers.pxi":594 * else: * value = _utf8(value) * c_value = _xcstr(value) # <<<<<<<<<<<<<< @@ -25843,7 +25770,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e } __pyx_L4:; - /* "src/lxml/apihelpers.pxi":600 + /* "src/lxml/apihelpers.pxi":595 * value = _utf8(value) * c_value = _xcstr(value) * if ns is None: # <<<<<<<<<<<<<< @@ -25854,7 +25781,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __pyx_t_4 = (__pyx_t_7 != 0); if (__pyx_t_4) { - /* "src/lxml/apihelpers.pxi":601 + /* "src/lxml/apihelpers.pxi":596 * c_value = _xcstr(value) * if ns is None: * c_ns = NULL # <<<<<<<<<<<<<< @@ -25863,7 +25790,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e */ __pyx_v_c_ns = NULL; - /* "src/lxml/apihelpers.pxi":600 + /* "src/lxml/apihelpers.pxi":595 * value = _utf8(value) * c_value = _xcstr(value) * if ns is None: # <<<<<<<<<<<<<< @@ -25873,7 +25800,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e goto __pyx_L8; } - /* "src/lxml/apihelpers.pxi":603 + /* "src/lxml/apihelpers.pxi":598 * c_ns = NULL * else: * c_ns = element._doc._findOrBuildNodeNs(element._c_node, _xcstr(ns), NULL, 1) # <<<<<<<<<<<<<< @@ -25881,12 +25808,12 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e * return 0 */ /*else*/ { - __pyx_t_8 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 1); if (unlikely(__pyx_t_8 == ((xmlNs *)NULL))) __PYX_ERR(5, 603, __pyx_L1_error) + __pyx_t_8 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 1); if (unlikely(__pyx_t_8 == ((xmlNs *)NULL))) __PYX_ERR(5, 598, __pyx_L1_error) __pyx_v_c_ns = __pyx_t_8; } __pyx_L8:; - /* "src/lxml/apihelpers.pxi":604 + /* "src/lxml/apihelpers.pxi":599 * else: * c_ns = element._doc._findOrBuildNodeNs(element._c_node, _xcstr(ns), NULL, 1) * tree.xmlSetNsProp(element._c_node, c_ns, c_tag, c_value) # <<<<<<<<<<<<<< @@ -25895,7 +25822,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e */ (void)(xmlSetNsProp(__pyx_v_element->_c_node, __pyx_v_c_ns, __pyx_v_c_tag, __pyx_v_c_value)); - /* "src/lxml/apihelpers.pxi":605 + /* "src/lxml/apihelpers.pxi":600 * c_ns = element._doc._findOrBuildNodeNs(element._c_node, _xcstr(ns), NULL, 1) * tree.xmlSetNsProp(element._c_node, c_ns, c_tag, c_value) * return 0 # <<<<<<<<<<<<<< @@ -25905,7 +25832,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":584 + /* "src/lxml/apihelpers.pxi":579 * return _getNodeAttributeValue(element._c_node, key, default) * * cdef int _setAttributeValue(_Element element, key, value) except -1: # <<<<<<<<<<<<<< @@ -25928,7 +25855,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e return __pyx_r; } -/* "src/lxml/apihelpers.pxi":607 +/* "src/lxml/apihelpers.pxi":602 * return 0 * * cdef int _delAttribute(_Element element, key) except -1: # <<<<<<<<<<<<<< @@ -25949,14 +25876,14 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen int __pyx_t_5; __Pyx_RefNannySetupContext("_delAttribute", 0); - /* "src/lxml/apihelpers.pxi":608 + /* "src/lxml/apihelpers.pxi":603 * * cdef int _delAttribute(_Element element, key) except -1: * ns, tag = _getNsTag(key) # <<<<<<<<<<<<<< * c_href = NULL if ns is None else _xcstr(ns) * if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)): */ - __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 608, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; @@ -25964,7 +25891,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 608, __pyx_L1_error) + __PYX_ERR(5, 603, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); @@ -25972,21 +25899,21 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 608, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 608, __pyx_L1_error) + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 608, __pyx_L1_error) + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 603, __pyx_L1_error) } __pyx_v_ns = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_tag = __pyx_t_3; __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":609 + /* "src/lxml/apihelpers.pxi":604 * cdef int _delAttribute(_Element element, key) except -1: * ns, tag = _getNsTag(key) * c_href = NULL if ns is None else _xcstr(ns) # <<<<<<<<<<<<<< @@ -26001,7 +25928,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen } __pyx_v_c_href = __pyx_t_4; - /* "src/lxml/apihelpers.pxi":610 + /* "src/lxml/apihelpers.pxi":605 * ns, tag = _getNsTag(key) * c_href = NULL if ns is None else _xcstr(ns) * if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)): # <<<<<<<<<<<<<< @@ -26011,7 +25938,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen __pyx_t_5 = (__pyx_f_4lxml_5etree__delAttributeFromNsName(__pyx_v_element->_c_node, __pyx_v_c_href, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag)) != 0); if (unlikely(__pyx_t_5)) { - /* "src/lxml/apihelpers.pxi":611 + /* "src/lxml/apihelpers.pxi":606 * c_href = NULL if ns is None else _xcstr(ns) * if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)): * raise KeyError, key # <<<<<<<<<<<<<< @@ -26019,9 +25946,9 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen * */ __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0); - __PYX_ERR(5, 611, __pyx_L1_error) + __PYX_ERR(5, 606, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":610 + /* "src/lxml/apihelpers.pxi":605 * ns, tag = _getNsTag(key) * c_href = NULL if ns is None else _xcstr(ns) * if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)): # <<<<<<<<<<<<<< @@ -26030,7 +25957,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen */ } - /* "src/lxml/apihelpers.pxi":612 + /* "src/lxml/apihelpers.pxi":607 * if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)): * raise KeyError, key * return 0 # <<<<<<<<<<<<<< @@ -26040,7 +25967,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":607 + /* "src/lxml/apihelpers.pxi":602 * return 0 * * cdef int _delAttribute(_Element element, key) except -1: # <<<<<<<<<<<<<< @@ -26062,7 +25989,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen return __pyx_r; } -/* "src/lxml/apihelpers.pxi":614 +/* "src/lxml/apihelpers.pxi":609 * return 0 * * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -26077,7 +26004,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, int __pyx_t_1; __Pyx_RefNannySetupContext("_delAttributeFromNsName", 0); - /* "src/lxml/apihelpers.pxi":615 + /* "src/lxml/apihelpers.pxi":610 * * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): * c_attr = tree.xmlHasNsProp(c_node, c_name, c_href) # <<<<<<<<<<<<<< @@ -26086,7 +26013,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, */ __pyx_v_c_attr = xmlHasNsProp(__pyx_v_c_node, __pyx_v_c_name, __pyx_v_c_href); - /* "src/lxml/apihelpers.pxi":616 + /* "src/lxml/apihelpers.pxi":611 * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): * c_attr = tree.xmlHasNsProp(c_node, c_name, c_href) * if c_attr is NULL: # <<<<<<<<<<<<<< @@ -26096,7 +26023,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, __pyx_t_1 = ((__pyx_v_c_attr == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":618 + /* "src/lxml/apihelpers.pxi":613 * if c_attr is NULL: * # XXX free namespace that is not in use..? * return -1 # <<<<<<<<<<<<<< @@ -26106,7 +26033,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, __pyx_r = -1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":616 + /* "src/lxml/apihelpers.pxi":611 * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): * c_attr = tree.xmlHasNsProp(c_node, c_name, c_href) * if c_attr is NULL: # <<<<<<<<<<<<<< @@ -26115,7 +26042,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, */ } - /* "src/lxml/apihelpers.pxi":619 + /* "src/lxml/apihelpers.pxi":614 * # XXX free namespace that is not in use..? * return -1 * tree.xmlRemoveProp(c_attr) # <<<<<<<<<<<<<< @@ -26124,7 +26051,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, */ (void)(xmlRemoveProp(__pyx_v_c_attr)); - /* "src/lxml/apihelpers.pxi":620 + /* "src/lxml/apihelpers.pxi":615 * return -1 * tree.xmlRemoveProp(c_attr) * return 0 # <<<<<<<<<<<<<< @@ -26134,7 +26061,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":614 + /* "src/lxml/apihelpers.pxi":609 * return 0 * * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -26148,7 +26075,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node, return __pyx_r; } -/* "src/lxml/apihelpers.pxi":622 +/* "src/lxml/apihelpers.pxi":617 * return 0 * * cdef list _collectAttributes(xmlNode* c_node, int collecttype): # <<<<<<<<<<<<<< @@ -26170,7 +26097,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("_collectAttributes", 0); - /* "src/lxml/apihelpers.pxi":627 + /* "src/lxml/apihelpers.pxi":622 * """ * cdef Py_ssize_t count * c_attr = c_node.properties # <<<<<<<<<<<<<< @@ -26180,7 +26107,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_1 = __pyx_v_c_node->properties; __pyx_v_c_attr = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":628 + /* "src/lxml/apihelpers.pxi":623 * cdef Py_ssize_t count * c_attr = c_node.properties * count = 0 # <<<<<<<<<<<<<< @@ -26189,7 +26116,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ __pyx_v_count = 0; - /* "src/lxml/apihelpers.pxi":629 + /* "src/lxml/apihelpers.pxi":624 * c_attr = c_node.properties * count = 0 * while c_attr is not NULL: # <<<<<<<<<<<<<< @@ -26200,7 +26127,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_2 = ((__pyx_v_c_attr != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":630 + /* "src/lxml/apihelpers.pxi":625 * count = 0 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: # <<<<<<<<<<<<<< @@ -26210,7 +26137,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_2 = ((__pyx_v_c_attr->type == XML_ATTRIBUTE_NODE) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":631 + /* "src/lxml/apihelpers.pxi":626 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: * count += 1 # <<<<<<<<<<<<<< @@ -26219,7 +26146,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ __pyx_v_count = (__pyx_v_count + 1); - /* "src/lxml/apihelpers.pxi":630 + /* "src/lxml/apihelpers.pxi":625 * count = 0 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: # <<<<<<<<<<<<<< @@ -26228,7 +26155,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ } - /* "src/lxml/apihelpers.pxi":632 + /* "src/lxml/apihelpers.pxi":627 * if c_attr.type == tree.XML_ATTRIBUTE_NODE: * count += 1 * c_attr = c_attr.next # <<<<<<<<<<<<<< @@ -26239,7 +26166,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_v_c_attr = __pyx_t_1; } - /* "src/lxml/apihelpers.pxi":634 + /* "src/lxml/apihelpers.pxi":629 * c_attr = c_attr.next * * if not count: # <<<<<<<<<<<<<< @@ -26249,7 +26176,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_2 = ((!(__pyx_v_count != 0)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":635 + /* "src/lxml/apihelpers.pxi":630 * * if not count: * return [] # <<<<<<<<<<<<<< @@ -26257,13 +26184,13 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node * attributes = [None] * count */ __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 635, __pyx_L1_error) + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":634 + /* "src/lxml/apihelpers.pxi":629 * c_attr = c_attr.next * * if not count: # <<<<<<<<<<<<<< @@ -26272,14 +26199,14 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ } - /* "src/lxml/apihelpers.pxi":637 + /* "src/lxml/apihelpers.pxi":632 * return [] * * attributes = [None] * count # <<<<<<<<<<<<<< * c_attr = c_node.properties * count = 0 */ - __pyx_t_3 = PyList_New(1 * ((__pyx_v_count<0) ? 0:__pyx_v_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 637, __pyx_L1_error) + __pyx_t_3 = PyList_New(1 * ((__pyx_v_count<0) ? 0:__pyx_v_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < __pyx_v_count; __pyx_temp++) { @@ -26291,7 +26218,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_v_attributes = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":638 + /* "src/lxml/apihelpers.pxi":633 * * attributes = [None] * count * c_attr = c_node.properties # <<<<<<<<<<<<<< @@ -26301,7 +26228,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_1 = __pyx_v_c_node->properties; __pyx_v_c_attr = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":639 + /* "src/lxml/apihelpers.pxi":634 * attributes = [None] * count * c_attr = c_node.properties * count = 0 # <<<<<<<<<<<<<< @@ -26310,7 +26237,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ __pyx_v_count = 0; - /* "src/lxml/apihelpers.pxi":640 + /* "src/lxml/apihelpers.pxi":635 * c_attr = c_node.properties * count = 0 * while c_attr is not NULL: # <<<<<<<<<<<<<< @@ -26321,7 +26248,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_2 = ((__pyx_v_c_attr != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":641 + /* "src/lxml/apihelpers.pxi":636 * count = 0 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: # <<<<<<<<<<<<<< @@ -26331,7 +26258,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_t_2 = ((__pyx_v_c_attr->type == XML_ATTRIBUTE_NODE) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":642 + /* "src/lxml/apihelpers.pxi":637 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: * if collecttype == 1: # <<<<<<<<<<<<<< @@ -26341,19 +26268,19 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node switch (__pyx_v_collecttype) { case 1: - /* "src/lxml/apihelpers.pxi":643 + /* "src/lxml/apihelpers.pxi":638 * if c_attr.type == tree.XML_ATTRIBUTE_NODE: * if collecttype == 1: * item = _namespacedName(c_attr) # <<<<<<<<<<<<<< * elif collecttype == 2: * item = _attributeValue(c_node, c_attr) */ - __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 643, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3); __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":642 + /* "src/lxml/apihelpers.pxi":637 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: * if collecttype == 1: # <<<<<<<<<<<<<< @@ -26363,19 +26290,19 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node break; case 2: - /* "src/lxml/apihelpers.pxi":645 + /* "src/lxml/apihelpers.pxi":640 * item = _namespacedName(c_attr) * elif collecttype == 2: * item = _attributeValue(c_node, c_attr) # <<<<<<<<<<<<<< * else: * item = (_namespacedName(c_attr), */ - __pyx_t_3 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 645, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3); __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":644 + /* "src/lxml/apihelpers.pxi":639 * if collecttype == 1: * item = _namespacedName(c_attr) * elif collecttype == 2: # <<<<<<<<<<<<<< @@ -26385,34 +26312,34 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node break; default: - /* "src/lxml/apihelpers.pxi":647 + /* "src/lxml/apihelpers.pxi":642 * item = _attributeValue(c_node, c_attr) * else: * item = (_namespacedName(c_attr), # <<<<<<<<<<<<<< * _attributeValue(c_node, c_attr)) * attributes[count] = item */ - __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 647, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 642, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - /* "src/lxml/apihelpers.pxi":648 + /* "src/lxml/apihelpers.pxi":643 * else: * item = (_namespacedName(c_attr), * _attributeValue(c_node, c_attr)) # <<<<<<<<<<<<<< * attributes[count] = item * count += 1 */ - __pyx_t_4 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 648, __pyx_L1_error) + __pyx_t_4 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - /* "src/lxml/apihelpers.pxi":647 + /* "src/lxml/apihelpers.pxi":642 * item = _attributeValue(c_node, c_attr) * else: * item = (_namespacedName(c_attr), # <<<<<<<<<<<<<< * _attributeValue(c_node, c_attr)) * attributes[count] = item */ - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 647, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 642, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); @@ -26425,16 +26352,16 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node break; } - /* "src/lxml/apihelpers.pxi":649 + /* "src/lxml/apihelpers.pxi":644 * item = (_namespacedName(c_attr), * _attributeValue(c_node, c_attr)) * attributes[count] = item # <<<<<<<<<<<<<< * count += 1 * c_attr = c_attr.next */ - if (unlikely(__Pyx_SetItemInt(__pyx_v_attributes, __pyx_v_count, __pyx_v_item, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1) < 0)) __PYX_ERR(5, 649, __pyx_L1_error) + if (unlikely(__Pyx_SetItemInt(__pyx_v_attributes, __pyx_v_count, __pyx_v_item, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1) < 0)) __PYX_ERR(5, 644, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":650 + /* "src/lxml/apihelpers.pxi":645 * _attributeValue(c_node, c_attr)) * attributes[count] = item * count += 1 # <<<<<<<<<<<<<< @@ -26443,7 +26370,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ __pyx_v_count = (__pyx_v_count + 1); - /* "src/lxml/apihelpers.pxi":641 + /* "src/lxml/apihelpers.pxi":636 * count = 0 * while c_attr is not NULL: * if c_attr.type == tree.XML_ATTRIBUTE_NODE: # <<<<<<<<<<<<<< @@ -26452,7 +26379,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node */ } - /* "src/lxml/apihelpers.pxi":651 + /* "src/lxml/apihelpers.pxi":646 * attributes[count] = item * count += 1 * c_attr = c_attr.next # <<<<<<<<<<<<<< @@ -26463,7 +26390,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_v_c_attr = __pyx_t_1; } - /* "src/lxml/apihelpers.pxi":652 + /* "src/lxml/apihelpers.pxi":647 * count += 1 * c_attr = c_attr.next * return attributes # <<<<<<<<<<<<<< @@ -26475,7 +26402,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node __pyx_r = __pyx_v_attributes; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":622 + /* "src/lxml/apihelpers.pxi":617 * return 0 * * cdef list _collectAttributes(xmlNode* c_node, int collecttype): # <<<<<<<<<<<<<< @@ -26498,7 +26425,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node return __pyx_r; } -/* "src/lxml/apihelpers.pxi":660 +/* "src/lxml/apihelpers.pxi":655 * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match * * cdef object _stripEncodingDeclaration(object xml_string): # <<<<<<<<<<<<<< @@ -26516,7 +26443,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_ PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("_stripEncodingDeclaration", 0); - /* "src/lxml/apihelpers.pxi":662 + /* "src/lxml/apihelpers.pxi":657 * cdef object _stripEncodingDeclaration(object xml_string): * # this is a hack to remove the XML encoding declaration from unicode * return __REPLACE_XML_ENCODING(ur'\g<1>\g<2>', xml_string) # <<<<<<<<<<<<<< @@ -26540,7 +26467,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_ #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_g_1_g_2, __pyx_v_xml_string}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 662, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 657, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else @@ -26548,13 +26475,13 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_ #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_g_1_g_2, __pyx_v_xml_string}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 662, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 657, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { - __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 662, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_3) { __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; @@ -26565,7 +26492,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_ __Pyx_INCREF(__pyx_v_xml_string); __Pyx_GIVEREF(__pyx_v_xml_string); PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_xml_string); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 662, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -26574,7 +26501,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_ __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":660 + /* "src/lxml/apihelpers.pxi":655 * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match * * cdef object _stripEncodingDeclaration(object xml_string): # <<<<<<<<<<<<<< @@ -26596,7 +26523,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":664 +/* "src/lxml/apihelpers.pxi":659 * return __REPLACE_XML_ENCODING(ur'\g<1>\g<2>', xml_string) * * cdef bint _hasEncodingDeclaration(object xml_string) except -1: # <<<<<<<<<<<<<< @@ -26613,7 +26540,7 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st int __pyx_t_4; __Pyx_RefNannySetupContext("_hasEncodingDeclaration", 0); - /* "src/lxml/apihelpers.pxi":666 + /* "src/lxml/apihelpers.pxi":661 * cdef bint _hasEncodingDeclaration(object xml_string) except -1: * # check if a (unicode) string has an XML encoding declaration * return __HAS_XML_ENCODING(xml_string) is not None # <<<<<<<<<<<<<< @@ -26633,7 +26560,7 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st } __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_xml_string) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_xml_string); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 666, __pyx_L1_error) + if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 661, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = (__pyx_t_1 != Py_None); @@ -26641,7 +26568,7 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st __pyx_r = __pyx_t_4; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":664 + /* "src/lxml/apihelpers.pxi":659 * return __REPLACE_XML_ENCODING(ur'\g<1>\g<2>', xml_string) * * cdef bint _hasEncodingDeclaration(object xml_string) except -1: # <<<<<<<<<<<<<< @@ -26661,7 +26588,7 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st return __pyx_r; } -/* "src/lxml/apihelpers.pxi":668 +/* "src/lxml/apihelpers.pxi":663 * return __HAS_XML_ENCODING(xml_string) is not None * * cdef inline bint _hasText(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -26676,7 +26603,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasText(xmlNode *__pyx_v_c_node) int __pyx_t_2; __Pyx_RefNannySetupContext("_hasText", 0); - /* "src/lxml/apihelpers.pxi":669 + /* "src/lxml/apihelpers.pxi":664 * * cdef inline bint _hasText(xmlNode* c_node): * return c_node is not NULL and _textNodeOrSkip(c_node.children) is not NULL # <<<<<<<<<<<<<< @@ -26695,7 +26622,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasText(xmlNode *__pyx_v_c_node) __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":668 + /* "src/lxml/apihelpers.pxi":663 * return __HAS_XML_ENCODING(xml_string) is not None * * cdef inline bint _hasText(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -26709,7 +26636,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasText(xmlNode *__pyx_v_c_node) return __pyx_r; } -/* "src/lxml/apihelpers.pxi":671 +/* "src/lxml/apihelpers.pxi":666 * return c_node is not NULL and _textNodeOrSkip(c_node.children) is not NULL * * cdef inline bint _hasTail(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -26724,7 +26651,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasTail(xmlNode *__pyx_v_c_node) int __pyx_t_2; __Pyx_RefNannySetupContext("_hasTail", 0); - /* "src/lxml/apihelpers.pxi":672 + /* "src/lxml/apihelpers.pxi":667 * * cdef inline bint _hasTail(xmlNode* c_node): * return c_node is not NULL and _textNodeOrSkip(c_node.next) is not NULL # <<<<<<<<<<<<<< @@ -26743,7 +26670,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasTail(xmlNode *__pyx_v_c_node) __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":671 + /* "src/lxml/apihelpers.pxi":666 * return c_node is not NULL and _textNodeOrSkip(c_node.children) is not NULL * * cdef inline bint _hasTail(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -26757,7 +26684,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasTail(xmlNode *__pyx_v_c_node) return __pyx_r; } -/* "src/lxml/apihelpers.pxi":674 +/* "src/lxml/apihelpers.pxi":669 * return c_node is not NULL and _textNodeOrSkip(c_node.next) is not NULL * * cdef _collectText(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -26780,7 +26707,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { unsigned char *__pyx_t_6; __Pyx_RefNannySetupContext("_collectText", 0); - /* "src/lxml/apihelpers.pxi":685 + /* "src/lxml/apihelpers.pxi":680 * cdef xmlNode* c_node_cur * # check for multiple text nodes * scount = 0 # <<<<<<<<<<<<<< @@ -26789,7 +26716,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { */ __pyx_v_scount = 0; - /* "src/lxml/apihelpers.pxi":686 + /* "src/lxml/apihelpers.pxi":681 * # check for multiple text nodes * scount = 0 * c_text = NULL # <<<<<<<<<<<<<< @@ -26798,7 +26725,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { */ __pyx_v_c_text = NULL; - /* "src/lxml/apihelpers.pxi":687 + /* "src/lxml/apihelpers.pxi":682 * scount = 0 * c_text = NULL * c_node_cur = c_node = _textNodeOrSkip(c_node) # <<<<<<<<<<<<<< @@ -26809,7 +26736,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_v_c_node_cur = __pyx_t_1; __pyx_v_c_node = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":688 + /* "src/lxml/apihelpers.pxi":683 * c_text = NULL * c_node_cur = c_node = _textNodeOrSkip(c_node) * while c_node_cur is not NULL: # <<<<<<<<<<<<<< @@ -26820,7 +26747,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_2 = ((__pyx_v_c_node_cur != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":689 + /* "src/lxml/apihelpers.pxi":684 * c_node_cur = c_node = _textNodeOrSkip(c_node) * while c_node_cur is not NULL: * if c_node_cur.content[0] != c'\0': # <<<<<<<<<<<<<< @@ -26830,7 +26757,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_2 = (((__pyx_v_c_node_cur->content[0]) != '\x00') != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":690 + /* "src/lxml/apihelpers.pxi":685 * while c_node_cur is not NULL: * if c_node_cur.content[0] != c'\0': * c_text = c_node_cur.content # <<<<<<<<<<<<<< @@ -26840,7 +26767,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_3 = __pyx_v_c_node_cur->content; __pyx_v_c_text = __pyx_t_3; - /* "src/lxml/apihelpers.pxi":689 + /* "src/lxml/apihelpers.pxi":684 * c_node_cur = c_node = _textNodeOrSkip(c_node) * while c_node_cur is not NULL: * if c_node_cur.content[0] != c'\0': # <<<<<<<<<<<<<< @@ -26849,7 +26776,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { */ } - /* "src/lxml/apihelpers.pxi":691 + /* "src/lxml/apihelpers.pxi":686 * if c_node_cur.content[0] != c'\0': * c_text = c_node_cur.content * scount += 1 # <<<<<<<<<<<<<< @@ -26858,7 +26785,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { */ __pyx_v_scount = (__pyx_v_scount + 1); - /* "src/lxml/apihelpers.pxi":692 + /* "src/lxml/apihelpers.pxi":687 * c_text = c_node_cur.content * scount += 1 * c_node_cur = _textNodeOrSkip(c_node_cur.next) # <<<<<<<<<<<<<< @@ -26868,7 +26795,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_v_c_node_cur = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node_cur->next); } - /* "src/lxml/apihelpers.pxi":695 + /* "src/lxml/apihelpers.pxi":690 * * # handle two most common cases first * if c_text is NULL: # <<<<<<<<<<<<<< @@ -26878,7 +26805,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_2 = ((__pyx_v_c_text == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":696 + /* "src/lxml/apihelpers.pxi":691 * # handle two most common cases first * if c_text is NULL: * return '' if scount > 0 else None # <<<<<<<<<<<<<< @@ -26897,7 +26824,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_4 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":695 + /* "src/lxml/apihelpers.pxi":690 * * # handle two most common cases first * if c_text is NULL: # <<<<<<<<<<<<<< @@ -26906,7 +26833,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { */ } - /* "src/lxml/apihelpers.pxi":697 + /* "src/lxml/apihelpers.pxi":692 * if c_text is NULL: * return '' if scount > 0 else None * if scount == 1: # <<<<<<<<<<<<<< @@ -26916,7 +26843,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_2 = ((__pyx_v_scount == 1) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":698 + /* "src/lxml/apihelpers.pxi":693 * return '' if scount > 0 else None * if scount == 1: * return funicode(c_text) # <<<<<<<<<<<<<< @@ -26924,13 +26851,13 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { * # the rest is not performance critical anymore */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 698, __pyx_L1_error) + __pyx_t_4 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":697 + /* "src/lxml/apihelpers.pxi":692 * if c_text is NULL: * return '' if scount > 0 else None * if scount == 1: # <<<<<<<<<<<<<< @@ -26939,7 +26866,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { */ } - /* "src/lxml/apihelpers.pxi":701 + /* "src/lxml/apihelpers.pxi":696 * * # the rest is not performance critical anymore * result = b'' # <<<<<<<<<<<<<< @@ -26949,7 +26876,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __Pyx_INCREF(__pyx_kp_b__12); __pyx_v_result = __pyx_kp_b__12; - /* "src/lxml/apihelpers.pxi":702 + /* "src/lxml/apihelpers.pxi":697 * # the rest is not performance critical anymore * result = b'' * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -26960,22 +26887,22 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":703 + /* "src/lxml/apihelpers.pxi":698 * result = b'' * while c_node is not NULL: * result += c_node.content # <<<<<<<<<<<<<< * c_node = _textNodeOrSkip(c_node.next) * return funicode(result) */ - __pyx_t_4 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_node->content)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 703, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_node->content)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 703, __pyx_L1_error) + __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_5)); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":704 + /* "src/lxml/apihelpers.pxi":699 * while c_node is not NULL: * result += c_node.content * c_node = _textNodeOrSkip(c_node.next) # <<<<<<<<<<<<<< @@ -26985,7 +26912,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __pyx_v_c_node = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node->next); } - /* "src/lxml/apihelpers.pxi":705 + /* "src/lxml/apihelpers.pxi":700 * result += c_node.content * c_node = _textNodeOrSkip(c_node.next) * return funicode(result) # <<<<<<<<<<<<<< @@ -26995,16 +26922,16 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { __Pyx_XDECREF(__pyx_r); if (unlikely(__pyx_v_result == Py_None)) { PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); - __PYX_ERR(5, 705, __pyx_L1_error) + __PYX_ERR(5, 700, __pyx_L1_error) } - __pyx_t_6 = __Pyx_PyBytes_AsWritableUString(__pyx_v_result); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(5, 705, __pyx_L1_error) - __pyx_t_5 = __pyx_f_4lxml_5etree_funicode(((const xmlChar *)((unsigned char *)__pyx_t_6))); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 705, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyBytes_AsWritableUString(__pyx_v_result); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(5, 700, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree_funicode(((const xmlChar *)((unsigned char *)__pyx_t_6))); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":674 + /* "src/lxml/apihelpers.pxi":669 * return c_node is not NULL and _textNodeOrSkip(c_node.next) is not NULL * * cdef _collectText(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27025,7 +26952,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":707 +/* "src/lxml/apihelpers.pxi":702 * return funicode(result) * * cdef void _removeText(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27039,7 +26966,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { int __pyx_t_1; __Pyx_RefNannySetupContext("_removeText", 0); - /* "src/lxml/apihelpers.pxi":713 + /* "src/lxml/apihelpers.pxi":708 * """ * cdef xmlNode* c_next * c_node = _textNodeOrSkip(c_node) # <<<<<<<<<<<<<< @@ -27048,7 +26975,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { */ __pyx_v_c_node = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":714 + /* "src/lxml/apihelpers.pxi":709 * cdef xmlNode* c_next * c_node = _textNodeOrSkip(c_node) * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -27059,7 +26986,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":715 + /* "src/lxml/apihelpers.pxi":710 * c_node = _textNodeOrSkip(c_node) * while c_node is not NULL: * c_next = _textNodeOrSkip(c_node.next) # <<<<<<<<<<<<<< @@ -27068,7 +26995,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { */ __pyx_v_c_next = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node->next); - /* "src/lxml/apihelpers.pxi":716 + /* "src/lxml/apihelpers.pxi":711 * while c_node is not NULL: * c_next = _textNodeOrSkip(c_node.next) * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -27077,7 +27004,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":717 + /* "src/lxml/apihelpers.pxi":712 * c_next = _textNodeOrSkip(c_node.next) * tree.xmlUnlinkNode(c_node) * tree.xmlFreeNode(c_node) # <<<<<<<<<<<<<< @@ -27086,7 +27013,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { */ xmlFreeNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":718 + /* "src/lxml/apihelpers.pxi":713 * tree.xmlUnlinkNode(c_node) * tree.xmlFreeNode(c_node) * c_node = c_next # <<<<<<<<<<<<<< @@ -27096,7 +27023,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { __pyx_v_c_node = __pyx_v_c_next; } - /* "src/lxml/apihelpers.pxi":707 + /* "src/lxml/apihelpers.pxi":702 * return funicode(result) * * cdef void _removeText(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27108,7 +27035,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) { __Pyx_RefNannyFinishContext(); } -/* "src/lxml/apihelpers.pxi":720 +/* "src/lxml/apihelpers.pxi":715 * c_node = c_next * * cdef xmlNode* _createTextNode(xmlDoc* doc, value) except NULL: # <<<<<<<<<<<<<< @@ -27127,7 +27054,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("_createTextNode", 0); - /* "src/lxml/apihelpers.pxi":722 + /* "src/lxml/apihelpers.pxi":717 * cdef xmlNode* _createTextNode(xmlDoc* doc, value) except NULL: * cdef xmlNode* c_text_node * if isinstance(value, CDATA): # <<<<<<<<<<<<<< @@ -27138,7 +27065,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":724 + /* "src/lxml/apihelpers.pxi":719 * if isinstance(value, CDATA): * c_text_node = tree.xmlNewCDataBlock( * doc, _xcstr((value)._utf8_data), # <<<<<<<<<<<<<< @@ -27148,7 +27075,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje __pyx_t_3 = ((struct __pyx_obj_4lxml_5etree_CDATA *)__pyx_v_value)->_utf8_data; __Pyx_INCREF(__pyx_t_3); - /* "src/lxml/apihelpers.pxi":725 + /* "src/lxml/apihelpers.pxi":720 * c_text_node = tree.xmlNewCDataBlock( * doc, _xcstr((value)._utf8_data), * python.PyBytes_GET_SIZE((value)._utf8_data)) # <<<<<<<<<<<<<< @@ -27158,7 +27085,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje __pyx_t_4 = ((struct __pyx_obj_4lxml_5etree_CDATA *)__pyx_v_value)->_utf8_data; __Pyx_INCREF(__pyx_t_4); - /* "src/lxml/apihelpers.pxi":723 + /* "src/lxml/apihelpers.pxi":718 * cdef xmlNode* c_text_node * if isinstance(value, CDATA): * c_text_node = tree.xmlNewCDataBlock( # <<<<<<<<<<<<<< @@ -27169,7 +27096,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":722 + /* "src/lxml/apihelpers.pxi":717 * cdef xmlNode* _createTextNode(xmlDoc* doc, value) except NULL: * cdef xmlNode* c_text_node * if isinstance(value, CDATA): # <<<<<<<<<<<<<< @@ -27179,7 +27106,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":727 + /* "src/lxml/apihelpers.pxi":722 * python.PyBytes_GET_SIZE((value)._utf8_data)) * else: * text = _utf8(value) # <<<<<<<<<<<<<< @@ -27187,12 +27114,12 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje * if not c_text_node: */ /*else*/ { - __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 727, __pyx_L1_error) + __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_text = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":728 + /* "src/lxml/apihelpers.pxi":723 * else: * text = _utf8(value) * c_text_node = tree.xmlNewDocText(doc, _xcstr(text)) # <<<<<<<<<<<<<< @@ -27203,7 +27130,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje } __pyx_L3:; - /* "src/lxml/apihelpers.pxi":729 + /* "src/lxml/apihelpers.pxi":724 * text = _utf8(value) * c_text_node = tree.xmlNewDocText(doc, _xcstr(text)) * if not c_text_node: # <<<<<<<<<<<<<< @@ -27213,16 +27140,16 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje __pyx_t_2 = ((!(__pyx_v_c_text_node != 0)) != 0); if (unlikely(__pyx_t_2)) { - /* "src/lxml/apihelpers.pxi":730 + /* "src/lxml/apihelpers.pxi":725 * c_text_node = tree.xmlNewDocText(doc, _xcstr(text)) * if not c_text_node: * raise MemoryError() # <<<<<<<<<<<<<< * return c_text_node * */ - PyErr_NoMemory(); __PYX_ERR(5, 730, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(5, 725, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":729 + /* "src/lxml/apihelpers.pxi":724 * text = _utf8(value) * c_text_node = tree.xmlNewDocText(doc, _xcstr(text)) * if not c_text_node: # <<<<<<<<<<<<<< @@ -27231,7 +27158,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje */ } - /* "src/lxml/apihelpers.pxi":731 + /* "src/lxml/apihelpers.pxi":726 * if not c_text_node: * raise MemoryError() * return c_text_node # <<<<<<<<<<<<<< @@ -27241,7 +27168,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje __pyx_r = __pyx_v_c_text_node; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":720 + /* "src/lxml/apihelpers.pxi":715 * c_node = c_next * * cdef xmlNode* _createTextNode(xmlDoc* doc, value) except NULL: # <<<<<<<<<<<<<< @@ -27261,7 +27188,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createTextNode(xmlDoc *__pyx_v_doc, PyObje return __pyx_r; } -/* "src/lxml/apihelpers.pxi":733 +/* "src/lxml/apihelpers.pxi":728 * return c_text_node * * cdef int _setNodeText(xmlNode* c_node, value) except -1: # <<<<<<<<<<<<<< @@ -27278,7 +27205,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * xmlNode *__pyx_t_3; __Pyx_RefNannySetupContext("_setNodeText", 0); - /* "src/lxml/apihelpers.pxi":735 + /* "src/lxml/apihelpers.pxi":730 * cdef int _setNodeText(xmlNode* c_node, value) except -1: * # remove all text nodes at the start first * _removeText(c_node.children) # <<<<<<<<<<<<<< @@ -27287,7 +27214,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * */ __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->children); - /* "src/lxml/apihelpers.pxi":736 + /* "src/lxml/apihelpers.pxi":731 * # remove all text nodes at the start first * _removeText(c_node.children) * if value is None: # <<<<<<<<<<<<<< @@ -27298,7 +27225,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":737 + /* "src/lxml/apihelpers.pxi":732 * _removeText(c_node.children) * if value is None: * return 0 # <<<<<<<<<<<<<< @@ -27308,7 +27235,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":736 + /* "src/lxml/apihelpers.pxi":731 * # remove all text nodes at the start first * _removeText(c_node.children) * if value is None: # <<<<<<<<<<<<<< @@ -27317,17 +27244,17 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * */ } - /* "src/lxml/apihelpers.pxi":739 + /* "src/lxml/apihelpers.pxi":734 * return 0 * # now add new text node with value at start * c_text_node = _createTextNode(c_node.doc, value) # <<<<<<<<<<<<<< * if c_node.children is NULL: * tree.xmlAddChild(c_node, c_text_node) */ - __pyx_t_3 = __pyx_f_4lxml_5etree__createTextNode(__pyx_v_c_node->doc, __pyx_v_value); if (unlikely(__pyx_t_3 == ((xmlNode *)NULL))) __PYX_ERR(5, 739, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__createTextNode(__pyx_v_c_node->doc, __pyx_v_value); if (unlikely(__pyx_t_3 == ((xmlNode *)NULL))) __PYX_ERR(5, 734, __pyx_L1_error) __pyx_v_c_text_node = __pyx_t_3; - /* "src/lxml/apihelpers.pxi":740 + /* "src/lxml/apihelpers.pxi":735 * # now add new text node with value at start * c_text_node = _createTextNode(c_node.doc, value) * if c_node.children is NULL: # <<<<<<<<<<<<<< @@ -27337,7 +27264,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * __pyx_t_2 = ((__pyx_v_c_node->children == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":741 + /* "src/lxml/apihelpers.pxi":736 * c_text_node = _createTextNode(c_node.doc, value) * if c_node.children is NULL: * tree.xmlAddChild(c_node, c_text_node) # <<<<<<<<<<<<<< @@ -27346,7 +27273,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * */ (void)(xmlAddChild(__pyx_v_c_node, __pyx_v_c_text_node)); - /* "src/lxml/apihelpers.pxi":740 + /* "src/lxml/apihelpers.pxi":735 * # now add new text node with value at start * c_text_node = _createTextNode(c_node.doc, value) * if c_node.children is NULL: # <<<<<<<<<<<<<< @@ -27356,7 +27283,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * goto __pyx_L4; } - /* "src/lxml/apihelpers.pxi":743 + /* "src/lxml/apihelpers.pxi":738 * tree.xmlAddChild(c_node, c_text_node) * else: * tree.xmlAddPrevSibling(c_node.children, c_text_node) # <<<<<<<<<<<<<< @@ -27368,7 +27295,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * } __pyx_L4:; - /* "src/lxml/apihelpers.pxi":744 + /* "src/lxml/apihelpers.pxi":739 * else: * tree.xmlAddPrevSibling(c_node.children, c_text_node) * return 0 # <<<<<<<<<<<<<< @@ -27378,7 +27305,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":733 + /* "src/lxml/apihelpers.pxi":728 * return c_text_node * * cdef int _setNodeText(xmlNode* c_node, value) except -1: # <<<<<<<<<<<<<< @@ -27395,7 +27322,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject * return __pyx_r; } -/* "src/lxml/apihelpers.pxi":746 +/* "src/lxml/apihelpers.pxi":741 * return 0 * * cdef int _setTailText(xmlNode* c_node, value) except -1: # <<<<<<<<<<<<<< @@ -27412,7 +27339,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * xmlNode *__pyx_t_3; __Pyx_RefNannySetupContext("_setTailText", 0); - /* "src/lxml/apihelpers.pxi":748 + /* "src/lxml/apihelpers.pxi":743 * cdef int _setTailText(xmlNode* c_node, value) except -1: * # remove all text nodes at the start first * _removeText(c_node.next) # <<<<<<<<<<<<<< @@ -27421,7 +27348,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * */ __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->next); - /* "src/lxml/apihelpers.pxi":749 + /* "src/lxml/apihelpers.pxi":744 * # remove all text nodes at the start first * _removeText(c_node.next) * if value is None: # <<<<<<<<<<<<<< @@ -27432,7 +27359,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":750 + /* "src/lxml/apihelpers.pxi":745 * _removeText(c_node.next) * if value is None: * return 0 # <<<<<<<<<<<<<< @@ -27442,7 +27369,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":749 + /* "src/lxml/apihelpers.pxi":744 * # remove all text nodes at the start first * _removeText(c_node.next) * if value is None: # <<<<<<<<<<<<<< @@ -27451,17 +27378,17 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * */ } - /* "src/lxml/apihelpers.pxi":752 + /* "src/lxml/apihelpers.pxi":747 * return 0 * # now append new text node with value * c_text_node = _createTextNode(c_node.doc, value) # <<<<<<<<<<<<<< * tree.xmlAddNextSibling(c_node, c_text_node) * return 0 */ - __pyx_t_3 = __pyx_f_4lxml_5etree__createTextNode(__pyx_v_c_node->doc, __pyx_v_value); if (unlikely(__pyx_t_3 == ((xmlNode *)NULL))) __PYX_ERR(5, 752, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__createTextNode(__pyx_v_c_node->doc, __pyx_v_value); if (unlikely(__pyx_t_3 == ((xmlNode *)NULL))) __PYX_ERR(5, 747, __pyx_L1_error) __pyx_v_c_text_node = __pyx_t_3; - /* "src/lxml/apihelpers.pxi":753 + /* "src/lxml/apihelpers.pxi":748 * # now append new text node with value * c_text_node = _createTextNode(c_node.doc, value) * tree.xmlAddNextSibling(c_node, c_text_node) # <<<<<<<<<<<<<< @@ -27470,7 +27397,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * */ (void)(xmlAddNextSibling(__pyx_v_c_node, __pyx_v_c_text_node)); - /* "src/lxml/apihelpers.pxi":754 + /* "src/lxml/apihelpers.pxi":749 * c_text_node = _createTextNode(c_node.doc, value) * tree.xmlAddNextSibling(c_node, c_text_node) * return 0 # <<<<<<<<<<<<<< @@ -27480,7 +27407,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":746 + /* "src/lxml/apihelpers.pxi":741 * return 0 * * cdef int _setTailText(xmlNode* c_node, value) except -1: # <<<<<<<<<<<<<< @@ -27497,7 +27424,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject * return __pyx_r; } -/* "src/lxml/apihelpers.pxi":756 +/* "src/lxml/apihelpers.pxi":751 * return 0 * * cdef bytes _resolveQNameText(_Element element, value): # <<<<<<<<<<<<<< @@ -27519,14 +27446,14 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py xmlNs *__pyx_t_6; __Pyx_RefNannySetupContext("_resolveQNameText", 0); - /* "src/lxml/apihelpers.pxi":758 + /* "src/lxml/apihelpers.pxi":753 * cdef bytes _resolveQNameText(_Element element, value): * cdef xmlNs* c_ns * ns, tag = _getNsTag(value) # <<<<<<<<<<<<<< * if ns is None: * return tag */ - __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 758, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; @@ -27534,7 +27461,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 758, __pyx_L1_error) + __PYX_ERR(5, 753, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); @@ -27542,21 +27469,21 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 758, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 758, __pyx_L1_error) + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 758, __pyx_L1_error) + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 753, __pyx_L1_error) } __pyx_v_ns = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_tag = __pyx_t_3; __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":759 + /* "src/lxml/apihelpers.pxi":754 * cdef xmlNs* c_ns * ns, tag = _getNsTag(value) * if ns is None: # <<<<<<<<<<<<<< @@ -27567,7 +27494,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { - /* "src/lxml/apihelpers.pxi":760 + /* "src/lxml/apihelpers.pxi":755 * ns, tag = _getNsTag(value) * if ns is None: * return tag # <<<<<<<<<<<<<< @@ -27575,12 +27502,12 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py * c_ns = element._doc._findOrBuildNodeNs( */ __Pyx_XDECREF(__pyx_r); - if (!(likely(PyBytes_CheckExact(__pyx_v_tag))||((__pyx_v_tag) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_tag)->tp_name), 0))) __PYX_ERR(5, 760, __pyx_L1_error) + if (!(likely(PyBytes_CheckExact(__pyx_v_tag))||((__pyx_v_tag) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_tag)->tp_name), 0))) __PYX_ERR(5, 755, __pyx_L1_error) __Pyx_INCREF(__pyx_v_tag); __pyx_r = ((PyObject*)__pyx_v_tag); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":759 + /* "src/lxml/apihelpers.pxi":754 * cdef xmlNs* c_ns * ns, tag = _getNsTag(value) * if ns is None: # <<<<<<<<<<<<<< @@ -27589,7 +27516,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py */ } - /* "src/lxml/apihelpers.pxi":762 + /* "src/lxml/apihelpers.pxi":757 * return tag * else: * c_ns = element._doc._findOrBuildNodeNs( # <<<<<<<<<<<<<< @@ -27598,17 +27525,17 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py */ /*else*/ { - /* "src/lxml/apihelpers.pxi":763 + /* "src/lxml/apihelpers.pxi":758 * else: * c_ns = element._doc._findOrBuildNodeNs( * element._c_node, _xcstr(ns), NULL, 0) # <<<<<<<<<<<<<< * return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag)) * */ - __pyx_t_6 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 0); if (unlikely(__pyx_t_6 == ((xmlNs *)NULL))) __PYX_ERR(5, 762, __pyx_L1_error) + __pyx_t_6 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 0); if (unlikely(__pyx_t_6 == ((xmlNs *)NULL))) __PYX_ERR(5, 757, __pyx_L1_error) __pyx_v_c_ns = __pyx_t_6; - /* "src/lxml/apihelpers.pxi":764 + /* "src/lxml/apihelpers.pxi":759 * c_ns = element._doc._findOrBuildNodeNs( * element._c_node, _xcstr(ns), NULL, 0) * return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag)) # <<<<<<<<<<<<<< @@ -27616,14 +27543,14 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py * cdef inline bint _hasChild(xmlNode* c_node): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyBytes_FromFormat(((char *)"%s:%s"), __pyx_v_c_ns->prefix, PyBytes_AS_STRING(__pyx_v_tag)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 764, __pyx_L1_error) + __pyx_t_1 = PyBytes_FromFormat(((char *)"%s:%s"), __pyx_v_c_ns->prefix, PyBytes_AS_STRING(__pyx_v_tag)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":756 + /* "src/lxml/apihelpers.pxi":751 * return 0 * * cdef bytes _resolveQNameText(_Element element, value): # <<<<<<<<<<<<<< @@ -27646,7 +27573,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py return __pyx_r; } -/* "src/lxml/apihelpers.pxi":766 +/* "src/lxml/apihelpers.pxi":761 * return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag)) * * cdef inline bint _hasChild(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27661,7 +27588,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasChild(xmlNode *__pyx_v_c_node) int __pyx_t_2; __Pyx_RefNannySetupContext("_hasChild", 0); - /* "src/lxml/apihelpers.pxi":767 + /* "src/lxml/apihelpers.pxi":762 * * cdef inline bint _hasChild(xmlNode* c_node): * return c_node is not NULL and _findChildForwards(c_node, 0) is not NULL # <<<<<<<<<<<<<< @@ -27680,7 +27607,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasChild(xmlNode *__pyx_v_c_node) __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":766 + /* "src/lxml/apihelpers.pxi":761 * return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag)) * * cdef inline bint _hasChild(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27694,7 +27621,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasChild(xmlNode *__pyx_v_c_node) return __pyx_r; } -/* "src/lxml/apihelpers.pxi":769 +/* "src/lxml/apihelpers.pxi":764 * return c_node is not NULL and _findChildForwards(c_node, 0) is not NULL * * cdef inline Py_ssize_t _countElements(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27710,7 +27637,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p xmlNode *__pyx_t_2; __Pyx_RefNannySetupContext("_countElements", 0); - /* "src/lxml/apihelpers.pxi":772 + /* "src/lxml/apihelpers.pxi":767 * u"Counts the elements within the following siblings and the node itself." * cdef Py_ssize_t count * count = 0 # <<<<<<<<<<<<<< @@ -27719,7 +27646,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p */ __pyx_v_count = 0; - /* "src/lxml/apihelpers.pxi":773 + /* "src/lxml/apihelpers.pxi":768 * cdef Py_ssize_t count * count = 0 * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -27730,7 +27657,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":774 + /* "src/lxml/apihelpers.pxi":769 * count = 0 * while c_node is not NULL: * if _isElement(c_node): # <<<<<<<<<<<<<< @@ -27740,7 +27667,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p __pyx_t_1 = (_isElement(__pyx_v_c_node) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":775 + /* "src/lxml/apihelpers.pxi":770 * while c_node is not NULL: * if _isElement(c_node): * count += 1 # <<<<<<<<<<<<<< @@ -27749,7 +27676,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p */ __pyx_v_count = (__pyx_v_count + 1); - /* "src/lxml/apihelpers.pxi":774 + /* "src/lxml/apihelpers.pxi":769 * count = 0 * while c_node is not NULL: * if _isElement(c_node): # <<<<<<<<<<<<<< @@ -27758,7 +27685,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p */ } - /* "src/lxml/apihelpers.pxi":776 + /* "src/lxml/apihelpers.pxi":771 * if _isElement(c_node): * count += 1 * c_node = c_node.next # <<<<<<<<<<<<<< @@ -27769,7 +27696,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p __pyx_v_c_node = __pyx_t_2; } - /* "src/lxml/apihelpers.pxi":777 + /* "src/lxml/apihelpers.pxi":772 * count += 1 * c_node = c_node.next * return count # <<<<<<<<<<<<<< @@ -27779,7 +27706,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p __pyx_r = __pyx_v_count; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":769 + /* "src/lxml/apihelpers.pxi":764 * return c_node is not NULL and _findChildForwards(c_node, 0) is not NULL * * cdef inline Py_ssize_t _countElements(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -27793,7 +27720,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p return __pyx_r; } -/* "src/lxml/apihelpers.pxi":779 +/* "src/lxml/apihelpers.pxi":774 * return count * * cdef int _findChildSlice( # <<<<<<<<<<<<<< @@ -27813,7 +27740,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x int __pyx_t_4; __Pyx_RefNannySetupContext("_findChildSlice", 0); - /* "src/lxml/apihelpers.pxi":787 + /* "src/lxml/apihelpers.pxi":782 * pointer arguments. * """ * cdef Py_ssize_t start = 0, stop = 0, childcount # <<<<<<<<<<<<<< @@ -27823,7 +27750,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x __pyx_v_start = 0; __pyx_v_stop = 0; - /* "src/lxml/apihelpers.pxi":788 + /* "src/lxml/apihelpers.pxi":783 * """ * cdef Py_ssize_t start = 0, stop = 0, childcount * childcount = _countElements(c_parent.children) # <<<<<<<<<<<<<< @@ -27832,7 +27759,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x */ __pyx_v_childcount = __pyx_f_4lxml_5etree__countElements(__pyx_v_c_parent->children); - /* "src/lxml/apihelpers.pxi":789 + /* "src/lxml/apihelpers.pxi":784 * cdef Py_ssize_t start = 0, stop = 0, childcount * childcount = _countElements(c_parent.children) * if childcount == 0: # <<<<<<<<<<<<<< @@ -27842,7 +27769,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x __pyx_t_1 = ((__pyx_v_childcount == 0) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":790 + /* "src/lxml/apihelpers.pxi":785 * childcount = _countElements(c_parent.children) * if childcount == 0: * c_start_node[0] = NULL # <<<<<<<<<<<<<< @@ -27851,7 +27778,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x */ (__pyx_v_c_start_node[0]) = NULL; - /* "src/lxml/apihelpers.pxi":791 + /* "src/lxml/apihelpers.pxi":786 * if childcount == 0: * c_start_node[0] = NULL * c_length[0] = 0 # <<<<<<<<<<<<<< @@ -27860,7 +27787,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x */ (__pyx_v_c_length[0]) = 0; - /* "src/lxml/apihelpers.pxi":792 + /* "src/lxml/apihelpers.pxi":787 * c_start_node[0] = NULL * c_length[0] = 0 * if sliceobject.step is None: # <<<<<<<<<<<<<< @@ -27871,7 +27798,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":793 + /* "src/lxml/apihelpers.pxi":788 * c_length[0] = 0 * if sliceobject.step is None: * c_step[0] = 1 # <<<<<<<<<<<<<< @@ -27880,7 +27807,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x */ (__pyx_v_c_step[0]) = 1; - /* "src/lxml/apihelpers.pxi":792 + /* "src/lxml/apihelpers.pxi":787 * c_start_node[0] = NULL * c_length[0] = 0 * if sliceobject.step is None: # <<<<<<<<<<<<<< @@ -27890,7 +27817,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x goto __pyx_L4; } - /* "src/lxml/apihelpers.pxi":795 + /* "src/lxml/apihelpers.pxi":790 * c_step[0] = 1 * else: * python._PyEval_SliceIndex(sliceobject.step, c_step) # <<<<<<<<<<<<<< @@ -27900,12 +27827,12 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x /*else*/ { __pyx_t_3 = ((PySliceObject*)__pyx_v_sliceobject)->step; __Pyx_INCREF(__pyx_t_3); - __pyx_t_4 = _PyEval_SliceIndex(__pyx_t_3, __pyx_v_c_step); if (unlikely(__pyx_t_4 == ((int)0))) __PYX_ERR(5, 795, __pyx_L1_error) + __pyx_t_4 = _PyEval_SliceIndex(__pyx_t_3, __pyx_v_c_step); if (unlikely(__pyx_t_4 == ((int)0))) __PYX_ERR(5, 790, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_L4:; - /* "src/lxml/apihelpers.pxi":796 + /* "src/lxml/apihelpers.pxi":791 * else: * python._PyEval_SliceIndex(sliceobject.step, c_step) * return 0 # <<<<<<<<<<<<<< @@ -27915,7 +27842,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":789 + /* "src/lxml/apihelpers.pxi":784 * cdef Py_ssize_t start = 0, stop = 0, childcount * childcount = _countElements(c_parent.children) * if childcount == 0: # <<<<<<<<<<<<<< @@ -27924,16 +27851,16 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x */ } - /* "src/lxml/apihelpers.pxi":797 + /* "src/lxml/apihelpers.pxi":792 * python._PyEval_SliceIndex(sliceobject.step, c_step) * return 0 * python.PySlice_GetIndicesEx( # <<<<<<<<<<<<<< * sliceobject, childcount, &start, &stop, c_step, c_length) * if start > childcount / 2: */ - __pyx_t_4 = _lx_PySlice_GetIndicesEx(__pyx_v_sliceobject, __pyx_v_childcount, (&__pyx_v_start), (&__pyx_v_stop), __pyx_v_c_step, __pyx_v_c_length); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 797, __pyx_L1_error) + __pyx_t_4 = _lx_PySlice_GetIndicesEx(__pyx_v_sliceobject, __pyx_v_childcount, (&__pyx_v_start), (&__pyx_v_stop), __pyx_v_c_step, __pyx_v_c_length); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 792, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":799 + /* "src/lxml/apihelpers.pxi":794 * python.PySlice_GetIndicesEx( * sliceobject, childcount, &start, &stop, c_step, c_length) * if start > childcount / 2: # <<<<<<<<<<<<<< @@ -27943,7 +27870,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x __pyx_t_2 = ((__pyx_v_start > __Pyx_div_Py_ssize_t(__pyx_v_childcount, 2)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":800 + /* "src/lxml/apihelpers.pxi":795 * sliceobject, childcount, &start, &stop, c_step, c_length) * if start > childcount / 2: * c_start_node[0] = _findChildBackwards(c_parent, childcount - start - 1) # <<<<<<<<<<<<<< @@ -27952,7 +27879,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x */ (__pyx_v_c_start_node[0]) = __pyx_f_4lxml_5etree__findChildBackwards(__pyx_v_c_parent, ((__pyx_v_childcount - __pyx_v_start) - 1)); - /* "src/lxml/apihelpers.pxi":799 + /* "src/lxml/apihelpers.pxi":794 * python.PySlice_GetIndicesEx( * sliceobject, childcount, &start, &stop, c_step, c_length) * if start > childcount / 2: # <<<<<<<<<<<<<< @@ -27962,7 +27889,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x goto __pyx_L5; } - /* "src/lxml/apihelpers.pxi":802 + /* "src/lxml/apihelpers.pxi":797 * c_start_node[0] = _findChildBackwards(c_parent, childcount - start - 1) * else: * c_start_node[0] = _findChild(c_parent, start) # <<<<<<<<<<<<<< @@ -27974,7 +27901,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x } __pyx_L5:; - /* "src/lxml/apihelpers.pxi":803 + /* "src/lxml/apihelpers.pxi":798 * else: * c_start_node[0] = _findChild(c_parent, start) * return 0 # <<<<<<<<<<<<<< @@ -27984,7 +27911,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":779 + /* "src/lxml/apihelpers.pxi":774 * return count * * cdef int _findChildSlice( # <<<<<<<<<<<<<< @@ -28002,7 +27929,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x return __pyx_r; } -/* "src/lxml/apihelpers.pxi":805 +/* "src/lxml/apihelpers.pxi":800 * return 0 * * cdef bint _isFullSlice(slice sliceobject) except -1: # <<<<<<<<<<<<<< @@ -28021,7 +27948,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { int __pyx_t_5; __Pyx_RefNannySetupContext("_isFullSlice", 0); - /* "src/lxml/apihelpers.pxi":808 + /* "src/lxml/apihelpers.pxi":803 * u"""Conservative guess if this slice is a full slice as in ``s[:]``. * """ * cdef Py_ssize_t step = 0 # <<<<<<<<<<<<<< @@ -28030,7 +27957,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ __pyx_v_step = 0; - /* "src/lxml/apihelpers.pxi":809 + /* "src/lxml/apihelpers.pxi":804 * """ * cdef Py_ssize_t step = 0 * if sliceobject is None: # <<<<<<<<<<<<<< @@ -28041,7 +27968,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":810 + /* "src/lxml/apihelpers.pxi":805 * cdef Py_ssize_t step = 0 * if sliceobject is None: * return 0 # <<<<<<<<<<<<<< @@ -28051,7 +27978,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":809 + /* "src/lxml/apihelpers.pxi":804 * """ * cdef Py_ssize_t step = 0 * if sliceobject is None: # <<<<<<<<<<<<<< @@ -28060,7 +27987,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ } - /* "src/lxml/apihelpers.pxi":811 + /* "src/lxml/apihelpers.pxi":806 * if sliceobject is None: * return 0 * if sliceobject.start is None and \ # <<<<<<<<<<<<<< @@ -28075,7 +28002,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { goto __pyx_L5_bool_binop_done; } - /* "src/lxml/apihelpers.pxi":812 + /* "src/lxml/apihelpers.pxi":807 * return 0 * if sliceobject.start is None and \ * sliceobject.stop is None: # <<<<<<<<<<<<<< @@ -28087,7 +28014,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; - /* "src/lxml/apihelpers.pxi":811 + /* "src/lxml/apihelpers.pxi":806 * if sliceobject is None: * return 0 * if sliceobject.start is None and \ # <<<<<<<<<<<<<< @@ -28096,7 +28023,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":813 + /* "src/lxml/apihelpers.pxi":808 * if sliceobject.start is None and \ * sliceobject.stop is None: * if sliceobject.step is None: # <<<<<<<<<<<<<< @@ -28107,7 +28034,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":814 + /* "src/lxml/apihelpers.pxi":809 * sliceobject.stop is None: * if sliceobject.step is None: * return 1 # <<<<<<<<<<<<<< @@ -28117,7 +28044,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":813 + /* "src/lxml/apihelpers.pxi":808 * if sliceobject.start is None and \ * sliceobject.stop is None: * if sliceobject.step is None: # <<<<<<<<<<<<<< @@ -28126,7 +28053,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ } - /* "src/lxml/apihelpers.pxi":815 + /* "src/lxml/apihelpers.pxi":810 * if sliceobject.step is None: * return 1 * python._PyEval_SliceIndex(sliceobject.step, &step) # <<<<<<<<<<<<<< @@ -28135,10 +28062,10 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ __pyx_t_4 = ((PySliceObject*)__pyx_v_sliceobject)->step; __Pyx_INCREF(__pyx_t_4); - __pyx_t_5 = _PyEval_SliceIndex(__pyx_t_4, (&__pyx_v_step)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(5, 815, __pyx_L1_error) + __pyx_t_5 = _PyEval_SliceIndex(__pyx_t_4, (&__pyx_v_step)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(5, 810, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":816 + /* "src/lxml/apihelpers.pxi":811 * return 1 * python._PyEval_SliceIndex(sliceobject.step, &step) * if step == 1: # <<<<<<<<<<<<<< @@ -28148,7 +28075,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_t_1 = ((__pyx_v_step == 1) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":817 + /* "src/lxml/apihelpers.pxi":812 * python._PyEval_SliceIndex(sliceobject.step, &step) * if step == 1: * return 1 # <<<<<<<<<<<<<< @@ -28158,7 +28085,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":816 + /* "src/lxml/apihelpers.pxi":811 * return 1 * python._PyEval_SliceIndex(sliceobject.step, &step) * if step == 1: # <<<<<<<<<<<<<< @@ -28167,7 +28094,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ } - /* "src/lxml/apihelpers.pxi":818 + /* "src/lxml/apihelpers.pxi":813 * if step == 1: * return 1 * return 0 # <<<<<<<<<<<<<< @@ -28177,7 +28104,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":811 + /* "src/lxml/apihelpers.pxi":806 * if sliceobject is None: * return 0 * if sliceobject.start is None and \ # <<<<<<<<<<<<<< @@ -28186,7 +28113,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { */ } - /* "src/lxml/apihelpers.pxi":819 + /* "src/lxml/apihelpers.pxi":814 * return 1 * return 0 * return 0 # <<<<<<<<<<<<<< @@ -28196,7 +28123,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":805 + /* "src/lxml/apihelpers.pxi":800 * return 0 * * cdef bint _isFullSlice(slice sliceobject) except -1: # <<<<<<<<<<<<<< @@ -28214,7 +28141,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":821 +/* "src/lxml/apihelpers.pxi":816 * return 0 * * cdef _collectChildren(_Element element): # <<<<<<<<<<<<<< @@ -28234,19 +28161,19 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx int __pyx_t_5; __Pyx_RefNannySetupContext("_collectChildren", 0); - /* "src/lxml/apihelpers.pxi":823 + /* "src/lxml/apihelpers.pxi":818 * cdef _collectChildren(_Element element): * cdef xmlNode* c_node * cdef list result = [] # <<<<<<<<<<<<<< * c_node = element._c_node.children * if c_node is not NULL: */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 823, __pyx_L1_error) + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_result = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":824 + /* "src/lxml/apihelpers.pxi":819 * cdef xmlNode* c_node * cdef list result = [] * c_node = element._c_node.children # <<<<<<<<<<<<<< @@ -28256,7 +28183,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx __pyx_t_2 = __pyx_v_element->_c_node->children; __pyx_v_c_node = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":825 + /* "src/lxml/apihelpers.pxi":820 * cdef list result = [] * c_node = element._c_node.children * if c_node is not NULL: # <<<<<<<<<<<<<< @@ -28266,7 +28193,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":826 + /* "src/lxml/apihelpers.pxi":821 * c_node = element._c_node.children * if c_node is not NULL: * if not _isElement(c_node): # <<<<<<<<<<<<<< @@ -28276,7 +28203,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx __pyx_t_3 = ((!(_isElement(__pyx_v_c_node) != 0)) != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":827 + /* "src/lxml/apihelpers.pxi":822 * if c_node is not NULL: * if not _isElement(c_node): * c_node = _nextElement(c_node) # <<<<<<<<<<<<<< @@ -28285,7 +28212,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx */ __pyx_v_c_node = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":826 + /* "src/lxml/apihelpers.pxi":821 * c_node = element._c_node.children * if c_node is not NULL: * if not _isElement(c_node): # <<<<<<<<<<<<<< @@ -28294,7 +28221,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx */ } - /* "src/lxml/apihelpers.pxi":828 + /* "src/lxml/apihelpers.pxi":823 * if not _isElement(c_node): * c_node = _nextElement(c_node) * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -28305,7 +28232,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_3) break; - /* "src/lxml/apihelpers.pxi":829 + /* "src/lxml/apihelpers.pxi":824 * c_node = _nextElement(c_node) * while c_node is not NULL: * result.append(_elementFactory(element._doc, c_node)) # <<<<<<<<<<<<<< @@ -28314,13 +28241,13 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx */ __pyx_t_1 = ((PyObject *)__pyx_v_element->_doc); __Pyx_INCREF(__pyx_t_1); - __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_1), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 829, __pyx_L1_error) + __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_1), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 829, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 824, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":830 + /* "src/lxml/apihelpers.pxi":825 * while c_node is not NULL: * result.append(_elementFactory(element._doc, c_node)) * c_node = _nextElement(c_node) # <<<<<<<<<<<<<< @@ -28330,7 +28257,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx __pyx_v_c_node = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node); } - /* "src/lxml/apihelpers.pxi":825 + /* "src/lxml/apihelpers.pxi":820 * cdef list result = [] * c_node = element._c_node.children * if c_node is not NULL: # <<<<<<<<<<<<<< @@ -28339,7 +28266,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx */ } - /* "src/lxml/apihelpers.pxi":831 + /* "src/lxml/apihelpers.pxi":826 * result.append(_elementFactory(element._doc, c_node)) * c_node = _nextElement(c_node) * return result # <<<<<<<<<<<<<< @@ -28351,7 +28278,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":821 + /* "src/lxml/apihelpers.pxi":816 * return 0 * * cdef _collectChildren(_Element element): # <<<<<<<<<<<<<< @@ -28372,7 +28299,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx return __pyx_r; } -/* "src/lxml/apihelpers.pxi":833 +/* "src/lxml/apihelpers.pxi":828 * return result * * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index): # <<<<<<<<<<<<<< @@ -28386,7 +28313,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c int __pyx_t_1; __Pyx_RefNannySetupContext("_findChild", 0); - /* "src/lxml/apihelpers.pxi":834 + /* "src/lxml/apihelpers.pxi":829 * * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index): * if index < 0: # <<<<<<<<<<<<<< @@ -28396,7 +28323,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c __pyx_t_1 = ((__pyx_v_index < 0) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":835 + /* "src/lxml/apihelpers.pxi":830 * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index): * if index < 0: * return _findChildBackwards(c_node, -index - 1) # <<<<<<<<<<<<<< @@ -28406,7 +28333,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c __pyx_r = __pyx_f_4lxml_5etree__findChildBackwards(__pyx_v_c_node, ((-__pyx_v_index) - 1)); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":834 + /* "src/lxml/apihelpers.pxi":829 * * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index): * if index < 0: # <<<<<<<<<<<<<< @@ -28415,7 +28342,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c */ } - /* "src/lxml/apihelpers.pxi":837 + /* "src/lxml/apihelpers.pxi":832 * return _findChildBackwards(c_node, -index - 1) * else: * return _findChildForwards(c_node, index) # <<<<<<<<<<<<<< @@ -28427,7 +28354,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":833 + /* "src/lxml/apihelpers.pxi":828 * return result * * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index): # <<<<<<<<<<<<<< @@ -28441,7 +28368,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c return __pyx_r; } -/* "src/lxml/apihelpers.pxi":839 +/* "src/lxml/apihelpers.pxi":834 * return _findChildForwards(c_node, index) * * cdef inline xmlNode* _findChildForwards(xmlNode* c_node, Py_ssize_t index): # <<<<<<<<<<<<<< @@ -28458,7 +28385,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ int __pyx_t_2; __Pyx_RefNannySetupContext("_findChildForwards", 0); - /* "src/lxml/apihelpers.pxi":844 + /* "src/lxml/apihelpers.pxi":839 * cdef xmlNode* c_child * cdef Py_ssize_t c * c_child = c_node.children # <<<<<<<<<<<<<< @@ -28468,7 +28395,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_t_1 = __pyx_v_c_node->children; __pyx_v_c_child = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":845 + /* "src/lxml/apihelpers.pxi":840 * cdef Py_ssize_t c * c_child = c_node.children * c = 0 # <<<<<<<<<<<<<< @@ -28477,7 +28404,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ */ __pyx_v_c = 0; - /* "src/lxml/apihelpers.pxi":846 + /* "src/lxml/apihelpers.pxi":841 * c_child = c_node.children * c = 0 * while c_child is not NULL: # <<<<<<<<<<<<<< @@ -28488,7 +28415,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_t_2 = ((__pyx_v_c_child != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":847 + /* "src/lxml/apihelpers.pxi":842 * c = 0 * while c_child is not NULL: * if _isElement(c_child): # <<<<<<<<<<<<<< @@ -28498,7 +28425,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_t_2 = (_isElement(__pyx_v_c_child) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":848 + /* "src/lxml/apihelpers.pxi":843 * while c_child is not NULL: * if _isElement(c_child): * if c == index: # <<<<<<<<<<<<<< @@ -28508,7 +28435,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_t_2 = ((__pyx_v_c == __pyx_v_index) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":849 + /* "src/lxml/apihelpers.pxi":844 * if _isElement(c_child): * if c == index: * return c_child # <<<<<<<<<<<<<< @@ -28518,7 +28445,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_r = __pyx_v_c_child; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":848 + /* "src/lxml/apihelpers.pxi":843 * while c_child is not NULL: * if _isElement(c_child): * if c == index: # <<<<<<<<<<<<<< @@ -28527,7 +28454,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ */ } - /* "src/lxml/apihelpers.pxi":850 + /* "src/lxml/apihelpers.pxi":845 * if c == index: * return c_child * c += 1 # <<<<<<<<<<<<<< @@ -28536,7 +28463,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ */ __pyx_v_c = (__pyx_v_c + 1); - /* "src/lxml/apihelpers.pxi":847 + /* "src/lxml/apihelpers.pxi":842 * c = 0 * while c_child is not NULL: * if _isElement(c_child): # <<<<<<<<<<<<<< @@ -28545,7 +28472,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ */ } - /* "src/lxml/apihelpers.pxi":851 + /* "src/lxml/apihelpers.pxi":846 * return c_child * c += 1 * c_child = c_child.next # <<<<<<<<<<<<<< @@ -28556,7 +28483,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_v_c_child = __pyx_t_1; } - /* "src/lxml/apihelpers.pxi":852 + /* "src/lxml/apihelpers.pxi":847 * c += 1 * c_child = c_child.next * return NULL # <<<<<<<<<<<<<< @@ -28566,7 +28493,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":839 + /* "src/lxml/apihelpers.pxi":834 * return _findChildForwards(c_node, index) * * cdef inline xmlNode* _findChildForwards(xmlNode* c_node, Py_ssize_t index): # <<<<<<<<<<<<<< @@ -28580,7 +28507,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":854 +/* "src/lxml/apihelpers.pxi":849 * return NULL * * cdef inline xmlNode* _findChildBackwards(xmlNode* c_node, Py_ssize_t index): # <<<<<<<<<<<<<< @@ -28597,7 +28524,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * int __pyx_t_2; __Pyx_RefNannySetupContext("_findChildBackwards", 0); - /* "src/lxml/apihelpers.pxi":860 + /* "src/lxml/apihelpers.pxi":855 * cdef xmlNode* c_child * cdef Py_ssize_t c * c_child = c_node.last # <<<<<<<<<<<<<< @@ -28607,7 +28534,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_t_1 = __pyx_v_c_node->last; __pyx_v_c_child = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":861 + /* "src/lxml/apihelpers.pxi":856 * cdef Py_ssize_t c * c_child = c_node.last * c = 0 # <<<<<<<<<<<<<< @@ -28616,7 +28543,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * */ __pyx_v_c = 0; - /* "src/lxml/apihelpers.pxi":862 + /* "src/lxml/apihelpers.pxi":857 * c_child = c_node.last * c = 0 * while c_child is not NULL: # <<<<<<<<<<<<<< @@ -28627,7 +28554,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_t_2 = ((__pyx_v_c_child != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":863 + /* "src/lxml/apihelpers.pxi":858 * c = 0 * while c_child is not NULL: * if _isElement(c_child): # <<<<<<<<<<<<<< @@ -28637,7 +28564,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_t_2 = (_isElement(__pyx_v_c_child) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":864 + /* "src/lxml/apihelpers.pxi":859 * while c_child is not NULL: * if _isElement(c_child): * if c == index: # <<<<<<<<<<<<<< @@ -28647,7 +28574,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_t_2 = ((__pyx_v_c == __pyx_v_index) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":865 + /* "src/lxml/apihelpers.pxi":860 * if _isElement(c_child): * if c == index: * return c_child # <<<<<<<<<<<<<< @@ -28657,7 +28584,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_r = __pyx_v_c_child; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":864 + /* "src/lxml/apihelpers.pxi":859 * while c_child is not NULL: * if _isElement(c_child): * if c == index: # <<<<<<<<<<<<<< @@ -28666,7 +28593,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * */ } - /* "src/lxml/apihelpers.pxi":866 + /* "src/lxml/apihelpers.pxi":861 * if c == index: * return c_child * c += 1 # <<<<<<<<<<<<<< @@ -28675,7 +28602,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * */ __pyx_v_c = (__pyx_v_c + 1); - /* "src/lxml/apihelpers.pxi":863 + /* "src/lxml/apihelpers.pxi":858 * c = 0 * while c_child is not NULL: * if _isElement(c_child): # <<<<<<<<<<<<<< @@ -28684,7 +28611,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * */ } - /* "src/lxml/apihelpers.pxi":867 + /* "src/lxml/apihelpers.pxi":862 * return c_child * c += 1 * c_child = c_child.prev # <<<<<<<<<<<<<< @@ -28695,7 +28622,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_v_c_child = __pyx_t_1; } - /* "src/lxml/apihelpers.pxi":868 + /* "src/lxml/apihelpers.pxi":863 * c += 1 * c_child = c_child.prev * return NULL # <<<<<<<<<<<<<< @@ -28705,7 +28632,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":854 + /* "src/lxml/apihelpers.pxi":849 * return NULL * * cdef inline xmlNode* _findChildBackwards(xmlNode* c_node, Py_ssize_t index): # <<<<<<<<<<<<<< @@ -28719,7 +28646,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode * return __pyx_r; } -/* "src/lxml/apihelpers.pxi":870 +/* "src/lxml/apihelpers.pxi":865 * return NULL * * cdef inline xmlNode* _textNodeOrSkip(xmlNode* c_node) nogil: # <<<<<<<<<<<<<< @@ -28732,7 +28659,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py int __pyx_t_1; xmlNode *__pyx_t_2; - /* "src/lxml/apihelpers.pxi":877 + /* "src/lxml/apihelpers.pxi":872 * nodes. * """ * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -28743,7 +28670,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":878 + /* "src/lxml/apihelpers.pxi":873 * """ * while c_node is not NULL: * if c_node.type == tree.XML_TEXT_NODE or \ # <<<<<<<<<<<<<< @@ -28754,7 +28681,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py case XML_TEXT_NODE: case XML_CDATA_SECTION_NODE: - /* "src/lxml/apihelpers.pxi":880 + /* "src/lxml/apihelpers.pxi":875 * if c_node.type == tree.XML_TEXT_NODE or \ * c_node.type == tree.XML_CDATA_SECTION_NODE: * return c_node # <<<<<<<<<<<<<< @@ -28764,7 +28691,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py __pyx_r = __pyx_v_c_node; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":878 + /* "src/lxml/apihelpers.pxi":873 * """ * while c_node is not NULL: * if c_node.type == tree.XML_TEXT_NODE or \ # <<<<<<<<<<<<<< @@ -28774,7 +28701,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py break; case XML_XINCLUDE_START: - /* "src/lxml/apihelpers.pxi":881 + /* "src/lxml/apihelpers.pxi":876 * c_node.type == tree.XML_CDATA_SECTION_NODE: * return c_node * elif c_node.type == tree.XML_XINCLUDE_START or \ # <<<<<<<<<<<<<< @@ -28783,7 +28710,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py */ case XML_XINCLUDE_END: - /* "src/lxml/apihelpers.pxi":883 + /* "src/lxml/apihelpers.pxi":878 * elif c_node.type == tree.XML_XINCLUDE_START or \ * c_node.type == tree.XML_XINCLUDE_END: * c_node = c_node.next # <<<<<<<<<<<<<< @@ -28793,7 +28720,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py __pyx_t_2 = __pyx_v_c_node->next; __pyx_v_c_node = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":881 + /* "src/lxml/apihelpers.pxi":876 * c_node.type == tree.XML_CDATA_SECTION_NODE: * return c_node * elif c_node.type == tree.XML_XINCLUDE_START or \ # <<<<<<<<<<<<<< @@ -28803,7 +28730,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py break; default: - /* "src/lxml/apihelpers.pxi":885 + /* "src/lxml/apihelpers.pxi":880 * c_node = c_node.next * else: * return NULL # <<<<<<<<<<<<<< @@ -28816,7 +28743,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py } } - /* "src/lxml/apihelpers.pxi":886 + /* "src/lxml/apihelpers.pxi":881 * else: * return NULL * return NULL # <<<<<<<<<<<<<< @@ -28826,7 +28753,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":870 + /* "src/lxml/apihelpers.pxi":865 * return NULL * * cdef inline xmlNode* _textNodeOrSkip(xmlNode* c_node) nogil: # <<<<<<<<<<<<<< @@ -28839,7 +28766,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py return __pyx_r; } -/* "src/lxml/apihelpers.pxi":888 +/* "src/lxml/apihelpers.pxi":883 * return NULL * * cdef inline xmlNode* _nextElement(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -28854,7 +28781,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v xmlNode *__pyx_t_2; __Pyx_RefNannySetupContext("_nextElement", 0); - /* "src/lxml/apihelpers.pxi":891 + /* "src/lxml/apihelpers.pxi":886 * u"""Given a node, find the next sibling that is an element. * """ * if c_node is NULL: # <<<<<<<<<<<<<< @@ -28864,7 +28791,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":892 + /* "src/lxml/apihelpers.pxi":887 * """ * if c_node is NULL: * return NULL # <<<<<<<<<<<<<< @@ -28874,7 +28801,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":891 + /* "src/lxml/apihelpers.pxi":886 * u"""Given a node, find the next sibling that is an element. * """ * if c_node is NULL: # <<<<<<<<<<<<<< @@ -28883,7 +28810,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v */ } - /* "src/lxml/apihelpers.pxi":893 + /* "src/lxml/apihelpers.pxi":888 * if c_node is NULL: * return NULL * c_node = c_node.next # <<<<<<<<<<<<<< @@ -28893,7 +28820,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_t_2 = __pyx_v_c_node->next; __pyx_v_c_node = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":894 + /* "src/lxml/apihelpers.pxi":889 * return NULL * c_node = c_node.next * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -28904,7 +28831,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":895 + /* "src/lxml/apihelpers.pxi":890 * c_node = c_node.next * while c_node is not NULL: * if _isElement(c_node): # <<<<<<<<<<<<<< @@ -28914,7 +28841,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_t_1 = (_isElement(__pyx_v_c_node) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":896 + /* "src/lxml/apihelpers.pxi":891 * while c_node is not NULL: * if _isElement(c_node): * return c_node # <<<<<<<<<<<<<< @@ -28924,7 +28851,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_r = __pyx_v_c_node; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":895 + /* "src/lxml/apihelpers.pxi":890 * c_node = c_node.next * while c_node is not NULL: * if _isElement(c_node): # <<<<<<<<<<<<<< @@ -28933,7 +28860,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v */ } - /* "src/lxml/apihelpers.pxi":897 + /* "src/lxml/apihelpers.pxi":892 * if _isElement(c_node): * return c_node * c_node = c_node.next # <<<<<<<<<<<<<< @@ -28944,7 +28871,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_v_c_node = __pyx_t_2; } - /* "src/lxml/apihelpers.pxi":898 + /* "src/lxml/apihelpers.pxi":893 * return c_node * c_node = c_node.next * return NULL # <<<<<<<<<<<<<< @@ -28954,7 +28881,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":888 + /* "src/lxml/apihelpers.pxi":883 * return NULL * * cdef inline xmlNode* _nextElement(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -28968,7 +28895,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v return __pyx_r; } -/* "src/lxml/apihelpers.pxi":900 +/* "src/lxml/apihelpers.pxi":895 * return NULL * * cdef inline xmlNode* _previousElement(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -28983,7 +28910,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p xmlNode *__pyx_t_2; __Pyx_RefNannySetupContext("_previousElement", 0); - /* "src/lxml/apihelpers.pxi":903 + /* "src/lxml/apihelpers.pxi":898 * u"""Given a node, find the next sibling that is an element. * """ * if c_node is NULL: # <<<<<<<<<<<<<< @@ -28993,7 +28920,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":904 + /* "src/lxml/apihelpers.pxi":899 * """ * if c_node is NULL: * return NULL # <<<<<<<<<<<<<< @@ -29003,7 +28930,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":903 + /* "src/lxml/apihelpers.pxi":898 * u"""Given a node, find the next sibling that is an element. * """ * if c_node is NULL: # <<<<<<<<<<<<<< @@ -29012,7 +28939,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p */ } - /* "src/lxml/apihelpers.pxi":905 + /* "src/lxml/apihelpers.pxi":900 * if c_node is NULL: * return NULL * c_node = c_node.prev # <<<<<<<<<<<<<< @@ -29022,7 +28949,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_t_2 = __pyx_v_c_node->prev; __pyx_v_c_node = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":906 + /* "src/lxml/apihelpers.pxi":901 * return NULL * c_node = c_node.prev * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -29033,7 +28960,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":907 + /* "src/lxml/apihelpers.pxi":902 * c_node = c_node.prev * while c_node is not NULL: * if _isElement(c_node): # <<<<<<<<<<<<<< @@ -29043,7 +28970,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_t_1 = (_isElement(__pyx_v_c_node) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":908 + /* "src/lxml/apihelpers.pxi":903 * while c_node is not NULL: * if _isElement(c_node): * return c_node # <<<<<<<<<<<<<< @@ -29053,7 +28980,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_r = __pyx_v_c_node; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":907 + /* "src/lxml/apihelpers.pxi":902 * c_node = c_node.prev * while c_node is not NULL: * if _isElement(c_node): # <<<<<<<<<<<<<< @@ -29062,7 +28989,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p */ } - /* "src/lxml/apihelpers.pxi":909 + /* "src/lxml/apihelpers.pxi":904 * if _isElement(c_node): * return c_node * c_node = c_node.prev # <<<<<<<<<<<<<< @@ -29073,7 +29000,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_v_c_node = __pyx_t_2; } - /* "src/lxml/apihelpers.pxi":910 + /* "src/lxml/apihelpers.pxi":905 * return c_node * c_node = c_node.prev * return NULL # <<<<<<<<<<<<<< @@ -29083,7 +29010,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":900 + /* "src/lxml/apihelpers.pxi":895 * return NULL * * cdef inline xmlNode* _previousElement(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -29097,7 +29024,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p return __pyx_r; } -/* "src/lxml/apihelpers.pxi":912 +/* "src/lxml/apihelpers.pxi":907 * return NULL * * cdef inline xmlNode* _parentElement(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -29113,7 +29040,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx xmlNode *__pyx_t_3; __Pyx_RefNannySetupContext("_parentElement", 0); - /* "src/lxml/apihelpers.pxi":914 + /* "src/lxml/apihelpers.pxi":909 * cdef inline xmlNode* _parentElement(xmlNode* c_node): * u"Given a node, find the parent element." * if c_node is NULL or not _isElement(c_node): # <<<<<<<<<<<<<< @@ -29131,7 +29058,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":915 + /* "src/lxml/apihelpers.pxi":910 * u"Given a node, find the parent element." * if c_node is NULL or not _isElement(c_node): * return NULL # <<<<<<<<<<<<<< @@ -29141,7 +29068,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":914 + /* "src/lxml/apihelpers.pxi":909 * cdef inline xmlNode* _parentElement(xmlNode* c_node): * u"Given a node, find the parent element." * if c_node is NULL or not _isElement(c_node): # <<<<<<<<<<<<<< @@ -29150,7 +29077,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx */ } - /* "src/lxml/apihelpers.pxi":916 + /* "src/lxml/apihelpers.pxi":911 * if c_node is NULL or not _isElement(c_node): * return NULL * c_node = c_node.parent # <<<<<<<<<<<<<< @@ -29160,7 +29087,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx __pyx_t_3 = __pyx_v_c_node->parent; __pyx_v_c_node = __pyx_t_3; - /* "src/lxml/apihelpers.pxi":917 + /* "src/lxml/apihelpers.pxi":912 * return NULL * c_node = c_node.parent * if c_node is NULL or not _isElement(c_node): # <<<<<<<<<<<<<< @@ -29178,7 +29105,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx __pyx_L7_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":918 + /* "src/lxml/apihelpers.pxi":913 * c_node = c_node.parent * if c_node is NULL or not _isElement(c_node): * return NULL # <<<<<<<<<<<<<< @@ -29188,7 +29115,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx __pyx_r = NULL; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":917 + /* "src/lxml/apihelpers.pxi":912 * return NULL * c_node = c_node.parent * if c_node is NULL or not _isElement(c_node): # <<<<<<<<<<<<<< @@ -29197,7 +29124,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx */ } - /* "src/lxml/apihelpers.pxi":919 + /* "src/lxml/apihelpers.pxi":914 * if c_node is NULL or not _isElement(c_node): * return NULL * return c_node # <<<<<<<<<<<<<< @@ -29207,7 +29134,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx __pyx_r = __pyx_v_c_node; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":912 + /* "src/lxml/apihelpers.pxi":907 * return NULL * * cdef inline xmlNode* _parentElement(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -29221,7 +29148,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx return __pyx_r; } -/* "src/lxml/apihelpers.pxi":921 +/* "src/lxml/apihelpers.pxi":916 * return c_node * * cdef inline bint _tagMatches(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -29237,7 +29164,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod int __pyx_t_2; __Pyx_RefNannySetupContext("_tagMatches", 0); - /* "src/lxml/apihelpers.pxi":935 + /* "src/lxml/apihelpers.pxi":930 * * its name string equals the c_name string * """ * if c_node is NULL: # <<<<<<<<<<<<<< @@ -29247,7 +29174,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":936 + /* "src/lxml/apihelpers.pxi":931 * """ * if c_node is NULL: * return 0 # <<<<<<<<<<<<<< @@ -29257,7 +29184,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":935 + /* "src/lxml/apihelpers.pxi":930 * * its name string equals the c_name string * """ * if c_node is NULL: # <<<<<<<<<<<<<< @@ -29266,7 +29193,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":937 + /* "src/lxml/apihelpers.pxi":932 * if c_node is NULL: * return 0 * if c_node.type != tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -29276,7 +29203,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_node->type != XML_ELEMENT_NODE) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":939 + /* "src/lxml/apihelpers.pxi":934 * if c_node.type != tree.XML_ELEMENT_NODE: * # not an element, only succeed if we match everything * return c_name is NULL and c_href is NULL # <<<<<<<<<<<<<< @@ -29295,7 +29222,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":937 + /* "src/lxml/apihelpers.pxi":932 * if c_node is NULL: * return 0 * if c_node.type != tree.XML_ELEMENT_NODE: # <<<<<<<<<<<<<< @@ -29304,7 +29231,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":940 + /* "src/lxml/apihelpers.pxi":935 * # not an element, only succeed if we match everything * return c_name is NULL and c_href is NULL * if c_name is NULL: # <<<<<<<<<<<<<< @@ -29314,7 +29241,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_name == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":941 + /* "src/lxml/apihelpers.pxi":936 * return c_name is NULL and c_href is NULL * if c_name is NULL: * if c_href is NULL: # <<<<<<<<<<<<<< @@ -29324,7 +29251,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":943 + /* "src/lxml/apihelpers.pxi":938 * if c_href is NULL: * # always match * return 1 # <<<<<<<<<<<<<< @@ -29334,7 +29261,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":941 + /* "src/lxml/apihelpers.pxi":936 * return c_name is NULL and c_href is NULL * if c_name is NULL: * if c_href is NULL: # <<<<<<<<<<<<<< @@ -29343,7 +29270,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":945 + /* "src/lxml/apihelpers.pxi":940 * return 1 * else: * c_node_href = _getNs(c_node) # <<<<<<<<<<<<<< @@ -29353,7 +29280,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod /*else*/ { __pyx_v_c_node_href = _getNs(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":946 + /* "src/lxml/apihelpers.pxi":941 * else: * c_node_href = _getNs(c_node) * if c_node_href is NULL: # <<<<<<<<<<<<<< @@ -29363,7 +29290,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_node_href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":947 + /* "src/lxml/apihelpers.pxi":942 * c_node_href = _getNs(c_node) * if c_node_href is NULL: * return c_href[0] == c'\0' # <<<<<<<<<<<<<< @@ -29373,7 +29300,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = ((__pyx_v_c_href[0]) == '\x00'); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":946 + /* "src/lxml/apihelpers.pxi":941 * else: * c_node_href = _getNs(c_node) * if c_node_href is NULL: # <<<<<<<<<<<<<< @@ -29382,7 +29309,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":949 + /* "src/lxml/apihelpers.pxi":944 * return c_href[0] == c'\0' * else: * return tree.xmlStrcmp(c_node_href, c_href) == 0 # <<<<<<<<<<<<<< @@ -29395,7 +29322,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod } } - /* "src/lxml/apihelpers.pxi":940 + /* "src/lxml/apihelpers.pxi":935 * # not an element, only succeed if we match everything * return c_name is NULL and c_href is NULL * if c_name is NULL: # <<<<<<<<<<<<<< @@ -29404,7 +29331,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":950 + /* "src/lxml/apihelpers.pxi":945 * else: * return tree.xmlStrcmp(c_node_href, c_href) == 0 * elif c_href is NULL: # <<<<<<<<<<<<<< @@ -29414,7 +29341,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":951 + /* "src/lxml/apihelpers.pxi":946 * return tree.xmlStrcmp(c_node_href, c_href) == 0 * elif c_href is NULL: * if _getNs(c_node) is not NULL: # <<<<<<<<<<<<<< @@ -29424,7 +29351,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((_getNs(__pyx_v_c_node) != NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":952 + /* "src/lxml/apihelpers.pxi":947 * elif c_href is NULL: * if _getNs(c_node) is not NULL: * return 0 # <<<<<<<<<<<<<< @@ -29434,7 +29361,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":951 + /* "src/lxml/apihelpers.pxi":946 * return tree.xmlStrcmp(c_node_href, c_href) == 0 * elif c_href is NULL: * if _getNs(c_node) is not NULL: # <<<<<<<<<<<<<< @@ -29443,7 +29370,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":953 + /* "src/lxml/apihelpers.pxi":948 * if _getNs(c_node) is not NULL: * return 0 * return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0 # <<<<<<<<<<<<<< @@ -29462,7 +29389,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":950 + /* "src/lxml/apihelpers.pxi":945 * else: * return tree.xmlStrcmp(c_node_href, c_href) == 0 * elif c_href is NULL: # <<<<<<<<<<<<<< @@ -29471,7 +29398,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":954 + /* "src/lxml/apihelpers.pxi":949 * return 0 * return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0 * elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0: # <<<<<<<<<<<<<< @@ -29489,7 +29416,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_L13_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":955 + /* "src/lxml/apihelpers.pxi":950 * return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0 * elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0: * c_node_href = _getNs(c_node) # <<<<<<<<<<<<<< @@ -29498,7 +29425,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ __pyx_v_c_node_href = _getNs(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":956 + /* "src/lxml/apihelpers.pxi":951 * elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0: * c_node_href = _getNs(c_node) * if c_node_href is NULL: # <<<<<<<<<<<<<< @@ -29508,7 +29435,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_t_1 = ((__pyx_v_c_node_href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":957 + /* "src/lxml/apihelpers.pxi":952 * c_node_href = _getNs(c_node) * if c_node_href is NULL: * return c_href[0] == c'\0' # <<<<<<<<<<<<<< @@ -29518,7 +29445,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod __pyx_r = ((__pyx_v_c_href[0]) == '\x00'); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":956 + /* "src/lxml/apihelpers.pxi":951 * elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0: * c_node_href = _getNs(c_node) * if c_node_href is NULL: # <<<<<<<<<<<<<< @@ -29527,7 +29454,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":959 + /* "src/lxml/apihelpers.pxi":954 * return c_href[0] == c'\0' * else: * return tree.xmlStrcmp(c_node_href, c_href) == 0 # <<<<<<<<<<<<<< @@ -29539,7 +29466,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":954 + /* "src/lxml/apihelpers.pxi":949 * return 0 * return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0 * elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0: # <<<<<<<<<<<<<< @@ -29548,7 +29475,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod */ } - /* "src/lxml/apihelpers.pxi":961 + /* "src/lxml/apihelpers.pxi":956 * return tree.xmlStrcmp(c_node_href, c_href) == 0 * else: * return 0 # <<<<<<<<<<<<<< @@ -29560,7 +29487,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":921 + /* "src/lxml/apihelpers.pxi":916 * return c_node * * cdef inline bint _tagMatches(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -29574,7 +29501,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod return __pyx_r; } -/* "src/lxml/apihelpers.pxi":963 +/* "src/lxml/apihelpers.pxi":958 * return 0 * * cdef inline bint _tagMatchesExactly(xmlNode* c_node, qname* c_qname): # <<<<<<<<<<<<<< @@ -29587,7 +29514,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_ __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_tagMatchesExactly", 0); - /* "src/lxml/apihelpers.pxi":981 + /* "src/lxml/apihelpers.pxi":976 * * its name string points to the same address (!) as c_name * """ * return _nsTagMatchesExactly(_getNs(c_node), c_node.name, c_qname) # <<<<<<<<<<<<<< @@ -29597,7 +29524,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_ __pyx_r = __pyx_f_4lxml_5etree__nsTagMatchesExactly(_getNs(__pyx_v_c_node), __pyx_v_c_node->name, __pyx_v_c_qname); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":963 + /* "src/lxml/apihelpers.pxi":958 * return 0 * * cdef inline bint _tagMatchesExactly(xmlNode* c_node, qname* c_qname): # <<<<<<<<<<<<<< @@ -29611,7 +29538,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":983 +/* "src/lxml/apihelpers.pxi":978 * return _nsTagMatchesExactly(_getNs(c_node), c_node.name, c_qname) * * cdef inline bint _nsTagMatchesExactly(const_xmlChar* c_node_href, # <<<<<<<<<<<<<< @@ -29627,7 +29554,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar int __pyx_t_2; __Pyx_RefNannySetupContext("_nsTagMatchesExactly", 0); - /* "src/lxml/apihelpers.pxi":1004 + /* "src/lxml/apihelpers.pxi":999 * """ * cdef char* c_href * if c_qname.c_name is not NULL and c_qname.c_name is not c_node_name: # <<<<<<<<<<<<<< @@ -29645,7 +29572,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1005 + /* "src/lxml/apihelpers.pxi":1000 * cdef char* c_href * if c_qname.c_name is not NULL and c_qname.c_name is not c_node_name: * return 0 # <<<<<<<<<<<<<< @@ -29655,7 +29582,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1004 + /* "src/lxml/apihelpers.pxi":999 * """ * cdef char* c_href * if c_qname.c_name is not NULL and c_qname.c_name is not c_node_name: # <<<<<<<<<<<<<< @@ -29664,7 +29591,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar */ } - /* "src/lxml/apihelpers.pxi":1006 + /* "src/lxml/apihelpers.pxi":1001 * if c_qname.c_name is not NULL and c_qname.c_name is not c_node_name: * return 0 * if c_qname.href is NULL: # <<<<<<<<<<<<<< @@ -29674,7 +29601,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_t_1 = ((__pyx_v_c_qname->href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1007 + /* "src/lxml/apihelpers.pxi":1002 * return 0 * if c_qname.href is NULL: * return 1 # <<<<<<<<<<<<<< @@ -29684,7 +29611,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1006 + /* "src/lxml/apihelpers.pxi":1001 * if c_qname.c_name is not NULL and c_qname.c_name is not c_node_name: * return 0 * if c_qname.href is NULL: # <<<<<<<<<<<<<< @@ -29693,7 +29620,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar */ } - /* "src/lxml/apihelpers.pxi":1008 + /* "src/lxml/apihelpers.pxi":1003 * if c_qname.href is NULL: * return 1 * c_href = python.__cstr(c_qname.href) # <<<<<<<<<<<<<< @@ -29702,7 +29629,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar */ __pyx_v_c_href = PyBytes_AS_STRING(__pyx_v_c_qname->href); - /* "src/lxml/apihelpers.pxi":1009 + /* "src/lxml/apihelpers.pxi":1004 * return 1 * c_href = python.__cstr(c_qname.href) * if c_href[0] == '\0': # <<<<<<<<<<<<<< @@ -29712,7 +29639,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_t_1 = (((__pyx_v_c_href[0]) == '\x00') != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1010 + /* "src/lxml/apihelpers.pxi":1005 * c_href = python.__cstr(c_qname.href) * if c_href[0] == '\0': * return c_node_href is NULL or c_node_href[0] == '\0' # <<<<<<<<<<<<<< @@ -29731,7 +29658,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1009 + /* "src/lxml/apihelpers.pxi":1004 * return 1 * c_href = python.__cstr(c_qname.href) * if c_href[0] == '\0': # <<<<<<<<<<<<<< @@ -29740,7 +29667,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar */ } - /* "src/lxml/apihelpers.pxi":1011 + /* "src/lxml/apihelpers.pxi":1006 * if c_href[0] == '\0': * return c_node_href is NULL or c_node_href[0] == '\0' * elif c_node_href is NULL: # <<<<<<<<<<<<<< @@ -29750,7 +29677,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_t_1 = ((__pyx_v_c_node_href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1012 + /* "src/lxml/apihelpers.pxi":1007 * return c_node_href is NULL or c_node_href[0] == '\0' * elif c_node_href is NULL: * return 0 # <<<<<<<<<<<<<< @@ -29760,7 +29687,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1011 + /* "src/lxml/apihelpers.pxi":1006 * if c_href[0] == '\0': * return c_node_href is NULL or c_node_href[0] == '\0' * elif c_node_href is NULL: # <<<<<<<<<<<<<< @@ -29769,7 +29696,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar */ } - /* "src/lxml/apihelpers.pxi":1014 + /* "src/lxml/apihelpers.pxi":1009 * return 0 * else: * return tree.xmlStrcmp(c_href, c_node_href) == 0 # <<<<<<<<<<<<<< @@ -29781,7 +29708,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":983 + /* "src/lxml/apihelpers.pxi":978 * return _nsTagMatchesExactly(_getNs(c_node), c_node.name, c_qname) * * cdef inline bint _nsTagMatchesExactly(const_xmlChar* c_node_href, # <<<<<<<<<<<<<< @@ -29795,7 +29722,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__nsTagMatchesExactly(const xmlChar return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1016 +/* "src/lxml/apihelpers.pxi":1011 * return tree.xmlStrcmp(c_href, c_node_href) == 0 * * cdef Py_ssize_t _mapTagsToQnameMatchArray(xmlDoc* c_doc, list ns_tags, # <<<<<<<<<<<<<< @@ -29825,7 +29752,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v Py_ssize_t __pyx_t_12; __Pyx_RefNannySetupContext("_mapTagsToQnameMatchArray", 0); - /* "src/lxml/apihelpers.pxi":1024 + /* "src/lxml/apihelpers.pxi":1019 * if it is not NULL. * """ * cdef Py_ssize_t count = 0, i # <<<<<<<<<<<<<< @@ -29834,7 +29761,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ __pyx_v_count = 0; - /* "src/lxml/apihelpers.pxi":1026 + /* "src/lxml/apihelpers.pxi":1021 * cdef Py_ssize_t count = 0, i * cdef bytes ns, tag * for ns, tag in ns_tags: # <<<<<<<<<<<<<< @@ -29843,15 +29770,15 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ if (unlikely(__pyx_v_ns_tags == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(5, 1026, __pyx_L1_error) + __PYX_ERR(5, 1021, __pyx_L1_error) } __pyx_t_1 = __pyx_v_ns_tags; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; for (;;) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(5, 1026, __pyx_L1_error) + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(5, 1021, __pyx_L1_error) #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1026, __pyx_L1_error) + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { @@ -29860,7 +29787,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(5, 1026, __pyx_L1_error) + __PYX_ERR(5, 1021, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -29873,15 +29800,15 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1026, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1026, __pyx_L1_error) + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; - __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1026, __pyx_L1_error) + __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; @@ -29889,7 +29816,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(5, 1026, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(5, 1021, __pyx_L1_error) __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6_unpacking_done; @@ -29897,17 +29824,17 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(5, 1026, __pyx_L1_error) + __PYX_ERR(5, 1021, __pyx_L1_error) __pyx_L6_unpacking_done:; } - if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(5, 1026, __pyx_L1_error) - if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(5, 1026, __pyx_L1_error) + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(5, 1021, __pyx_L1_error) + if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(5, 1021, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_ns, ((PyObject*)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_tag, ((PyObject*)__pyx_t_5)); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":1027 + /* "src/lxml/apihelpers.pxi":1022 * cdef bytes ns, tag * for ns, tag in ns_tags: * if tag is None: # <<<<<<<<<<<<<< @@ -29918,7 +29845,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __pyx_t_9 = (__pyx_t_8 != 0); if (__pyx_t_9) { - /* "src/lxml/apihelpers.pxi":1028 + /* "src/lxml/apihelpers.pxi":1023 * for ns, tag in ns_tags: * if tag is None: * c_tag = NULL # <<<<<<<<<<<<<< @@ -29927,7 +29854,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ __pyx_v_c_tag = ((const xmlChar *)NULL); - /* "src/lxml/apihelpers.pxi":1027 + /* "src/lxml/apihelpers.pxi":1022 * cdef bytes ns, tag * for ns, tag in ns_tags: * if tag is None: # <<<<<<<<<<<<<< @@ -29937,7 +29864,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v goto __pyx_L7; } - /* "src/lxml/apihelpers.pxi":1029 + /* "src/lxml/apihelpers.pxi":1024 * if tag is None: * c_tag = NULL * elif force_into_dict: # <<<<<<<<<<<<<< @@ -29947,7 +29874,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __pyx_t_9 = (__pyx_v_force_into_dict != 0); if (__pyx_t_9) { - /* "src/lxml/apihelpers.pxi":1030 + /* "src/lxml/apihelpers.pxi":1025 * c_tag = NULL * elif force_into_dict: * c_tag = tree.xmlDictLookup(c_doc.dict, _xcstr(tag), len(tag)) # <<<<<<<<<<<<<< @@ -29956,12 +29883,12 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ if (unlikely(__pyx_v_tag == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(5, 1030, __pyx_L1_error) + __PYX_ERR(5, 1025, __pyx_L1_error) } - __pyx_t_10 = PyBytes_GET_SIZE(__pyx_v_tag); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1030, __pyx_L1_error) + __pyx_t_10 = PyBytes_GET_SIZE(__pyx_v_tag); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1025, __pyx_L1_error) __pyx_v_c_tag = xmlDictLookup(__pyx_v_c_doc->dict, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag), __pyx_t_10); - /* "src/lxml/apihelpers.pxi":1031 + /* "src/lxml/apihelpers.pxi":1026 * elif force_into_dict: * c_tag = tree.xmlDictLookup(c_doc.dict, _xcstr(tag), len(tag)) * if c_tag is NULL: # <<<<<<<<<<<<<< @@ -29971,7 +29898,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __pyx_t_9 = ((__pyx_v_c_tag == NULL) != 0); if (__pyx_t_9) { - /* "src/lxml/apihelpers.pxi":1033 + /* "src/lxml/apihelpers.pxi":1028 * if c_tag is NULL: * # clean up before raising the error * for i in xrange(count): # <<<<<<<<<<<<<< @@ -29983,7 +29910,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_i = __pyx_t_12; - /* "src/lxml/apihelpers.pxi":1034 + /* "src/lxml/apihelpers.pxi":1029 * # clean up before raising the error * for i in xrange(count): * cpython.ref.Py_XDECREF(c_ns_tags[i].href) # <<<<<<<<<<<<<< @@ -29993,16 +29920,16 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v Py_XDECREF((__pyx_v_c_ns_tags[__pyx_v_i]).href); } - /* "src/lxml/apihelpers.pxi":1035 + /* "src/lxml/apihelpers.pxi":1030 * for i in xrange(count): * cpython.ref.Py_XDECREF(c_ns_tags[i].href) * raise MemoryError() # <<<<<<<<<<<<<< * else: * c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag)) */ - PyErr_NoMemory(); __PYX_ERR(5, 1035, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(5, 1030, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1031 + /* "src/lxml/apihelpers.pxi":1026 * elif force_into_dict: * c_tag = tree.xmlDictLookup(c_doc.dict, _xcstr(tag), len(tag)) * if c_tag is NULL: # <<<<<<<<<<<<<< @@ -30011,7 +29938,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ } - /* "src/lxml/apihelpers.pxi":1029 + /* "src/lxml/apihelpers.pxi":1024 * if tag is None: * c_tag = NULL * elif force_into_dict: # <<<<<<<<<<<<<< @@ -30021,7 +29948,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v goto __pyx_L7; } - /* "src/lxml/apihelpers.pxi":1037 + /* "src/lxml/apihelpers.pxi":1032 * raise MemoryError() * else: * c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag)) # <<<<<<<<<<<<<< @@ -30031,12 +29958,12 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v /*else*/ { if (unlikely(__pyx_v_tag == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(5, 1037, __pyx_L1_error) + __PYX_ERR(5, 1032, __pyx_L1_error) } - __pyx_t_10 = PyBytes_GET_SIZE(__pyx_v_tag); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1037, __pyx_L1_error) + __pyx_t_10 = PyBytes_GET_SIZE(__pyx_v_tag); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1032, __pyx_L1_error) __pyx_v_c_tag = xmlDictExists(__pyx_v_c_doc->dict, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag), __pyx_t_10); - /* "src/lxml/apihelpers.pxi":1038 + /* "src/lxml/apihelpers.pxi":1033 * else: * c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag)) * if c_tag is NULL: # <<<<<<<<<<<<<< @@ -30046,7 +29973,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __pyx_t_9 = ((__pyx_v_c_tag == NULL) != 0); if (__pyx_t_9) { - /* "src/lxml/apihelpers.pxi":1040 + /* "src/lxml/apihelpers.pxi":1035 * if c_tag is NULL: * # not in the dict => not in the document * continue # <<<<<<<<<<<<<< @@ -30055,7 +29982,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ goto __pyx_L3_continue; - /* "src/lxml/apihelpers.pxi":1038 + /* "src/lxml/apihelpers.pxi":1033 * else: * c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag)) * if c_tag is NULL: # <<<<<<<<<<<<<< @@ -30066,7 +29993,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v } __pyx_L7:; - /* "src/lxml/apihelpers.pxi":1041 + /* "src/lxml/apihelpers.pxi":1036 * # not in the dict => not in the document * continue * c_ns_tags[count].c_name = c_tag # <<<<<<<<<<<<<< @@ -30075,7 +30002,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ (__pyx_v_c_ns_tags[__pyx_v_count]).c_name = __pyx_v_c_tag; - /* "src/lxml/apihelpers.pxi":1042 + /* "src/lxml/apihelpers.pxi":1037 * continue * c_ns_tags[count].c_name = c_tag * if ns is None: # <<<<<<<<<<<<<< @@ -30086,7 +30013,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __pyx_t_8 = (__pyx_t_9 != 0); if (__pyx_t_8) { - /* "src/lxml/apihelpers.pxi":1043 + /* "src/lxml/apihelpers.pxi":1038 * c_ns_tags[count].c_name = c_tag * if ns is None: * c_ns_tags[count].href = NULL # <<<<<<<<<<<<<< @@ -30095,7 +30022,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ (__pyx_v_c_ns_tags[__pyx_v_count]).href = NULL; - /* "src/lxml/apihelpers.pxi":1042 + /* "src/lxml/apihelpers.pxi":1037 * continue * c_ns_tags[count].c_name = c_tag * if ns is None: # <<<<<<<<<<<<<< @@ -30105,7 +30032,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v goto __pyx_L12; } - /* "src/lxml/apihelpers.pxi":1045 + /* "src/lxml/apihelpers.pxi":1040 * c_ns_tags[count].href = NULL * else: * cpython.ref.Py_INCREF(ns) # keep an owned reference! # <<<<<<<<<<<<<< @@ -30115,7 +30042,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v /*else*/ { Py_INCREF(__pyx_v_ns); - /* "src/lxml/apihelpers.pxi":1046 + /* "src/lxml/apihelpers.pxi":1041 * else: * cpython.ref.Py_INCREF(ns) # keep an owned reference! * c_ns_tags[count].href = ns # <<<<<<<<<<<<<< @@ -30126,7 +30053,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v } __pyx_L12:; - /* "src/lxml/apihelpers.pxi":1047 + /* "src/lxml/apihelpers.pxi":1042 * cpython.ref.Py_INCREF(ns) # keep an owned reference! * c_ns_tags[count].href = ns * count += 1 # <<<<<<<<<<<<<< @@ -30135,7 +30062,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v */ __pyx_v_count = (__pyx_v_count + 1); - /* "src/lxml/apihelpers.pxi":1026 + /* "src/lxml/apihelpers.pxi":1021 * cdef Py_ssize_t count = 0, i * cdef bytes ns, tag * for ns, tag in ns_tags: # <<<<<<<<<<<<<< @@ -30146,7 +30073,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":1048 + /* "src/lxml/apihelpers.pxi":1043 * c_ns_tags[count].href = ns * count += 1 * return count # <<<<<<<<<<<<<< @@ -30156,7 +30083,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v __pyx_r = __pyx_v_count; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1016 + /* "src/lxml/apihelpers.pxi":1011 * return tree.xmlStrcmp(c_href, c_node_href) == 0 * * cdef Py_ssize_t _mapTagsToQnameMatchArray(xmlDoc* c_doc, list ns_tags, # <<<<<<<<<<<<<< @@ -30180,7 +30107,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1050 +/* "src/lxml/apihelpers.pxi":1045 * return count * * cdef int _removeNode(_Document doc, xmlNode* c_node) except -1: # <<<<<<<<<<<<<< @@ -30197,7 +30124,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm int __pyx_t_3; __Pyx_RefNannySetupContext("_removeNode", 0); - /* "src/lxml/apihelpers.pxi":1055 + /* "src/lxml/apihelpers.pxi":1050 * """ * cdef xmlNode* c_next * c_next = c_node.next # <<<<<<<<<<<<<< @@ -30207,7 +30134,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm __pyx_t_1 = __pyx_v_c_node->next; __pyx_v_c_next = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1056 + /* "src/lxml/apihelpers.pxi":1051 * cdef xmlNode* c_next * c_next = c_node.next * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -30216,7 +30143,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1057 + /* "src/lxml/apihelpers.pxi":1052 * c_next = c_node.next * tree.xmlUnlinkNode(c_node) * _moveTail(c_next, c_node) # <<<<<<<<<<<<<< @@ -30225,7 +30152,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm */ __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1058 + /* "src/lxml/apihelpers.pxi":1053 * tree.xmlUnlinkNode(c_node) * _moveTail(c_next, c_node) * if not attemptDeallocation(c_node): # <<<<<<<<<<<<<< @@ -30235,16 +30162,16 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm __pyx_t_2 = ((!(__pyx_f_4lxml_5etree_attemptDeallocation(__pyx_v_c_node) != 0)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1060 + /* "src/lxml/apihelpers.pxi":1055 * if not attemptDeallocation(c_node): * # make namespaces absolute * moveNodeToDocument(doc, c_node.doc, c_node) # <<<<<<<<<<<<<< * return 0 * */ - __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 1060, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 1055, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1058 + /* "src/lxml/apihelpers.pxi":1053 * tree.xmlUnlinkNode(c_node) * _moveTail(c_next, c_node) * if not attemptDeallocation(c_node): # <<<<<<<<<<<<<< @@ -30253,7 +30180,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm */ } - /* "src/lxml/apihelpers.pxi":1061 + /* "src/lxml/apihelpers.pxi":1056 * # make namespaces absolute * moveNodeToDocument(doc, c_node.doc, c_node) * return 0 # <<<<<<<<<<<<<< @@ -30263,7 +30190,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1050 + /* "src/lxml/apihelpers.pxi":1045 * return count * * cdef int _removeNode(_Document doc, xmlNode* c_node) except -1: # <<<<<<<<<<<<<< @@ -30280,7 +30207,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1063 +/* "src/lxml/apihelpers.pxi":1058 * return 0 * * cdef int _removeSiblings(xmlNode* c_element, tree.xmlElementType node_type, bint with_tail) except -1: # <<<<<<<<<<<<<< @@ -30297,7 +30224,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE int __pyx_t_2; __Pyx_RefNannySetupContext("_removeSiblings", 0); - /* "src/lxml/apihelpers.pxi":1066 + /* "src/lxml/apihelpers.pxi":1061 * cdef xmlNode* c_node * cdef xmlNode* c_next * c_node = c_element.next # <<<<<<<<<<<<<< @@ -30307,7 +30234,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_1 = __pyx_v_c_element->next; __pyx_v_c_node = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1067 + /* "src/lxml/apihelpers.pxi":1062 * cdef xmlNode* c_next * c_node = c_element.next * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -30318,7 +30245,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1068 + /* "src/lxml/apihelpers.pxi":1063 * c_node = c_element.next * while c_node is not NULL: * c_next = _nextElement(c_node) # <<<<<<<<<<<<<< @@ -30327,7 +30254,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ __pyx_v_c_next = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1069 + /* "src/lxml/apihelpers.pxi":1064 * while c_node is not NULL: * c_next = _nextElement(c_node) * if c_node.type == node_type: # <<<<<<<<<<<<<< @@ -30337,7 +30264,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_2 = ((__pyx_v_c_node->type == __pyx_v_node_type) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1070 + /* "src/lxml/apihelpers.pxi":1065 * c_next = _nextElement(c_node) * if c_node.type == node_type: * if with_tail: # <<<<<<<<<<<<<< @@ -30347,7 +30274,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_2 = (__pyx_v_with_tail != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1071 + /* "src/lxml/apihelpers.pxi":1066 * if c_node.type == node_type: * if with_tail: * _removeText(c_node.next) # <<<<<<<<<<<<<< @@ -30356,7 +30283,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->next); - /* "src/lxml/apihelpers.pxi":1070 + /* "src/lxml/apihelpers.pxi":1065 * c_next = _nextElement(c_node) * if c_node.type == node_type: * if with_tail: # <<<<<<<<<<<<<< @@ -30365,7 +30292,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ } - /* "src/lxml/apihelpers.pxi":1072 + /* "src/lxml/apihelpers.pxi":1067 * if with_tail: * _removeText(c_node.next) * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -30374,7 +30301,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1073 + /* "src/lxml/apihelpers.pxi":1068 * _removeText(c_node.next) * tree.xmlUnlinkNode(c_node) * attemptDeallocation(c_node) # <<<<<<<<<<<<<< @@ -30383,7 +30310,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ (void)(__pyx_f_4lxml_5etree_attemptDeallocation(__pyx_v_c_node)); - /* "src/lxml/apihelpers.pxi":1069 + /* "src/lxml/apihelpers.pxi":1064 * while c_node is not NULL: * c_next = _nextElement(c_node) * if c_node.type == node_type: # <<<<<<<<<<<<<< @@ -30392,7 +30319,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ } - /* "src/lxml/apihelpers.pxi":1074 + /* "src/lxml/apihelpers.pxi":1069 * tree.xmlUnlinkNode(c_node) * attemptDeallocation(c_node) * c_node = c_next # <<<<<<<<<<<<<< @@ -30402,7 +30329,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_v_c_node = __pyx_v_c_next; } - /* "src/lxml/apihelpers.pxi":1075 + /* "src/lxml/apihelpers.pxi":1070 * attemptDeallocation(c_node) * c_node = c_next * c_node = c_element.prev # <<<<<<<<<<<<<< @@ -30412,7 +30339,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_1 = __pyx_v_c_element->prev; __pyx_v_c_node = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1076 + /* "src/lxml/apihelpers.pxi":1071 * c_node = c_next * c_node = c_element.prev * while c_node is not NULL: # <<<<<<<<<<<<<< @@ -30423,7 +30350,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1077 + /* "src/lxml/apihelpers.pxi":1072 * c_node = c_element.prev * while c_node is not NULL: * c_next = _previousElement(c_node) # <<<<<<<<<<<<<< @@ -30432,7 +30359,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ __pyx_v_c_next = __pyx_f_4lxml_5etree__previousElement(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1078 + /* "src/lxml/apihelpers.pxi":1073 * while c_node is not NULL: * c_next = _previousElement(c_node) * if c_node.type == node_type: # <<<<<<<<<<<<<< @@ -30442,7 +30369,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_2 = ((__pyx_v_c_node->type == __pyx_v_node_type) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1079 + /* "src/lxml/apihelpers.pxi":1074 * c_next = _previousElement(c_node) * if c_node.type == node_type: * if with_tail: # <<<<<<<<<<<<<< @@ -30452,7 +30379,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_t_2 = (__pyx_v_with_tail != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1080 + /* "src/lxml/apihelpers.pxi":1075 * if c_node.type == node_type: * if with_tail: * _removeText(c_node.next) # <<<<<<<<<<<<<< @@ -30461,7 +30388,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->next); - /* "src/lxml/apihelpers.pxi":1079 + /* "src/lxml/apihelpers.pxi":1074 * c_next = _previousElement(c_node) * if c_node.type == node_type: * if with_tail: # <<<<<<<<<<<<<< @@ -30470,7 +30397,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ } - /* "src/lxml/apihelpers.pxi":1081 + /* "src/lxml/apihelpers.pxi":1076 * if with_tail: * _removeText(c_node.next) * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -30479,7 +30406,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1082 + /* "src/lxml/apihelpers.pxi":1077 * _removeText(c_node.next) * tree.xmlUnlinkNode(c_node) * attemptDeallocation(c_node) # <<<<<<<<<<<<<< @@ -30488,7 +30415,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ (void)(__pyx_f_4lxml_5etree_attemptDeallocation(__pyx_v_c_node)); - /* "src/lxml/apihelpers.pxi":1078 + /* "src/lxml/apihelpers.pxi":1073 * while c_node is not NULL: * c_next = _previousElement(c_node) * if c_node.type == node_type: # <<<<<<<<<<<<<< @@ -30497,7 +30424,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE */ } - /* "src/lxml/apihelpers.pxi":1083 + /* "src/lxml/apihelpers.pxi":1078 * tree.xmlUnlinkNode(c_node) * attemptDeallocation(c_node) * c_node = c_next # <<<<<<<<<<<<<< @@ -30507,7 +30434,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_v_c_node = __pyx_v_c_next; } - /* "src/lxml/apihelpers.pxi":1084 + /* "src/lxml/apihelpers.pxi":1079 * attemptDeallocation(c_node) * c_node = c_next * return 0 # <<<<<<<<<<<<<< @@ -30517,7 +30444,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1063 + /* "src/lxml/apihelpers.pxi":1058 * return 0 * * cdef int _removeSiblings(xmlNode* c_element, tree.xmlElementType node_type, bint with_tail) except -1: # <<<<<<<<<<<<<< @@ -30531,7 +30458,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1086 +/* "src/lxml/apihelpers.pxi":1081 * return 0 * * cdef void _moveTail(xmlNode* c_tail, xmlNode* c_target): # <<<<<<<<<<<<<< @@ -30545,7 +30472,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p int __pyx_t_1; __Pyx_RefNannySetupContext("_moveTail", 0); - /* "src/lxml/apihelpers.pxi":1090 + /* "src/lxml/apihelpers.pxi":1085 * # tail support: look for any text nodes trailing this node and * # move them too * c_tail = _textNodeOrSkip(c_tail) # <<<<<<<<<<<<<< @@ -30554,7 +30481,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p */ __pyx_v_c_tail = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail); - /* "src/lxml/apihelpers.pxi":1091 + /* "src/lxml/apihelpers.pxi":1086 * # move them too * c_tail = _textNodeOrSkip(c_tail) * while c_tail is not NULL: # <<<<<<<<<<<<<< @@ -30565,7 +30492,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p __pyx_t_1 = ((__pyx_v_c_tail != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1092 + /* "src/lxml/apihelpers.pxi":1087 * c_tail = _textNodeOrSkip(c_tail) * while c_tail is not NULL: * c_next = _textNodeOrSkip(c_tail.next) # <<<<<<<<<<<<<< @@ -30574,7 +30501,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p */ __pyx_v_c_next = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail->next); - /* "src/lxml/apihelpers.pxi":1093 + /* "src/lxml/apihelpers.pxi":1088 * while c_tail is not NULL: * c_next = _textNodeOrSkip(c_tail.next) * c_target = tree.xmlAddNextSibling(c_target, c_tail) # <<<<<<<<<<<<<< @@ -30583,7 +30510,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p */ __pyx_v_c_target = xmlAddNextSibling(__pyx_v_c_target, __pyx_v_c_tail); - /* "src/lxml/apihelpers.pxi":1094 + /* "src/lxml/apihelpers.pxi":1089 * c_next = _textNodeOrSkip(c_tail.next) * c_target = tree.xmlAddNextSibling(c_target, c_tail) * c_tail = c_next # <<<<<<<<<<<<<< @@ -30593,7 +30520,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p __pyx_v_c_tail = __pyx_v_c_next; } - /* "src/lxml/apihelpers.pxi":1086 + /* "src/lxml/apihelpers.pxi":1081 * return 0 * * cdef void _moveTail(xmlNode* c_tail, xmlNode* c_target): # <<<<<<<<<<<<<< @@ -30605,7 +30532,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p __Pyx_RefNannyFinishContext(); } -/* "src/lxml/apihelpers.pxi":1096 +/* "src/lxml/apihelpers.pxi":1091 * c_tail = c_next * * cdef int _copyTail(xmlNode* c_tail, xmlNode* c_target) except -1: # <<<<<<<<<<<<<< @@ -30620,7 +30547,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py int __pyx_t_1; __Pyx_RefNannySetupContext("_copyTail", 0); - /* "src/lxml/apihelpers.pxi":1100 + /* "src/lxml/apihelpers.pxi":1095 * # tail copying support: look for any text nodes trailing this node and * # copy it to the target node * c_tail = _textNodeOrSkip(c_tail) # <<<<<<<<<<<<<< @@ -30629,7 +30556,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py */ __pyx_v_c_tail = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail); - /* "src/lxml/apihelpers.pxi":1101 + /* "src/lxml/apihelpers.pxi":1096 * # copy it to the target node * c_tail = _textNodeOrSkip(c_tail) * while c_tail is not NULL: # <<<<<<<<<<<<<< @@ -30640,7 +30567,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py __pyx_t_1 = ((__pyx_v_c_tail != NULL) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1102 + /* "src/lxml/apihelpers.pxi":1097 * c_tail = _textNodeOrSkip(c_tail) * while c_tail is not NULL: * if c_target.doc is not c_tail.doc: # <<<<<<<<<<<<<< @@ -30650,7 +30577,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py __pyx_t_1 = ((__pyx_v_c_target->doc != __pyx_v_c_tail->doc) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1103 + /* "src/lxml/apihelpers.pxi":1098 * while c_tail is not NULL: * if c_target.doc is not c_tail.doc: * c_new_tail = tree.xmlDocCopyNode(c_tail, c_target.doc, 0) # <<<<<<<<<<<<<< @@ -30659,7 +30586,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py */ __pyx_v_c_new_tail = xmlDocCopyNode(__pyx_v_c_tail, __pyx_v_c_target->doc, 0); - /* "src/lxml/apihelpers.pxi":1102 + /* "src/lxml/apihelpers.pxi":1097 * c_tail = _textNodeOrSkip(c_tail) * while c_tail is not NULL: * if c_target.doc is not c_tail.doc: # <<<<<<<<<<<<<< @@ -30669,7 +30596,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py goto __pyx_L5; } - /* "src/lxml/apihelpers.pxi":1105 + /* "src/lxml/apihelpers.pxi":1100 * c_new_tail = tree.xmlDocCopyNode(c_tail, c_target.doc, 0) * else: * c_new_tail = tree.xmlCopyNode(c_tail, 0) # <<<<<<<<<<<<<< @@ -30681,7 +30608,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py } __pyx_L5:; - /* "src/lxml/apihelpers.pxi":1106 + /* "src/lxml/apihelpers.pxi":1101 * else: * c_new_tail = tree.xmlCopyNode(c_tail, 0) * if c_new_tail is NULL: # <<<<<<<<<<<<<< @@ -30691,16 +30618,16 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py __pyx_t_1 = ((__pyx_v_c_new_tail == NULL) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1107 + /* "src/lxml/apihelpers.pxi":1102 * c_new_tail = tree.xmlCopyNode(c_tail, 0) * if c_new_tail is NULL: * raise MemoryError() # <<<<<<<<<<<<<< * c_target = tree.xmlAddNextSibling(c_target, c_new_tail) * c_tail = _textNodeOrSkip(c_tail.next) */ - PyErr_NoMemory(); __PYX_ERR(5, 1107, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(5, 1102, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1106 + /* "src/lxml/apihelpers.pxi":1101 * else: * c_new_tail = tree.xmlCopyNode(c_tail, 0) * if c_new_tail is NULL: # <<<<<<<<<<<<<< @@ -30709,7 +30636,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py */ } - /* "src/lxml/apihelpers.pxi":1108 + /* "src/lxml/apihelpers.pxi":1103 * if c_new_tail is NULL: * raise MemoryError() * c_target = tree.xmlAddNextSibling(c_target, c_new_tail) # <<<<<<<<<<<<<< @@ -30718,7 +30645,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py */ __pyx_v_c_target = xmlAddNextSibling(__pyx_v_c_target, __pyx_v_c_new_tail); - /* "src/lxml/apihelpers.pxi":1109 + /* "src/lxml/apihelpers.pxi":1104 * raise MemoryError() * c_target = tree.xmlAddNextSibling(c_target, c_new_tail) * c_tail = _textNodeOrSkip(c_tail.next) # <<<<<<<<<<<<<< @@ -30728,7 +30655,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py __pyx_v_c_tail = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail->next); } - /* "src/lxml/apihelpers.pxi":1110 + /* "src/lxml/apihelpers.pxi":1105 * c_target = tree.xmlAddNextSibling(c_target, c_new_tail) * c_tail = _textNodeOrSkip(c_tail.next) * return 0 # <<<<<<<<<<<<<< @@ -30738,7 +30665,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1096 + /* "src/lxml/apihelpers.pxi":1091 * c_tail = c_next * * cdef int _copyTail(xmlNode* c_tail, xmlNode* c_target) except -1: # <<<<<<<<<<<<<< @@ -30755,7 +30682,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1112 +/* "src/lxml/apihelpers.pxi":1107 * return 0 * * cdef int _copyNonElementSiblings(xmlNode* c_node, xmlNode* c_target) except -1: # <<<<<<<<<<<<<< @@ -30774,7 +30701,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, xmlDtd *__pyx_t_4; __Pyx_RefNannySetupContext("_copyNonElementSiblings", 0); - /* "src/lxml/apihelpers.pxi":1114 + /* "src/lxml/apihelpers.pxi":1109 * cdef int _copyNonElementSiblings(xmlNode* c_node, xmlNode* c_target) except -1: * cdef xmlNode* c_copy * cdef xmlNode* c_sibling = c_node # <<<<<<<<<<<<<< @@ -30783,7 +30710,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ __pyx_v_c_sibling = __pyx_v_c_node; - /* "src/lxml/apihelpers.pxi":1115 + /* "src/lxml/apihelpers.pxi":1110 * cdef xmlNode* c_copy * cdef xmlNode* c_sibling = c_node * while c_sibling.prev != NULL and \ # <<<<<<<<<<<<<< @@ -30798,7 +30725,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, goto __pyx_L5_bool_binop_done; } - /* "src/lxml/apihelpers.pxi":1116 + /* "src/lxml/apihelpers.pxi":1111 * cdef xmlNode* c_sibling = c_node * while c_sibling.prev != NULL and \ * (c_sibling.prev.type == tree.XML_PI_NODE or # <<<<<<<<<<<<<< @@ -30809,7 +30736,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, case XML_PI_NODE: case XML_COMMENT_NODE: - /* "src/lxml/apihelpers.pxi":1117 + /* "src/lxml/apihelpers.pxi":1112 * while c_sibling.prev != NULL and \ * (c_sibling.prev.type == tree.XML_PI_NODE or * c_sibling.prev.type == tree.XML_COMMENT_NODE or # <<<<<<<<<<<<<< @@ -30818,7 +30745,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ case XML_DTD_NODE: - /* "src/lxml/apihelpers.pxi":1116 + /* "src/lxml/apihelpers.pxi":1111 * cdef xmlNode* c_sibling = c_node * while c_sibling.prev != NULL and \ * (c_sibling.prev.type == tree.XML_PI_NODE or # <<<<<<<<<<<<<< @@ -30835,7 +30762,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_L5_bool_binop_done:; if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1119 + /* "src/lxml/apihelpers.pxi":1114 * c_sibling.prev.type == tree.XML_COMMENT_NODE or * c_sibling.prev.type == tree.XML_DTD_NODE): * c_sibling = c_sibling.prev # <<<<<<<<<<<<<< @@ -30846,7 +30773,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_v_c_sibling = __pyx_t_3; } - /* "src/lxml/apihelpers.pxi":1120 + /* "src/lxml/apihelpers.pxi":1115 * c_sibling.prev.type == tree.XML_DTD_NODE): * c_sibling = c_sibling.prev * while c_sibling != c_node: # <<<<<<<<<<<<<< @@ -30857,7 +30784,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_t_1 = ((__pyx_v_c_sibling != __pyx_v_c_node) != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1121 + /* "src/lxml/apihelpers.pxi":1116 * c_sibling = c_sibling.prev * while c_sibling != c_node: * if c_sibling.type == tree.XML_DTD_NODE: # <<<<<<<<<<<<<< @@ -30867,17 +30794,17 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_t_1 = ((__pyx_v_c_sibling->type == XML_DTD_NODE) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1122 + /* "src/lxml/apihelpers.pxi":1117 * while c_sibling != c_node: * if c_sibling.type == tree.XML_DTD_NODE: * c_copy = _copyDtd(c_sibling) # <<<<<<<<<<<<<< * if c_sibling == c_node.doc.intSubset: * c_target.doc.intSubset = c_copy */ - __pyx_t_4 = __pyx_f_4lxml_5etree__copyDtd(((xmlDtd *)__pyx_v_c_sibling)); if (unlikely(__pyx_t_4 == ((xmlDtd *)NULL))) __PYX_ERR(5, 1122, __pyx_L1_error) + __pyx_t_4 = __pyx_f_4lxml_5etree__copyDtd(((xmlDtd *)__pyx_v_c_sibling)); if (unlikely(__pyx_t_4 == ((xmlDtd *)NULL))) __PYX_ERR(5, 1117, __pyx_L1_error) __pyx_v_c_copy = ((xmlNode *)__pyx_t_4); - /* "src/lxml/apihelpers.pxi":1123 + /* "src/lxml/apihelpers.pxi":1118 * if c_sibling.type == tree.XML_DTD_NODE: * c_copy = _copyDtd(c_sibling) * if c_sibling == c_node.doc.intSubset: # <<<<<<<<<<<<<< @@ -30887,7 +30814,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_t_1 = ((__pyx_v_c_sibling == ((xmlNode *)__pyx_v_c_node->doc->intSubset)) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1124 + /* "src/lxml/apihelpers.pxi":1119 * c_copy = _copyDtd(c_sibling) * if c_sibling == c_node.doc.intSubset: * c_target.doc.intSubset = c_copy # <<<<<<<<<<<<<< @@ -30896,7 +30823,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ __pyx_v_c_target->doc->intSubset = ((xmlDtd *)__pyx_v_c_copy); - /* "src/lxml/apihelpers.pxi":1123 + /* "src/lxml/apihelpers.pxi":1118 * if c_sibling.type == tree.XML_DTD_NODE: * c_copy = _copyDtd(c_sibling) * if c_sibling == c_node.doc.intSubset: # <<<<<<<<<<<<<< @@ -30906,7 +30833,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, goto __pyx_L10; } - /* "src/lxml/apihelpers.pxi":1126 + /* "src/lxml/apihelpers.pxi":1121 * c_target.doc.intSubset = c_copy * else: # c_sibling == c_node.doc.extSubset * c_target.doc.extSubset = c_copy # <<<<<<<<<<<<<< @@ -30918,7 +30845,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, } __pyx_L10:; - /* "src/lxml/apihelpers.pxi":1121 + /* "src/lxml/apihelpers.pxi":1116 * c_sibling = c_sibling.prev * while c_sibling != c_node: * if c_sibling.type == tree.XML_DTD_NODE: # <<<<<<<<<<<<<< @@ -30928,7 +30855,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, goto __pyx_L9; } - /* "src/lxml/apihelpers.pxi":1128 + /* "src/lxml/apihelpers.pxi":1123 * c_target.doc.extSubset = c_copy * else: * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) # <<<<<<<<<<<<<< @@ -30938,7 +30865,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, /*else*/ { __pyx_v_c_copy = xmlDocCopyNode(__pyx_v_c_sibling, __pyx_v_c_target->doc, 1); - /* "src/lxml/apihelpers.pxi":1129 + /* "src/lxml/apihelpers.pxi":1124 * else: * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) * if c_copy is NULL: # <<<<<<<<<<<<<< @@ -30948,16 +30875,16 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_t_1 = ((__pyx_v_c_copy == NULL) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1130 + /* "src/lxml/apihelpers.pxi":1125 * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) * if c_copy is NULL: * raise MemoryError() # <<<<<<<<<<<<<< * tree.xmlAddPrevSibling(c_target, c_copy) * c_sibling = c_sibling.next */ - PyErr_NoMemory(); __PYX_ERR(5, 1130, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(5, 1125, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1129 + /* "src/lxml/apihelpers.pxi":1124 * else: * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) * if c_copy is NULL: # <<<<<<<<<<<<<< @@ -30968,7 +30895,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, } __pyx_L9:; - /* "src/lxml/apihelpers.pxi":1131 + /* "src/lxml/apihelpers.pxi":1126 * if c_copy is NULL: * raise MemoryError() * tree.xmlAddPrevSibling(c_target, c_copy) # <<<<<<<<<<<<<< @@ -30977,7 +30904,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ (void)(xmlAddPrevSibling(__pyx_v_c_target, __pyx_v_c_copy)); - /* "src/lxml/apihelpers.pxi":1132 + /* "src/lxml/apihelpers.pxi":1127 * raise MemoryError() * tree.xmlAddPrevSibling(c_target, c_copy) * c_sibling = c_sibling.next # <<<<<<<<<<<<<< @@ -30988,7 +30915,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_v_c_sibling = __pyx_t_3; } - /* "src/lxml/apihelpers.pxi":1133 + /* "src/lxml/apihelpers.pxi":1128 * tree.xmlAddPrevSibling(c_target, c_copy) * c_sibling = c_sibling.next * while c_sibling.next != NULL and \ # <<<<<<<<<<<<<< @@ -31003,7 +30930,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, goto __pyx_L14_bool_binop_done; } - /* "src/lxml/apihelpers.pxi":1134 + /* "src/lxml/apihelpers.pxi":1129 * c_sibling = c_sibling.next * while c_sibling.next != NULL and \ * (c_sibling.next.type == tree.XML_PI_NODE or # <<<<<<<<<<<<<< @@ -31014,7 +30941,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, case XML_PI_NODE: case XML_COMMENT_NODE: - /* "src/lxml/apihelpers.pxi":1135 + /* "src/lxml/apihelpers.pxi":1130 * while c_sibling.next != NULL and \ * (c_sibling.next.type == tree.XML_PI_NODE or * c_sibling.next.type == tree.XML_COMMENT_NODE): # <<<<<<<<<<<<<< @@ -31023,7 +30950,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ __pyx_t_2 = 1; - /* "src/lxml/apihelpers.pxi":1134 + /* "src/lxml/apihelpers.pxi":1129 * c_sibling = c_sibling.next * while c_sibling.next != NULL and \ * (c_sibling.next.type == tree.XML_PI_NODE or # <<<<<<<<<<<<<< @@ -31039,7 +30966,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_L14_bool_binop_done:; if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1136 + /* "src/lxml/apihelpers.pxi":1131 * (c_sibling.next.type == tree.XML_PI_NODE or * c_sibling.next.type == tree.XML_COMMENT_NODE): * c_sibling = c_sibling.next # <<<<<<<<<<<<<< @@ -31049,7 +30976,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_t_3 = __pyx_v_c_sibling->next; __pyx_v_c_sibling = __pyx_t_3; - /* "src/lxml/apihelpers.pxi":1137 + /* "src/lxml/apihelpers.pxi":1132 * c_sibling.next.type == tree.XML_COMMENT_NODE): * c_sibling = c_sibling.next * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) # <<<<<<<<<<<<<< @@ -31058,7 +30985,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ __pyx_v_c_copy = xmlDocCopyNode(__pyx_v_c_sibling, __pyx_v_c_target->doc, 1); - /* "src/lxml/apihelpers.pxi":1138 + /* "src/lxml/apihelpers.pxi":1133 * c_sibling = c_sibling.next * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) * if c_copy is NULL: # <<<<<<<<<<<<<< @@ -31068,16 +30995,16 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, __pyx_t_1 = ((__pyx_v_c_copy == NULL) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1139 + /* "src/lxml/apihelpers.pxi":1134 * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) * if c_copy is NULL: * raise MemoryError() # <<<<<<<<<<<<<< * tree.xmlAddNextSibling(c_target, c_copy) * */ - PyErr_NoMemory(); __PYX_ERR(5, 1139, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(5, 1134, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1138 + /* "src/lxml/apihelpers.pxi":1133 * c_sibling = c_sibling.next * c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1) * if c_copy is NULL: # <<<<<<<<<<<<<< @@ -31086,7 +31013,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, */ } - /* "src/lxml/apihelpers.pxi":1140 + /* "src/lxml/apihelpers.pxi":1135 * if c_copy is NULL: * raise MemoryError() * tree.xmlAddNextSibling(c_target, c_copy) # <<<<<<<<<<<<<< @@ -31096,7 +31023,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, (void)(xmlAddNextSibling(__pyx_v_c_target, __pyx_v_c_copy)); } - /* "src/lxml/apihelpers.pxi":1112 + /* "src/lxml/apihelpers.pxi":1107 * return 0 * * cdef int _copyNonElementSiblings(xmlNode* c_node, xmlNode* c_target) except -1: # <<<<<<<<<<<<<< @@ -31115,7 +31042,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node, return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1142 +/* "src/lxml/apihelpers.pxi":1137 * tree.xmlAddNextSibling(c_target, c_copy) * * cdef int _deleteSlice(_Document doc, xmlNode* c_node, # <<<<<<<<<<<<<< @@ -31138,7 +31065,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x int __pyx_t_6; __Pyx_RefNannySetupContext("_deleteSlice", 0); - /* "src/lxml/apihelpers.pxi":1150 + /* "src/lxml/apihelpers.pxi":1145 * cdef Py_ssize_t c, i * cdef _node_to_node_function next_element * if c_node is NULL: # <<<<<<<<<<<<<< @@ -31148,7 +31075,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1151 + /* "src/lxml/apihelpers.pxi":1146 * cdef _node_to_node_function next_element * if c_node is NULL: * return 0 # <<<<<<<<<<<<<< @@ -31158,7 +31085,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1150 + /* "src/lxml/apihelpers.pxi":1145 * cdef Py_ssize_t c, i * cdef _node_to_node_function next_element * if c_node is NULL: # <<<<<<<<<<<<<< @@ -31167,7 +31094,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ } - /* "src/lxml/apihelpers.pxi":1152 + /* "src/lxml/apihelpers.pxi":1147 * if c_node is NULL: * return 0 * if step > 0: # <<<<<<<<<<<<<< @@ -31177,7 +31104,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_t_1 = ((__pyx_v_step > 0) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1153 + /* "src/lxml/apihelpers.pxi":1148 * return 0 * if step > 0: * next_element = _nextElement # <<<<<<<<<<<<<< @@ -31186,7 +31113,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ __pyx_v_next_element = __pyx_f_4lxml_5etree__nextElement; - /* "src/lxml/apihelpers.pxi":1152 + /* "src/lxml/apihelpers.pxi":1147 * if c_node is NULL: * return 0 * if step > 0: # <<<<<<<<<<<<<< @@ -31196,7 +31123,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x goto __pyx_L4; } - /* "src/lxml/apihelpers.pxi":1155 + /* "src/lxml/apihelpers.pxi":1150 * next_element = _nextElement * else: * step = -step # <<<<<<<<<<<<<< @@ -31206,7 +31133,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x /*else*/ { __pyx_v_step = (-__pyx_v_step); - /* "src/lxml/apihelpers.pxi":1156 + /* "src/lxml/apihelpers.pxi":1151 * else: * step = -step * next_element = _previousElement # <<<<<<<<<<<<<< @@ -31217,7 +31144,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x } __pyx_L4:; - /* "src/lxml/apihelpers.pxi":1158 + /* "src/lxml/apihelpers.pxi":1153 * next_element = _previousElement * # now start deleting nodes * c = 0 # <<<<<<<<<<<<<< @@ -31226,7 +31153,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ __pyx_v_c = 0; - /* "src/lxml/apihelpers.pxi":1159 + /* "src/lxml/apihelpers.pxi":1154 * # now start deleting nodes * c = 0 * c_next = c_node # <<<<<<<<<<<<<< @@ -31235,7 +31162,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ __pyx_v_c_next = __pyx_v_c_node; - /* "src/lxml/apihelpers.pxi":1160 + /* "src/lxml/apihelpers.pxi":1155 * c = 0 * c_next = c_node * while c_node is not NULL and c < count: # <<<<<<<<<<<<<< @@ -31254,7 +31181,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_L7_bool_binop_done:; if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1161 + /* "src/lxml/apihelpers.pxi":1156 * c_next = c_node * while c_node is not NULL and c < count: * for i in range(step): # <<<<<<<<<<<<<< @@ -31266,7 +31193,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { __pyx_v_i = __pyx_t_5; - /* "src/lxml/apihelpers.pxi":1162 + /* "src/lxml/apihelpers.pxi":1157 * while c_node is not NULL and c < count: * for i in range(step): * c_next = next_element(c_next) # <<<<<<<<<<<<<< @@ -31275,7 +31202,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ __pyx_v_c_next = __pyx_v_next_element(__pyx_v_c_next); - /* "src/lxml/apihelpers.pxi":1163 + /* "src/lxml/apihelpers.pxi":1158 * for i in range(step): * c_next = next_element(c_next) * if c_next is NULL: # <<<<<<<<<<<<<< @@ -31285,7 +31212,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_t_1 = ((__pyx_v_c_next == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1164 + /* "src/lxml/apihelpers.pxi":1159 * c_next = next_element(c_next) * if c_next is NULL: * break # <<<<<<<<<<<<<< @@ -31294,7 +31221,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ goto __pyx_L10_break; - /* "src/lxml/apihelpers.pxi":1163 + /* "src/lxml/apihelpers.pxi":1158 * for i in range(step): * c_next = next_element(c_next) * if c_next is NULL: # <<<<<<<<<<<<<< @@ -31305,16 +31232,16 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x } __pyx_L10_break:; - /* "src/lxml/apihelpers.pxi":1165 + /* "src/lxml/apihelpers.pxi":1160 * if c_next is NULL: * break * _removeNode(doc, c_node) # <<<<<<<<<<<<<< * c += 1 * c_node = c_next */ - __pyx_t_6 = __pyx_f_4lxml_5etree__removeNode(__pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 1165, __pyx_L1_error) + __pyx_t_6 = __pyx_f_4lxml_5etree__removeNode(__pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 1160, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1166 + /* "src/lxml/apihelpers.pxi":1161 * break * _removeNode(doc, c_node) * c += 1 # <<<<<<<<<<<<<< @@ -31323,7 +31250,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x */ __pyx_v_c = (__pyx_v_c + 1); - /* "src/lxml/apihelpers.pxi":1167 + /* "src/lxml/apihelpers.pxi":1162 * _removeNode(doc, c_node) * c += 1 * c_node = c_next # <<<<<<<<<<<<<< @@ -31333,7 +31260,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_v_c_node = __pyx_v_c_next; } - /* "src/lxml/apihelpers.pxi":1168 + /* "src/lxml/apihelpers.pxi":1163 * c += 1 * c_node = c_next * return 0 # <<<<<<<<<<<<<< @@ -31343,7 +31270,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1142 + /* "src/lxml/apihelpers.pxi":1137 * tree.xmlAddNextSibling(c_target, c_copy) * * cdef int _deleteSlice(_Document doc, xmlNode* c_node, # <<<<<<<<<<<<<< @@ -31360,7 +31287,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1170 +/* "src/lxml/apihelpers.pxi":1165 * return 0 * * cdef int _replaceSlice(_Element parent, xmlNode* c_node, # <<<<<<<<<<<<<< @@ -31396,7 +31323,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __Pyx_RefNannySetupContext("_replaceSlice", 0); __Pyx_INCREF(__pyx_v_elements); - /* "src/lxml/apihelpers.pxi":1185 + /* "src/lxml/apihelpers.pxi":1180 * cdef Py_ssize_t seqlength, i, c * cdef _node_to_node_function next_element * assert step > 0 # <<<<<<<<<<<<<< @@ -31407,12 +31334,12 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_step > 0) != 0))) { PyErr_SetNone(PyExc_AssertionError); - __PYX_ERR(5, 1185, __pyx_L1_error) + __PYX_ERR(5, 1180, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1186 + /* "src/lxml/apihelpers.pxi":1181 * cdef _node_to_node_function next_element * assert step > 0 * if left_to_right: # <<<<<<<<<<<<<< @@ -31422,7 +31349,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_1 = (__pyx_v_left_to_right != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1187 + /* "src/lxml/apihelpers.pxi":1182 * assert step > 0 * if left_to_right: * next_element = _nextElement # <<<<<<<<<<<<<< @@ -31431,7 +31358,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_next_element = __pyx_f_4lxml_5etree__nextElement; - /* "src/lxml/apihelpers.pxi":1186 + /* "src/lxml/apihelpers.pxi":1181 * cdef _node_to_node_function next_element * assert step > 0 * if left_to_right: # <<<<<<<<<<<<<< @@ -31441,7 +31368,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":1189 + /* "src/lxml/apihelpers.pxi":1184 * next_element = _nextElement * else: * next_element = _previousElement # <<<<<<<<<<<<<< @@ -31453,7 +31380,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L3:; - /* "src/lxml/apihelpers.pxi":1191 + /* "src/lxml/apihelpers.pxi":1186 * next_element = _previousElement * * if not isinstance(elements, (list, tuple)): # <<<<<<<<<<<<<< @@ -31474,19 +31401,19 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1192 + /* "src/lxml/apihelpers.pxi":1187 * * if not isinstance(elements, (list, tuple)): * elements = list(elements) # <<<<<<<<<<<<<< * * if step != 1 or not left_to_right: */ - __pyx_t_4 = PySequence_List(__pyx_v_elements); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1192, __pyx_L1_error) + __pyx_t_4 = PySequence_List(__pyx_v_elements); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_elements, __pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1191 + /* "src/lxml/apihelpers.pxi":1186 * next_element = _previousElement * * if not isinstance(elements, (list, tuple)): # <<<<<<<<<<<<<< @@ -31495,7 +31422,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1194 + /* "src/lxml/apihelpers.pxi":1189 * elements = list(elements) * * if step != 1 or not left_to_right: # <<<<<<<<<<<<<< @@ -31513,17 +31440,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_L8_bool_binop_done:; if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1196 + /* "src/lxml/apihelpers.pxi":1191 * if step != 1 or not left_to_right: * # *replacing* children stepwise with list => check size! * seqlength = len(elements) # <<<<<<<<<<<<<< * if seqlength != slicelength: * raise ValueError, f"attempt to assign sequence of size {seqlength} " \ */ - __pyx_t_5 = PyObject_Length(__pyx_v_elements); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1196, __pyx_L1_error) + __pyx_t_5 = PyObject_Length(__pyx_v_elements); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1191, __pyx_L1_error) __pyx_v_seqlength = __pyx_t_5; - /* "src/lxml/apihelpers.pxi":1197 + /* "src/lxml/apihelpers.pxi":1192 * # *replacing* children stepwise with list => check size! * seqlength = len(elements) * if seqlength != slicelength: # <<<<<<<<<<<<<< @@ -31533,14 +31460,14 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_seqlength != __pyx_v_slicelength) != 0); if (unlikely(__pyx_t_2)) { - /* "src/lxml/apihelpers.pxi":1198 + /* "src/lxml/apihelpers.pxi":1193 * seqlength = len(elements) * if seqlength != slicelength: * raise ValueError, f"attempt to assign sequence of size {seqlength} " \ # <<<<<<<<<<<<<< * f"to extended slice of size {slicelength}" * */ - __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1198, __pyx_L1_error) + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = 127; @@ -31548,7 +31475,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_5 += 35; __Pyx_GIVEREF(__pyx_kp_u_attempt_to_assign_sequence_of_si); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_attempt_to_assign_sequence_of_si); - __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_seqlength, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1198, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_seqlength, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); @@ -31559,35 +31486,35 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __Pyx_GIVEREF(__pyx_kp_u_to_extended_slice_of_size); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_to_extended_slice_of_size); - /* "src/lxml/apihelpers.pxi":1199 + /* "src/lxml/apihelpers.pxi":1194 * if seqlength != slicelength: * raise ValueError, f"attempt to assign sequence of size {seqlength} " \ * f"to extended slice of size {slicelength}" # <<<<<<<<<<<<<< * * if c_node is NULL: */ - __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_slicelength, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1199, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_slicelength, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1194, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1198 + /* "src/lxml/apihelpers.pxi":1193 * seqlength = len(elements) * if seqlength != slicelength: * raise ValueError, f"attempt to assign sequence of size {seqlength} " \ # <<<<<<<<<<<<<< * f"to extended slice of size {slicelength}" * */ - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1198, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_7, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __PYX_ERR(5, 1198, __pyx_L1_error) + __PYX_ERR(5, 1193, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1197 + /* "src/lxml/apihelpers.pxi":1192 * # *replacing* children stepwise with list => check size! * seqlength = len(elements) * if seqlength != slicelength: # <<<<<<<<<<<<<< @@ -31596,7 +31523,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1194 + /* "src/lxml/apihelpers.pxi":1189 * elements = list(elements) * * if step != 1 or not left_to_right: # <<<<<<<<<<<<<< @@ -31605,7 +31532,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1201 + /* "src/lxml/apihelpers.pxi":1196 * f"to extended slice of size {slicelength}" * * if c_node is NULL: # <<<<<<<<<<<<<< @@ -31615,7 +31542,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1203 + /* "src/lxml/apihelpers.pxi":1198 * if c_node is NULL: * # no children yet => add all elements straight away * if left_to_right: # <<<<<<<<<<<<<< @@ -31625,7 +31552,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (__pyx_v_left_to_right != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1204 + /* "src/lxml/apihelpers.pxi":1199 * # no children yet => add all elements straight away * if left_to_right: * for element in elements: # <<<<<<<<<<<<<< @@ -31636,26 +31563,26 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_7 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1204, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1204, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1199, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_7))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1204, __pyx_L1_error) + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1199, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1204, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1204, __pyx_L1_error) + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1199, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1204, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } @@ -31665,17 +31592,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 1204, __pyx_L1_error) + else __PYX_ERR(5, 1199, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_4); } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1204, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1199, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_4)); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1205 + /* "src/lxml/apihelpers.pxi":1200 * if left_to_right: * for element in elements: * assert element is not None, u"Node must not be None" # <<<<<<<<<<<<<< @@ -31687,21 +31614,21 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None); if (unlikely(!(__pyx_t_2 != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None); - __PYX_ERR(5, 1205, __pyx_L1_error) + __PYX_ERR(5, 1200, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1206 + /* "src/lxml/apihelpers.pxi":1201 * for element in elements: * assert element is not None, u"Node must not be None" * _appendChild(parent, element) # <<<<<<<<<<<<<< * else: * for element in elements: */ - __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1206, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1201, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1204 + /* "src/lxml/apihelpers.pxi":1199 * # no children yet => add all elements straight away * if left_to_right: * for element in elements: # <<<<<<<<<<<<<< @@ -31711,7 +31638,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1203 + /* "src/lxml/apihelpers.pxi":1198 * if c_node is NULL: * # no children yet => add all elements straight away * if left_to_right: # <<<<<<<<<<<<<< @@ -31721,7 +31648,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L12; } - /* "src/lxml/apihelpers.pxi":1208 + /* "src/lxml/apihelpers.pxi":1203 * _appendChild(parent, element) * else: * for element in elements: # <<<<<<<<<<<<<< @@ -31733,26 +31660,26 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_7 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1208, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1208, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1203, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_7))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1208, __pyx_L1_error) + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1203, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1208, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1208, __pyx_L1_error) + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1203, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1208, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } @@ -31762,17 +31689,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 1208, __pyx_L1_error) + else __PYX_ERR(5, 1203, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_4); } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1208, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1203, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_4)); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1209 + /* "src/lxml/apihelpers.pxi":1204 * else: * for element in elements: * assert element is not None, u"Node must not be None" # <<<<<<<<<<<<<< @@ -31784,21 +31711,21 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None); if (unlikely(!(__pyx_t_2 != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None); - __PYX_ERR(5, 1209, __pyx_L1_error) + __PYX_ERR(5, 1204, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1210 + /* "src/lxml/apihelpers.pxi":1205 * for element in elements: * assert element is not None, u"Node must not be None" * _prependChild(parent, element) # <<<<<<<<<<<<<< * return 0 * */ - __pyx_t_9 = __pyx_f_4lxml_5etree__prependChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1210, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__prependChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1205, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1208 + /* "src/lxml/apihelpers.pxi":1203 * _appendChild(parent, element) * else: * for element in elements: # <<<<<<<<<<<<<< @@ -31810,7 +31737,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L12:; - /* "src/lxml/apihelpers.pxi":1211 + /* "src/lxml/apihelpers.pxi":1206 * assert element is not None, u"Node must not be None" * _prependChild(parent, element) * return 0 # <<<<<<<<<<<<<< @@ -31820,7 +31747,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1201 + /* "src/lxml/apihelpers.pxi":1196 * f"to extended slice of size {slicelength}" * * if c_node is NULL: # <<<<<<<<<<<<<< @@ -31829,7 +31756,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1214 + /* "src/lxml/apihelpers.pxi":1209 * * # remove the elements first as some might be re-added * if left_to_right: # <<<<<<<<<<<<<< @@ -31839,7 +31766,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (__pyx_v_left_to_right != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1216 + /* "src/lxml/apihelpers.pxi":1211 * if left_to_right: * # L->R, remember left neighbour * c_orig_neighbour = _previousElement(c_node) # <<<<<<<<<<<<<< @@ -31848,7 +31775,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_orig_neighbour = __pyx_f_4lxml_5etree__previousElement(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1214 + /* "src/lxml/apihelpers.pxi":1209 * * # remove the elements first as some might be re-added * if left_to_right: # <<<<<<<<<<<<<< @@ -31858,7 +31785,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L17; } - /* "src/lxml/apihelpers.pxi":1219 + /* "src/lxml/apihelpers.pxi":1214 * else: * # R->L, remember right neighbour * c_orig_neighbour = _nextElement(c_node) # <<<<<<<<<<<<<< @@ -31870,7 +31797,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L17:; - /* "src/lxml/apihelpers.pxi":1225 + /* "src/lxml/apihelpers.pxi":1220 * # safe to let _removeNode() try (and fail) to free them even if * # the element itself or one of its descendents will be reinserted. * c = 0 # <<<<<<<<<<<<<< @@ -31879,7 +31806,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c = 0; - /* "src/lxml/apihelpers.pxi":1226 + /* "src/lxml/apihelpers.pxi":1221 * # the element itself or one of its descendents will be reinserted. * c = 0 * c_next = c_node # <<<<<<<<<<<<<< @@ -31888,7 +31815,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_next = __pyx_v_c_node; - /* "src/lxml/apihelpers.pxi":1227 + /* "src/lxml/apihelpers.pxi":1222 * c = 0 * c_next = c_node * while c_node is not NULL and c < slicelength: # <<<<<<<<<<<<<< @@ -31907,7 +31834,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_L20_bool_binop_done:; if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1228 + /* "src/lxml/apihelpers.pxi":1223 * c_next = c_node * while c_node is not NULL and c < slicelength: * for i in range(step): # <<<<<<<<<<<<<< @@ -31919,7 +31846,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "src/lxml/apihelpers.pxi":1229 + /* "src/lxml/apihelpers.pxi":1224 * while c_node is not NULL and c < slicelength: * for i in range(step): * c_next = next_element(c_next) # <<<<<<<<<<<<<< @@ -31928,7 +31855,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_next = __pyx_v_next_element(__pyx_v_c_next); - /* "src/lxml/apihelpers.pxi":1230 + /* "src/lxml/apihelpers.pxi":1225 * for i in range(step): * c_next = next_element(c_next) * if c_next is NULL: # <<<<<<<<<<<<<< @@ -31938,7 +31865,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_next == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1231 + /* "src/lxml/apihelpers.pxi":1226 * c_next = next_element(c_next) * if c_next is NULL: * break # <<<<<<<<<<<<<< @@ -31947,7 +31874,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ goto __pyx_L23_break; - /* "src/lxml/apihelpers.pxi":1230 + /* "src/lxml/apihelpers.pxi":1225 * for i in range(step): * c_next = next_element(c_next) * if c_next is NULL: # <<<<<<<<<<<<<< @@ -31958,7 +31885,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L23_break:; - /* "src/lxml/apihelpers.pxi":1232 + /* "src/lxml/apihelpers.pxi":1227 * if c_next is NULL: * break * _removeNode(parent._doc, c_node) # <<<<<<<<<<<<<< @@ -31967,10 +31894,10 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_t_7 = ((PyObject *)__pyx_v_parent->_doc); __Pyx_INCREF(__pyx_t_7); - __pyx_t_9 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_node); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1232, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_node); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1227, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1233 + /* "src/lxml/apihelpers.pxi":1228 * break * _removeNode(parent._doc, c_node) * c += 1 # <<<<<<<<<<<<<< @@ -31979,7 +31906,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c = (__pyx_v_c + 1); - /* "src/lxml/apihelpers.pxi":1234 + /* "src/lxml/apihelpers.pxi":1229 * _removeNode(parent._doc, c_node) * c += 1 * c_node = c_next # <<<<<<<<<<<<<< @@ -31989,19 +31916,19 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_v_c_node = __pyx_v_c_next; } - /* "src/lxml/apihelpers.pxi":1237 + /* "src/lxml/apihelpers.pxi":1232 * * # make sure each element is inserted only once * elements = iter(elements) # <<<<<<<<<<<<<< * * # find the first node right of the new insertion point */ - __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1237, __pyx_L1_error) + __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_elements, __pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1240 + /* "src/lxml/apihelpers.pxi":1235 * * # find the first node right of the new insertion point * if left_to_right: # <<<<<<<<<<<<<< @@ -32011,7 +31938,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (__pyx_v_left_to_right != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1241 + /* "src/lxml/apihelpers.pxi":1236 * # find the first node right of the new insertion point * if left_to_right: * if c_orig_neighbour is not NULL: # <<<<<<<<<<<<<< @@ -32021,7 +31948,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_orig_neighbour != NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1242 + /* "src/lxml/apihelpers.pxi":1237 * if left_to_right: * if c_orig_neighbour is not NULL: * c_node = next_element(c_orig_neighbour) # <<<<<<<<<<<<<< @@ -32030,7 +31957,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_node = __pyx_v_next_element(__pyx_v_c_orig_neighbour); - /* "src/lxml/apihelpers.pxi":1241 + /* "src/lxml/apihelpers.pxi":1236 * # find the first node right of the new insertion point * if left_to_right: * if c_orig_neighbour is not NULL: # <<<<<<<<<<<<<< @@ -32040,7 +31967,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L26; } - /* "src/lxml/apihelpers.pxi":1245 + /* "src/lxml/apihelpers.pxi":1240 * else: * # before the first element * c_node = _findChildForwards(parent._c_node, 0) # <<<<<<<<<<<<<< @@ -32052,7 +31979,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L26:; - /* "src/lxml/apihelpers.pxi":1240 + /* "src/lxml/apihelpers.pxi":1235 * * # find the first node right of the new insertion point * if left_to_right: # <<<<<<<<<<<<<< @@ -32062,7 +31989,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L25; } - /* "src/lxml/apihelpers.pxi":1246 + /* "src/lxml/apihelpers.pxi":1241 * # before the first element * c_node = _findChildForwards(parent._c_node, 0) * elif c_orig_neighbour is NULL: # <<<<<<<<<<<<<< @@ -32072,7 +31999,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_orig_neighbour == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1249 + /* "src/lxml/apihelpers.pxi":1244 * # at the end, but reversed stepping * # append one element and go to the next insertion point * for element in elements: # <<<<<<<<<<<<<< @@ -32083,26 +32010,26 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_7 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1249, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1249, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1244, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_7))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1249, __pyx_L1_error) + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1244, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1249, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1249, __pyx_L1_error) + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1244, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1249, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } @@ -32112,17 +32039,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 1249, __pyx_L1_error) + else __PYX_ERR(5, 1244, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_4); } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1249, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1244, __pyx_L1_error) __pyx_v_element = ((struct LxmlElement *)__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1250 + /* "src/lxml/apihelpers.pxi":1245 * # append one element and go to the next insertion point * for element in elements: * assert element is not None, u"Node must not be None" # <<<<<<<<<<<<<< @@ -32134,21 +32061,21 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None); if (unlikely(!(__pyx_t_2 != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None); - __PYX_ERR(5, 1250, __pyx_L1_error) + __PYX_ERR(5, 1245, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1251 + /* "src/lxml/apihelpers.pxi":1246 * for element in elements: * assert element is not None, u"Node must not be None" * _appendChild(parent, element) # <<<<<<<<<<<<<< * c_node = element._c_node * if slicelength > 0: */ - __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1251, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1246, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1252 + /* "src/lxml/apihelpers.pxi":1247 * assert element is not None, u"Node must not be None" * _appendChild(parent, element) * c_node = element._c_node # <<<<<<<<<<<<<< @@ -32158,7 +32085,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_12 = __pyx_v_element->_c_node; __pyx_v_c_node = __pyx_t_12; - /* "src/lxml/apihelpers.pxi":1253 + /* "src/lxml/apihelpers.pxi":1248 * _appendChild(parent, element) * c_node = element._c_node * if slicelength > 0: # <<<<<<<<<<<<<< @@ -32168,7 +32095,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_slicelength > 0) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1254 + /* "src/lxml/apihelpers.pxi":1249 * c_node = element._c_node * if slicelength > 0: * slicelength -= 1 # <<<<<<<<<<<<<< @@ -32177,7 +32104,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_slicelength = (__pyx_v_slicelength - 1); - /* "src/lxml/apihelpers.pxi":1255 + /* "src/lxml/apihelpers.pxi":1250 * if slicelength > 0: * slicelength -= 1 * for i in range(1, step): # <<<<<<<<<<<<<< @@ -32189,7 +32116,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent for (__pyx_t_13 = 1; __pyx_t_13 < __pyx_t_11; __pyx_t_13+=1) { __pyx_v_i = __pyx_t_13; - /* "src/lxml/apihelpers.pxi":1256 + /* "src/lxml/apihelpers.pxi":1251 * slicelength -= 1 * for i in range(1, step): * c_node = next_element(c_node) # <<<<<<<<<<<<<< @@ -32198,7 +32125,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_node = __pyx_v_next_element(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1257 + /* "src/lxml/apihelpers.pxi":1252 * for i in range(1, step): * c_node = next_element(c_node) * if c_node is NULL: # <<<<<<<<<<<<<< @@ -32208,7 +32135,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1258 + /* "src/lxml/apihelpers.pxi":1253 * c_node = next_element(c_node) * if c_node is NULL: * break # <<<<<<<<<<<<<< @@ -32217,7 +32144,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ goto __pyx_L31_break; - /* "src/lxml/apihelpers.pxi":1257 + /* "src/lxml/apihelpers.pxi":1252 * for i in range(1, step): * c_node = next_element(c_node) * if c_node is NULL: # <<<<<<<<<<<<<< @@ -32228,7 +32155,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L31_break:; - /* "src/lxml/apihelpers.pxi":1253 + /* "src/lxml/apihelpers.pxi":1248 * _appendChild(parent, element) * c_node = element._c_node * if slicelength > 0: # <<<<<<<<<<<<<< @@ -32237,7 +32164,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1259 + /* "src/lxml/apihelpers.pxi":1254 * if c_node is NULL: * break * break # <<<<<<<<<<<<<< @@ -32246,7 +32173,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ goto __pyx_L28_break; - /* "src/lxml/apihelpers.pxi":1249 + /* "src/lxml/apihelpers.pxi":1244 * # at the end, but reversed stepping * # append one element and go to the next insertion point * for element in elements: # <<<<<<<<<<<<<< @@ -32257,7 +32184,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_L28_break:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1246 + /* "src/lxml/apihelpers.pxi":1241 * # before the first element * c_node = _findChildForwards(parent._c_node, 0) * elif c_orig_neighbour is NULL: # <<<<<<<<<<<<<< @@ -32267,7 +32194,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L25; } - /* "src/lxml/apihelpers.pxi":1261 + /* "src/lxml/apihelpers.pxi":1256 * break * else: * c_node = c_orig_neighbour # <<<<<<<<<<<<<< @@ -32279,7 +32206,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L25:; - /* "src/lxml/apihelpers.pxi":1263 + /* "src/lxml/apihelpers.pxi":1258 * c_node = c_orig_neighbour * * if left_to_right: # <<<<<<<<<<<<<< @@ -32289,7 +32216,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (__pyx_v_left_to_right != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1266 + /* "src/lxml/apihelpers.pxi":1261 * # adjust step size after removing slice as we are not stepping * # over the newly inserted elements * step -= 1 # <<<<<<<<<<<<<< @@ -32298,7 +32225,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_step = (__pyx_v_step - 1); - /* "src/lxml/apihelpers.pxi":1263 + /* "src/lxml/apihelpers.pxi":1258 * c_node = c_orig_neighbour * * if left_to_right: # <<<<<<<<<<<<<< @@ -32307,7 +32234,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1269 + /* "src/lxml/apihelpers.pxi":1264 * * # now insert elements where we removed them * if c_node is not NULL: # <<<<<<<<<<<<<< @@ -32317,7 +32244,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1270 + /* "src/lxml/apihelpers.pxi":1265 * # now insert elements where we removed them * if c_node is not NULL: * for element in elements: # <<<<<<<<<<<<<< @@ -32328,26 +32255,26 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_7 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1270, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1270, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1265, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_7))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1270, __pyx_L1_error) + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1265, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1270, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1270, __pyx_L1_error) + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1265, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1270, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } @@ -32357,17 +32284,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 1270, __pyx_L1_error) + else __PYX_ERR(5, 1265, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_4); } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1270, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1265, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_4)); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1271 + /* "src/lxml/apihelpers.pxi":1266 * if c_node is not NULL: * for element in elements: * assert element is not None, u"Node must not be None" # <<<<<<<<<<<<<< @@ -32379,21 +32306,21 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None); if (unlikely(!(__pyx_t_2 != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None); - __PYX_ERR(5, 1271, __pyx_L1_error) + __PYX_ERR(5, 1266, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1272 + /* "src/lxml/apihelpers.pxi":1267 * for element in elements: * assert element is not None, u"Node must not be None" * _assertValidNode(element) # <<<<<<<<<<<<<< * # move element and tail over * c_source_doc = element._c_node.doc */ - __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1272, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1267, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1274 + /* "src/lxml/apihelpers.pxi":1269 * _assertValidNode(element) * # move element and tail over * c_source_doc = element._c_node.doc # <<<<<<<<<<<<<< @@ -32403,7 +32330,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_14 = __pyx_v_element->_c_node->doc; __pyx_v_c_source_doc = __pyx_t_14; - /* "src/lxml/apihelpers.pxi":1275 + /* "src/lxml/apihelpers.pxi":1270 * # move element and tail over * c_source_doc = element._c_node.doc * c_next = element._c_node.next # <<<<<<<<<<<<<< @@ -32413,7 +32340,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_12 = __pyx_v_element->_c_node->next; __pyx_v_c_next = __pyx_t_12; - /* "src/lxml/apihelpers.pxi":1276 + /* "src/lxml/apihelpers.pxi":1271 * c_source_doc = element._c_node.doc * c_next = element._c_node.next * tree.xmlAddPrevSibling(c_node, element._c_node) # <<<<<<<<<<<<<< @@ -32422,7 +32349,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ (void)(xmlAddPrevSibling(__pyx_v_c_node, __pyx_v_element->_c_node)); - /* "src/lxml/apihelpers.pxi":1277 + /* "src/lxml/apihelpers.pxi":1272 * c_next = element._c_node.next * tree.xmlAddPrevSibling(c_node, element._c_node) * _moveTail(c_next, element._c_node) # <<<<<<<<<<<<<< @@ -32431,7 +32358,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_element->_c_node); - /* "src/lxml/apihelpers.pxi":1280 + /* "src/lxml/apihelpers.pxi":1275 * * # integrate element into new document * moveNodeToDocument(parent._doc, c_source_doc, element._c_node) # <<<<<<<<<<<<<< @@ -32440,10 +32367,10 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_t_4 = ((PyObject *)__pyx_v_parent->_doc); __Pyx_INCREF(__pyx_t_4); - __pyx_t_9 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1280, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1275, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1283 + /* "src/lxml/apihelpers.pxi":1278 * * # stop at the end of the slice * if slicelength > 0: # <<<<<<<<<<<<<< @@ -32453,7 +32380,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_slicelength > 0) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1284 + /* "src/lxml/apihelpers.pxi":1279 * # stop at the end of the slice * if slicelength > 0: * slicelength -= 1 # <<<<<<<<<<<<<< @@ -32462,7 +32389,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_slicelength = (__pyx_v_slicelength - 1); - /* "src/lxml/apihelpers.pxi":1285 + /* "src/lxml/apihelpers.pxi":1280 * if slicelength > 0: * slicelength -= 1 * for i in range(step): # <<<<<<<<<<<<<< @@ -32474,7 +32401,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_11; __pyx_t_13+=1) { __pyx_v_i = __pyx_t_13; - /* "src/lxml/apihelpers.pxi":1286 + /* "src/lxml/apihelpers.pxi":1281 * slicelength -= 1 * for i in range(step): * c_node = next_element(c_node) # <<<<<<<<<<<<<< @@ -32483,7 +32410,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_node = __pyx_v_next_element(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1287 + /* "src/lxml/apihelpers.pxi":1282 * for i in range(step): * c_node = next_element(c_node) * if c_node is NULL: # <<<<<<<<<<<<<< @@ -32493,7 +32420,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1288 + /* "src/lxml/apihelpers.pxi":1283 * c_node = next_element(c_node) * if c_node is NULL: * break # <<<<<<<<<<<<<< @@ -32502,7 +32429,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ goto __pyx_L39_break; - /* "src/lxml/apihelpers.pxi":1287 + /* "src/lxml/apihelpers.pxi":1282 * for i in range(step): * c_node = next_element(c_node) * if c_node is NULL: # <<<<<<<<<<<<<< @@ -32513,7 +32440,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L39_break:; - /* "src/lxml/apihelpers.pxi":1289 + /* "src/lxml/apihelpers.pxi":1284 * if c_node is NULL: * break * if c_node is NULL: # <<<<<<<<<<<<<< @@ -32523,7 +32450,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1290 + /* "src/lxml/apihelpers.pxi":1285 * break * if c_node is NULL: * break # <<<<<<<<<<<<<< @@ -32532,7 +32459,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ goto __pyx_L36_break; - /* "src/lxml/apihelpers.pxi":1289 + /* "src/lxml/apihelpers.pxi":1284 * if c_node is NULL: * break * if c_node is NULL: # <<<<<<<<<<<<<< @@ -32541,7 +32468,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1283 + /* "src/lxml/apihelpers.pxi":1278 * * # stop at the end of the slice * if slicelength > 0: # <<<<<<<<<<<<<< @@ -32550,7 +32477,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1270 + /* "src/lxml/apihelpers.pxi":1265 * # now insert elements where we removed them * if c_node is not NULL: * for element in elements: # <<<<<<<<<<<<<< @@ -32560,7 +32487,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } /*else*/ { - /* "src/lxml/apihelpers.pxi":1293 + /* "src/lxml/apihelpers.pxi":1288 * else: * # everything inserted * return 0 # <<<<<<<<<<<<<< @@ -32572,7 +32499,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":1270 + /* "src/lxml/apihelpers.pxi":1265 * # now insert elements where we removed them * if c_node is not NULL: * for element in elements: # <<<<<<<<<<<<<< @@ -32582,7 +32509,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_L36_break:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1269 + /* "src/lxml/apihelpers.pxi":1264 * * # now insert elements where we removed them * if c_node is not NULL: # <<<<<<<<<<<<<< @@ -32591,7 +32518,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1296 + /* "src/lxml/apihelpers.pxi":1291 * * # append the remaining elements at the respective end * if left_to_right: # <<<<<<<<<<<<<< @@ -32601,7 +32528,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (__pyx_v_left_to_right != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1297 + /* "src/lxml/apihelpers.pxi":1292 * # append the remaining elements at the respective end * if left_to_right: * for element in elements: # <<<<<<<<<<<<<< @@ -32612,26 +32539,26 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_7 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1297, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1297, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1292, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_7))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1297, __pyx_L1_error) + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1292, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1297, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1297, __pyx_L1_error) + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1292, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1297, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } @@ -32641,17 +32568,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 1297, __pyx_L1_error) + else __PYX_ERR(5, 1292, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_4); } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1297, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1292, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_4)); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1298 + /* "src/lxml/apihelpers.pxi":1293 * if left_to_right: * for element in elements: * assert element is not None, u"Node must not be None" # <<<<<<<<<<<<<< @@ -32663,30 +32590,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None); if (unlikely(!(__pyx_t_2 != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None); - __PYX_ERR(5, 1298, __pyx_L1_error) + __PYX_ERR(5, 1293, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1299 + /* "src/lxml/apihelpers.pxi":1294 * for element in elements: * assert element is not None, u"Node must not be None" * _assertValidNode(element) # <<<<<<<<<<<<<< * _appendChild(parent, element) * else: */ - __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1299, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1294, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1300 + /* "src/lxml/apihelpers.pxi":1295 * assert element is not None, u"Node must not be None" * _assertValidNode(element) * _appendChild(parent, element) # <<<<<<<<<<<<<< * else: * for element in elements: */ - __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1300, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1295, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1297 + /* "src/lxml/apihelpers.pxi":1292 * # append the remaining elements at the respective end * if left_to_right: * for element in elements: # <<<<<<<<<<<<<< @@ -32696,7 +32623,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":1296 + /* "src/lxml/apihelpers.pxi":1291 * * # append the remaining elements at the respective end * if left_to_right: # <<<<<<<<<<<<<< @@ -32706,7 +32633,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent goto __pyx_L43; } - /* "src/lxml/apihelpers.pxi":1302 + /* "src/lxml/apihelpers.pxi":1297 * _appendChild(parent, element) * else: * for element in elements: # <<<<<<<<<<<<<< @@ -32718,26 +32645,26 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_7 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_8 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1302, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1302, __pyx_L1_error) + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1297, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_7))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1302, __pyx_L1_error) + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1297, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1302, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1302, __pyx_L1_error) + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 1297, __pyx_L1_error) #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1302, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } @@ -32747,17 +32674,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(5, 1302, __pyx_L1_error) + else __PYX_ERR(5, 1297, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_4); } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1302, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(5, 1297, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_4)); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1303 + /* "src/lxml/apihelpers.pxi":1298 * else: * for element in elements: * assert element is not None, u"Node must not be None" # <<<<<<<<<<<<<< @@ -32769,30 +32696,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None); if (unlikely(!(__pyx_t_2 != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None); - __PYX_ERR(5, 1303, __pyx_L1_error) + __PYX_ERR(5, 1298, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1304 + /* "src/lxml/apihelpers.pxi":1299 * for element in elements: * assert element is not None, u"Node must not be None" * _assertValidNode(element) # <<<<<<<<<<<<<< * _prependChild(parent, element) * */ - __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1304, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1299, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1305 + /* "src/lxml/apihelpers.pxi":1300 * assert element is not None, u"Node must not be None" * _assertValidNode(element) * _prependChild(parent, element) # <<<<<<<<<<<<<< * * return 0 */ - __pyx_t_9 = __pyx_f_4lxml_5etree__prependChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1305, __pyx_L1_error) + __pyx_t_9 = __pyx_f_4lxml_5etree__prependChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 1300, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1302 + /* "src/lxml/apihelpers.pxi":1297 * _appendChild(parent, element) * else: * for element in elements: # <<<<<<<<<<<<<< @@ -32804,7 +32731,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent } __pyx_L43:; - /* "src/lxml/apihelpers.pxi":1307 + /* "src/lxml/apihelpers.pxi":1302 * _prependChild(parent, element) * * return 0 # <<<<<<<<<<<<<< @@ -32814,7 +32741,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1170 + /* "src/lxml/apihelpers.pxi":1165 * return 0 * * cdef int _replaceSlice(_Element parent, xmlNode* c_node, # <<<<<<<<<<<<<< @@ -32835,7 +32762,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1310 +/* "src/lxml/apihelpers.pxi":1305 * * * cdef int _linkChild(xmlNode* c_parent, xmlNode* c_node) except -1: # <<<<<<<<<<<<<< @@ -32850,7 +32777,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ xmlNode *__pyx_t_2; __Pyx_RefNannySetupContext("_linkChild", 0); - /* "src/lxml/apihelpers.pxi":1313 + /* "src/lxml/apihelpers.pxi":1308 * """Adaptation of 'xmlAddChild()' that deep-fix the document links iteratively. * """ * assert _isElement(c_node) # <<<<<<<<<<<<<< @@ -32861,12 +32788,12 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!(_isElement(__pyx_v_c_node) != 0))) { PyErr_SetNone(PyExc_AssertionError); - __PYX_ERR(5, 1313, __pyx_L1_error) + __PYX_ERR(5, 1308, __pyx_L1_error) } } #endif - /* "src/lxml/apihelpers.pxi":1314 + /* "src/lxml/apihelpers.pxi":1309 * """ * assert _isElement(c_node) * c_node.parent = c_parent # <<<<<<<<<<<<<< @@ -32875,7 +32802,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ */ __pyx_v_c_node->parent = __pyx_v_c_parent; - /* "src/lxml/apihelpers.pxi":1315 + /* "src/lxml/apihelpers.pxi":1310 * assert _isElement(c_node) * c_node.parent = c_parent * if c_parent.children is NULL: # <<<<<<<<<<<<<< @@ -32885,7 +32812,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ __pyx_t_1 = ((__pyx_v_c_parent->children == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1316 + /* "src/lxml/apihelpers.pxi":1311 * c_node.parent = c_parent * if c_parent.children is NULL: * c_parent.children = c_parent.last = c_node # <<<<<<<<<<<<<< @@ -32895,7 +32822,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ __pyx_v_c_parent->children = __pyx_v_c_node; __pyx_v_c_parent->last = __pyx_v_c_node; - /* "src/lxml/apihelpers.pxi":1315 + /* "src/lxml/apihelpers.pxi":1310 * assert _isElement(c_node) * c_node.parent = c_parent * if c_parent.children is NULL: # <<<<<<<<<<<<<< @@ -32905,7 +32832,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":1318 + /* "src/lxml/apihelpers.pxi":1313 * c_parent.children = c_parent.last = c_node * else: * c_node.prev = c_parent.last # <<<<<<<<<<<<<< @@ -32916,7 +32843,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ __pyx_t_2 = __pyx_v_c_parent->last; __pyx_v_c_node->prev = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":1319 + /* "src/lxml/apihelpers.pxi":1314 * else: * c_node.prev = c_parent.last * c_parent.last.next = c_node # <<<<<<<<<<<<<< @@ -32925,7 +32852,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ */ __pyx_v_c_parent->last->next = __pyx_v_c_node; - /* "src/lxml/apihelpers.pxi":1320 + /* "src/lxml/apihelpers.pxi":1315 * c_node.prev = c_parent.last * c_parent.last.next = c_node * c_parent.last = c_node # <<<<<<<<<<<<<< @@ -32936,7 +32863,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ } __pyx_L3:; - /* "src/lxml/apihelpers.pxi":1322 + /* "src/lxml/apihelpers.pxi":1317 * c_parent.last = c_node * * _setTreeDoc(c_node, c_parent.doc) # <<<<<<<<<<<<<< @@ -32945,7 +32872,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ */ __pyx_f_4lxml_5etree__setTreeDoc(__pyx_v_c_node, __pyx_v_c_parent->doc); - /* "src/lxml/apihelpers.pxi":1323 + /* "src/lxml/apihelpers.pxi":1318 * * _setTreeDoc(c_node, c_parent.doc) * return 0 # <<<<<<<<<<<<<< @@ -32955,7 +32882,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1310 + /* "src/lxml/apihelpers.pxi":1305 * * * cdef int _linkChild(xmlNode* c_parent, xmlNode* c_node) except -1: # <<<<<<<<<<<<<< @@ -32972,7 +32899,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1326 +/* "src/lxml/apihelpers.pxi":1321 * * * cdef int _appendChild(_Element parent, _Element child) except -1: # <<<<<<<<<<<<<< @@ -32993,7 +32920,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, int __pyx_t_5; __Pyx_RefNannySetupContext("_appendChild", 0); - /* "src/lxml/apihelpers.pxi":1329 + /* "src/lxml/apihelpers.pxi":1324 * u"""Append a new child to a parent element. * """ * c_node = child._c_node # <<<<<<<<<<<<<< @@ -33003,7 +32930,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, __pyx_t_1 = __pyx_v_child->_c_node; __pyx_v_c_node = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1330 + /* "src/lxml/apihelpers.pxi":1325 * """ * c_node = child._c_node * c_source_doc = c_node.doc # <<<<<<<<<<<<<< @@ -33013,7 +32940,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, __pyx_t_2 = __pyx_v_c_node->doc; __pyx_v_c_source_doc = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":1332 + /* "src/lxml/apihelpers.pxi":1327 * c_source_doc = c_node.doc * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): # <<<<<<<<<<<<<< @@ -33023,20 +32950,20 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, __pyx_t_3 = (__pyx_f_4lxml_5etree__isAncestorOrSame(__pyx_v_c_node, __pyx_v_parent->_c_node) != 0); if (unlikely(__pyx_t_3)) { - /* "src/lxml/apihelpers.pxi":1333 + /* "src/lxml/apihelpers.pxi":1328 * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): * raise ValueError("cannot append parent to itself") # <<<<<<<<<<<<<< * # store possible text node * c_next = c_node.next */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1333, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(5, 1333, __pyx_L1_error) + __PYX_ERR(5, 1328, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1332 + /* "src/lxml/apihelpers.pxi":1327 * c_source_doc = c_node.doc * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): # <<<<<<<<<<<<<< @@ -33045,7 +32972,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, */ } - /* "src/lxml/apihelpers.pxi":1335 + /* "src/lxml/apihelpers.pxi":1330 * raise ValueError("cannot append parent to itself") * # store possible text node * c_next = c_node.next # <<<<<<<<<<<<<< @@ -33055,7 +32982,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, __pyx_t_1 = __pyx_v_c_node->next; __pyx_v_c_next = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1337 + /* "src/lxml/apihelpers.pxi":1332 * c_next = c_node.next * # move node itself * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -33064,16 +32991,16 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1339 + /* "src/lxml/apihelpers.pxi":1334 * tree.xmlUnlinkNode(c_node) * # do not call xmlAddChild() here since it would deep-traverse the tree * _linkChild(parent._c_node, c_node) # <<<<<<<<<<<<<< * _moveTail(c_next, c_node) * # uh oh, elements may be pointing to different doc when */ - __pyx_t_5 = __pyx_f_4lxml_5etree__linkChild(__pyx_v_parent->_c_node, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1339, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree__linkChild(__pyx_v_parent->_c_node, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1334, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1340 + /* "src/lxml/apihelpers.pxi":1335 * # do not call xmlAddChild() here since it would deep-traverse the tree * _linkChild(parent._c_node, c_node) * _moveTail(c_next, c_node) # <<<<<<<<<<<<<< @@ -33082,7 +33009,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, */ __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1343 + /* "src/lxml/apihelpers.pxi":1338 * # uh oh, elements may be pointing to different doc when * # parent element has moved; change them too.. * moveNodeToDocument(parent._doc, c_source_doc, c_node) # <<<<<<<<<<<<<< @@ -33091,10 +33018,10 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, */ __pyx_t_4 = ((PyObject *)__pyx_v_parent->_doc); __Pyx_INCREF(__pyx_t_4); - __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1343, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1338, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1344 + /* "src/lxml/apihelpers.pxi":1339 * # parent element has moved; change them too.. * moveNodeToDocument(parent._doc, c_source_doc, c_node) * return 0 # <<<<<<<<<<<<<< @@ -33104,7 +33031,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1326 + /* "src/lxml/apihelpers.pxi":1321 * * * cdef int _appendChild(_Element parent, _Element child) except -1: # <<<<<<<<<<<<<< @@ -33122,7 +33049,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent, return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1346 +/* "src/lxml/apihelpers.pxi":1341 * return 0 * * cdef int _prependChild(_Element parent, _Element child) except -1: # <<<<<<<<<<<<<< @@ -33144,7 +33071,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent int __pyx_t_5; __Pyx_RefNannySetupContext("_prependChild", 0); - /* "src/lxml/apihelpers.pxi":1349 + /* "src/lxml/apihelpers.pxi":1344 * u"""Prepend a new child to a parent element. * """ * c_node = child._c_node # <<<<<<<<<<<<<< @@ -33154,7 +33081,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent __pyx_t_1 = __pyx_v_child->_c_node; __pyx_v_c_node = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1350 + /* "src/lxml/apihelpers.pxi":1345 * """ * c_node = child._c_node * c_source_doc = c_node.doc # <<<<<<<<<<<<<< @@ -33164,7 +33091,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent __pyx_t_2 = __pyx_v_c_node->doc; __pyx_v_c_source_doc = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":1352 + /* "src/lxml/apihelpers.pxi":1347 * c_source_doc = c_node.doc * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): # <<<<<<<<<<<<<< @@ -33174,20 +33101,20 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent __pyx_t_3 = (__pyx_f_4lxml_5etree__isAncestorOrSame(__pyx_v_c_node, __pyx_v_parent->_c_node) != 0); if (unlikely(__pyx_t_3)) { - /* "src/lxml/apihelpers.pxi":1353 + /* "src/lxml/apihelpers.pxi":1348 * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): * raise ValueError("cannot append parent to itself") # <<<<<<<<<<<<<< * # store possible text node * c_next = c_node.next */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1353, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1348, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(5, 1353, __pyx_L1_error) + __PYX_ERR(5, 1348, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1352 + /* "src/lxml/apihelpers.pxi":1347 * c_source_doc = c_node.doc * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): # <<<<<<<<<<<<<< @@ -33196,7 +33123,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent */ } - /* "src/lxml/apihelpers.pxi":1355 + /* "src/lxml/apihelpers.pxi":1350 * raise ValueError("cannot append parent to itself") * # store possible text node * c_next = c_node.next # <<<<<<<<<<<<<< @@ -33206,7 +33133,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent __pyx_t_1 = __pyx_v_c_node->next; __pyx_v_c_next = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1357 + /* "src/lxml/apihelpers.pxi":1352 * c_next = c_node.next * # move node itself * c_child = _findChildForwards(parent._c_node, 0) # <<<<<<<<<<<<<< @@ -33215,7 +33142,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent */ __pyx_v_c_child = __pyx_f_4lxml_5etree__findChildForwards(__pyx_v_parent->_c_node, 0); - /* "src/lxml/apihelpers.pxi":1358 + /* "src/lxml/apihelpers.pxi":1353 * # move node itself * c_child = _findChildForwards(parent._c_node, 0) * if c_child is NULL: # <<<<<<<<<<<<<< @@ -33225,7 +33152,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent __pyx_t_3 = ((__pyx_v_c_child == NULL) != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1359 + /* "src/lxml/apihelpers.pxi":1354 * c_child = _findChildForwards(parent._c_node, 0) * if c_child is NULL: * tree.xmlUnlinkNode(c_node) # <<<<<<<<<<<<<< @@ -33234,16 +33161,16 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent */ xmlUnlinkNode(__pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1361 + /* "src/lxml/apihelpers.pxi":1356 * tree.xmlUnlinkNode(c_node) * # do not call xmlAddChild() here since it would deep-traverse the tree * _linkChild(parent._c_node, c_node) # <<<<<<<<<<<<<< * else: * tree.xmlAddPrevSibling(c_child, c_node) */ - __pyx_t_5 = __pyx_f_4lxml_5etree__linkChild(__pyx_v_parent->_c_node, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1361, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree__linkChild(__pyx_v_parent->_c_node, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1356, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1358 + /* "src/lxml/apihelpers.pxi":1353 * # move node itself * c_child = _findChildForwards(parent._c_node, 0) * if c_child is NULL: # <<<<<<<<<<<<<< @@ -33253,7 +33180,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent goto __pyx_L4; } - /* "src/lxml/apihelpers.pxi":1363 + /* "src/lxml/apihelpers.pxi":1358 * _linkChild(parent._c_node, c_node) * else: * tree.xmlAddPrevSibling(c_child, c_node) # <<<<<<<<<<<<<< @@ -33265,7 +33192,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent } __pyx_L4:; - /* "src/lxml/apihelpers.pxi":1364 + /* "src/lxml/apihelpers.pxi":1359 * else: * tree.xmlAddPrevSibling(c_child, c_node) * _moveTail(c_next, c_node) # <<<<<<<<<<<<<< @@ -33274,7 +33201,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent */ __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1367 + /* "src/lxml/apihelpers.pxi":1362 * # uh oh, elements may be pointing to different doc when * # parent element has moved; change them too.. * moveNodeToDocument(parent._doc, c_source_doc, c_node) # <<<<<<<<<<<<<< @@ -33283,10 +33210,10 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent */ __pyx_t_4 = ((PyObject *)__pyx_v_parent->_doc); __Pyx_INCREF(__pyx_t_4); - __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1367, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1362, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1368 + /* "src/lxml/apihelpers.pxi":1363 * # parent element has moved; change them too.. * moveNodeToDocument(parent._doc, c_source_doc, c_node) * return 0 # <<<<<<<<<<<<<< @@ -33296,7 +33223,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1346 + /* "src/lxml/apihelpers.pxi":1341 * return 0 * * cdef int _prependChild(_Element parent, _Element child) except -1: # <<<<<<<<<<<<<< @@ -33314,7 +33241,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1370 +/* "src/lxml/apihelpers.pxi":1365 * return 0 * * cdef int _appendSibling(_Element element, _Element sibling) except -1: # <<<<<<<<<<<<<< @@ -33328,18 +33255,18 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme int __pyx_t_1; __Pyx_RefNannySetupContext("_appendSibling", 0); - /* "src/lxml/apihelpers.pxi":1373 + /* "src/lxml/apihelpers.pxi":1368 * u"""Add a new sibling behind an element. * """ * return _addSibling(element, sibling, as_next=True) # <<<<<<<<<<<<<< * * cdef int _prependSibling(_Element element, _Element sibling) except -1: */ - __pyx_t_1 = __pyx_f_4lxml_5etree__addSibling(__pyx_v_element, __pyx_v_sibling, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1373, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__addSibling(__pyx_v_element, __pyx_v_sibling, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1368, __pyx_L1_error) __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1370 + /* "src/lxml/apihelpers.pxi":1365 * return 0 * * cdef int _appendSibling(_Element element, _Element sibling) except -1: # <<<<<<<<<<<<<< @@ -33356,7 +33283,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1375 +/* "src/lxml/apihelpers.pxi":1370 * return _addSibling(element, sibling, as_next=True) * * cdef int _prependSibling(_Element element, _Element sibling) except -1: # <<<<<<<<<<<<<< @@ -33370,18 +33297,18 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem int __pyx_t_1; __Pyx_RefNannySetupContext("_prependSibling", 0); - /* "src/lxml/apihelpers.pxi":1378 + /* "src/lxml/apihelpers.pxi":1373 * u"""Add a new sibling before an element. * """ * return _addSibling(element, sibling, as_next=False) # <<<<<<<<<<<<<< * * cdef int _addSibling(_Element element, _Element sibling, bint as_next) except -1: */ - __pyx_t_1 = __pyx_f_4lxml_5etree__addSibling(__pyx_v_element, __pyx_v_sibling, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1378, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__addSibling(__pyx_v_element, __pyx_v_sibling, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1373, __pyx_L1_error) __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1375 + /* "src/lxml/apihelpers.pxi":1370 * return _addSibling(element, sibling, as_next=True) * * cdef int _prependSibling(_Element element, _Element sibling) except -1: # <<<<<<<<<<<<<< @@ -33398,7 +33325,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1380 +/* "src/lxml/apihelpers.pxi":1375 * return _addSibling(element, sibling, as_next=False) * * cdef int _addSibling(_Element element, _Element sibling, bint as_next) except -1: # <<<<<<<<<<<<<< @@ -33419,7 +33346,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, int __pyx_t_5; __Pyx_RefNannySetupContext("_addSibling", 0); - /* "src/lxml/apihelpers.pxi":1381 + /* "src/lxml/apihelpers.pxi":1376 * * cdef int _addSibling(_Element element, _Element sibling, bint as_next) except -1: * c_node = sibling._c_node # <<<<<<<<<<<<<< @@ -33429,7 +33356,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_t_1 = __pyx_v_sibling->_c_node; __pyx_v_c_node = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1382 + /* "src/lxml/apihelpers.pxi":1377 * cdef int _addSibling(_Element element, _Element sibling, bint as_next) except -1: * c_node = sibling._c_node * c_source_doc = c_node.doc # <<<<<<<<<<<<<< @@ -33439,7 +33366,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_t_2 = __pyx_v_c_node->doc; __pyx_v_c_source_doc = __pyx_t_2; - /* "src/lxml/apihelpers.pxi":1384 + /* "src/lxml/apihelpers.pxi":1379 * c_source_doc = c_node.doc * # prevent cycles * if _isAncestorOrSame(c_node, element._c_node): # <<<<<<<<<<<<<< @@ -33449,7 +33376,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_t_3 = (__pyx_f_4lxml_5etree__isAncestorOrSame(__pyx_v_c_node, __pyx_v_element->_c_node) != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1385 + /* "src/lxml/apihelpers.pxi":1380 * # prevent cycles * if _isAncestorOrSame(c_node, element._c_node): * if element._c_node is c_node: # <<<<<<<<<<<<<< @@ -33459,7 +33386,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_t_3 = ((__pyx_v_element->_c_node == __pyx_v_c_node) != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1386 + /* "src/lxml/apihelpers.pxi":1381 * if _isAncestorOrSame(c_node, element._c_node): * if element._c_node is c_node: * return 0 # nothing to do # <<<<<<<<<<<<<< @@ -33469,7 +33396,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1385 + /* "src/lxml/apihelpers.pxi":1380 * # prevent cycles * if _isAncestorOrSame(c_node, element._c_node): * if element._c_node is c_node: # <<<<<<<<<<<<<< @@ -33478,20 +33405,20 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, */ } - /* "src/lxml/apihelpers.pxi":1387 + /* "src/lxml/apihelpers.pxi":1382 * if element._c_node is c_node: * return 0 # nothing to do * raise ValueError("cannot add ancestor as sibling, please break cycle first") # <<<<<<<<<<<<<< * # store possible text node * c_next = c_node.next */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1387, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(5, 1387, __pyx_L1_error) + __PYX_ERR(5, 1382, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1384 + /* "src/lxml/apihelpers.pxi":1379 * c_source_doc = c_node.doc * # prevent cycles * if _isAncestorOrSame(c_node, element._c_node): # <<<<<<<<<<<<<< @@ -33500,7 +33427,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, */ } - /* "src/lxml/apihelpers.pxi":1389 + /* "src/lxml/apihelpers.pxi":1384 * raise ValueError("cannot add ancestor as sibling, please break cycle first") * # store possible text node * c_next = c_node.next # <<<<<<<<<<<<<< @@ -33510,7 +33437,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_t_1 = __pyx_v_c_node->next; __pyx_v_c_next = __pyx_t_1; - /* "src/lxml/apihelpers.pxi":1391 + /* "src/lxml/apihelpers.pxi":1386 * c_next = c_node.next * # move node itself * if as_next: # <<<<<<<<<<<<<< @@ -33520,7 +33447,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_t_3 = (__pyx_v_as_next != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1392 + /* "src/lxml/apihelpers.pxi":1387 * # move node itself * if as_next: * tree.xmlAddNextSibling(element._c_node, c_node) # <<<<<<<<<<<<<< @@ -33529,7 +33456,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, */ (void)(xmlAddNextSibling(__pyx_v_element->_c_node, __pyx_v_c_node)); - /* "src/lxml/apihelpers.pxi":1391 + /* "src/lxml/apihelpers.pxi":1386 * c_next = c_node.next * # move node itself * if as_next: # <<<<<<<<<<<<<< @@ -33539,7 +33466,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, goto __pyx_L5; } - /* "src/lxml/apihelpers.pxi":1394 + /* "src/lxml/apihelpers.pxi":1389 * tree.xmlAddNextSibling(element._c_node, c_node) * else: * tree.xmlAddPrevSibling(element._c_node, c_node) # <<<<<<<<<<<<<< @@ -33551,7 +33478,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, } __pyx_L5:; - /* "src/lxml/apihelpers.pxi":1395 + /* "src/lxml/apihelpers.pxi":1390 * else: * tree.xmlAddPrevSibling(element._c_node, c_node) * _moveTail(c_next, c_node) # <<<<<<<<<<<<<< @@ -33560,7 +33487,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, */ __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node); - /* "src/lxml/apihelpers.pxi":1398 + /* "src/lxml/apihelpers.pxi":1393 * # uh oh, elements may be pointing to different doc when * # parent element has moved; change them too.. * moveNodeToDocument(element._doc, c_source_doc, c_node) # <<<<<<<<<<<<<< @@ -33569,10 +33496,10 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, */ __pyx_t_4 = ((PyObject *)__pyx_v_element->_doc); __Pyx_INCREF(__pyx_t_4); - __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1398, __pyx_L1_error) + __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(5, 1393, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1399 + /* "src/lxml/apihelpers.pxi":1394 * # parent element has moved; change them too.. * moveNodeToDocument(element._doc, c_source_doc, c_node) * return 0 # <<<<<<<<<<<<<< @@ -33582,7 +33509,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1380 + /* "src/lxml/apihelpers.pxi":1375 * return _addSibling(element, sibling, as_next=False) * * cdef int _addSibling(_Element element, _Element sibling, bint as_next) except -1: # <<<<<<<<<<<<<< @@ -33600,7 +33527,7 @@ static int __pyx_f_4lxml_5etree__addSibling(struct LxmlElement *__pyx_v_element, return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1401 +/* "src/lxml/apihelpers.pxi":1396 * return 0 * * cdef inline bint isutf8(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -33615,7 +33542,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { int __pyx_t_1; __Pyx_RefNannySetupContext("isutf8", 0); - /* "src/lxml/apihelpers.pxi":1402 + /* "src/lxml/apihelpers.pxi":1397 * * cdef inline bint isutf8(const_xmlChar* s): * cdef xmlChar c = s[0] # <<<<<<<<<<<<<< @@ -33624,7 +33551,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { */ __pyx_v_c = (__pyx_v_s[0]); - /* "src/lxml/apihelpers.pxi":1403 + /* "src/lxml/apihelpers.pxi":1398 * cdef inline bint isutf8(const_xmlChar* s): * cdef xmlChar c = s[0] * while c != c'\0': # <<<<<<<<<<<<<< @@ -33635,7 +33562,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { __pyx_t_1 = ((__pyx_v_c != '\x00') != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1404 + /* "src/lxml/apihelpers.pxi":1399 * cdef xmlChar c = s[0] * while c != c'\0': * if c & 0x80: # <<<<<<<<<<<<<< @@ -33645,7 +33572,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { __pyx_t_1 = ((__pyx_v_c & 0x80) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1405 + /* "src/lxml/apihelpers.pxi":1400 * while c != c'\0': * if c & 0x80: * return True # <<<<<<<<<<<<<< @@ -33655,7 +33582,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1404 + /* "src/lxml/apihelpers.pxi":1399 * cdef xmlChar c = s[0] * while c != c'\0': * if c & 0x80: # <<<<<<<<<<<<<< @@ -33664,7 +33591,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { */ } - /* "src/lxml/apihelpers.pxi":1406 + /* "src/lxml/apihelpers.pxi":1401 * if c & 0x80: * return True * s += 1 # <<<<<<<<<<<<<< @@ -33673,7 +33600,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { */ __pyx_v_s = (__pyx_v_s + 1); - /* "src/lxml/apihelpers.pxi":1407 + /* "src/lxml/apihelpers.pxi":1402 * return True * s += 1 * c = s[0] # <<<<<<<<<<<<<< @@ -33683,7 +33610,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { __pyx_v_c = (__pyx_v_s[0]); } - /* "src/lxml/apihelpers.pxi":1408 + /* "src/lxml/apihelpers.pxi":1403 * s += 1 * c = s[0] * return False # <<<<<<<<<<<<<< @@ -33693,7 +33620,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1401 + /* "src/lxml/apihelpers.pxi":1396 * return 0 * * cdef inline bint isutf8(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -33707,7 +33634,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1410 +/* "src/lxml/apihelpers.pxi":1405 * return False * * cdef bint isutf8l(const_xmlChar* s, size_t length): # <<<<<<<<<<<<<< @@ -33729,7 +33656,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v int __pyx_t_5; __Pyx_RefNannySetupContext("isutf8l", 0); - /* "src/lxml/apihelpers.pxi":1416 + /* "src/lxml/apihelpers.pxi":1411 * cdef unsigned int i * cdef unsigned long non_ascii_mask * cdef const unsigned long *lptr = s # <<<<<<<<<<<<<< @@ -33738,7 +33665,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ __pyx_v_lptr = ((unsigned long const *)__pyx_v_s); - /* "src/lxml/apihelpers.pxi":1418 + /* "src/lxml/apihelpers.pxi":1413 * cdef const unsigned long *lptr = s * * cdef const unsigned long *end = lptr + length // sizeof(unsigned long) # <<<<<<<<<<<<<< @@ -33748,11 +33675,11 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_1 = (sizeof(unsigned long)); if (unlikely(__pyx_t_1 == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(5, 1418, __pyx_L1_error) + __PYX_ERR(5, 1413, __pyx_L1_error) } __pyx_v_end = (__pyx_v_lptr + (__pyx_v_length / __pyx_t_1)); - /* "src/lxml/apihelpers.pxi":1419 + /* "src/lxml/apihelpers.pxi":1414 * * cdef const unsigned long *end = lptr + length // sizeof(unsigned long) * if length >= sizeof(non_ascii_mask): # <<<<<<<<<<<<<< @@ -33762,7 +33689,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_2 = ((__pyx_v_length >= (sizeof(__pyx_v_non_ascii_mask))) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1421 + /* "src/lxml/apihelpers.pxi":1416 * if length >= sizeof(non_ascii_mask): * # Build constant 0x80808080... mask (and let the C compiler fold it). * non_ascii_mask = 0 # <<<<<<<<<<<<<< @@ -33771,7 +33698,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ __pyx_v_non_ascii_mask = 0; - /* "src/lxml/apihelpers.pxi":1422 + /* "src/lxml/apihelpers.pxi":1417 * # Build constant 0x80808080... mask (and let the C compiler fold it). * non_ascii_mask = 0 * for i in range(sizeof(non_ascii_mask) // 2): # <<<<<<<<<<<<<< @@ -33783,7 +33710,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; - /* "src/lxml/apihelpers.pxi":1423 + /* "src/lxml/apihelpers.pxi":1418 * non_ascii_mask = 0 * for i in range(sizeof(non_ascii_mask) // 2): * non_ascii_mask = (non_ascii_mask << 16) | 0x8080 # <<<<<<<<<<<<<< @@ -33793,7 +33720,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_v_non_ascii_mask = ((__pyx_v_non_ascii_mask << 16) | 0x8080); } - /* "src/lxml/apihelpers.pxi":1426 + /* "src/lxml/apihelpers.pxi":1421 * * # Advance to long-aligned character before we start reading longs. * while (s) % sizeof(unsigned long) and s < end: # <<<<<<<<<<<<<< @@ -33804,7 +33731,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_1 = (sizeof(unsigned long)); if (unlikely(__pyx_t_1 == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(5, 1426, __pyx_L1_error) + __PYX_ERR(5, 1421, __pyx_L1_error) } __pyx_t_5 = ((((size_t)__pyx_v_s) % __pyx_t_1) != 0); if (__pyx_t_5) { @@ -33817,7 +33744,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_L8_bool_binop_done:; if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1427 + /* "src/lxml/apihelpers.pxi":1422 * # Advance to long-aligned character before we start reading longs. * while (s) % sizeof(unsigned long) and s < end: * if s[0] & 0x80: # <<<<<<<<<<<<<< @@ -33827,7 +33754,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_2 = (((__pyx_v_s[0]) & 0x80) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1428 + /* "src/lxml/apihelpers.pxi":1423 * while (s) % sizeof(unsigned long) and s < end: * if s[0] & 0x80: * return True # <<<<<<<<<<<<<< @@ -33837,7 +33764,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1427 + /* "src/lxml/apihelpers.pxi":1422 * # Advance to long-aligned character before we start reading longs. * while (s) % sizeof(unsigned long) and s < end: * if s[0] & 0x80: # <<<<<<<<<<<<<< @@ -33846,7 +33773,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ } - /* "src/lxml/apihelpers.pxi":1429 + /* "src/lxml/apihelpers.pxi":1424 * if s[0] & 0x80: * return True * s += 1 # <<<<<<<<<<<<<< @@ -33856,7 +33783,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_v_s = (__pyx_v_s + 1); } - /* "src/lxml/apihelpers.pxi":1432 + /* "src/lxml/apihelpers.pxi":1427 * * # Read one long at a time * lptr = s # <<<<<<<<<<<<<< @@ -33865,7 +33792,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ __pyx_v_lptr = ((unsigned long const *)__pyx_v_s); - /* "src/lxml/apihelpers.pxi":1433 + /* "src/lxml/apihelpers.pxi":1428 * # Read one long at a time * lptr = s * while lptr < end: # <<<<<<<<<<<<<< @@ -33876,7 +33803,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_2 = ((__pyx_v_lptr < __pyx_v_end) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1434 + /* "src/lxml/apihelpers.pxi":1429 * lptr = s * while lptr < end: * if lptr[0] & non_ascii_mask: # <<<<<<<<<<<<<< @@ -33886,7 +33813,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_2 = (((__pyx_v_lptr[0]) & __pyx_v_non_ascii_mask) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1435 + /* "src/lxml/apihelpers.pxi":1430 * while lptr < end: * if lptr[0] & non_ascii_mask: * return True # <<<<<<<<<<<<<< @@ -33896,7 +33823,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1434 + /* "src/lxml/apihelpers.pxi":1429 * lptr = s * while lptr < end: * if lptr[0] & non_ascii_mask: # <<<<<<<<<<<<<< @@ -33905,7 +33832,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ } - /* "src/lxml/apihelpers.pxi":1436 + /* "src/lxml/apihelpers.pxi":1431 * if lptr[0] & non_ascii_mask: * return True * lptr += 1 # <<<<<<<<<<<<<< @@ -33915,7 +33842,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_v_lptr = (__pyx_v_lptr + 1); } - /* "src/lxml/apihelpers.pxi":1437 + /* "src/lxml/apihelpers.pxi":1432 * return True * lptr += 1 * s = lptr # <<<<<<<<<<<<<< @@ -33924,7 +33851,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ __pyx_v_s = ((const xmlChar *)__pyx_v_lptr); - /* "src/lxml/apihelpers.pxi":1419 + /* "src/lxml/apihelpers.pxi":1414 * * cdef const unsigned long *end = lptr + length // sizeof(unsigned long) * if length >= sizeof(non_ascii_mask): # <<<<<<<<<<<<<< @@ -33933,7 +33860,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ } - /* "src/lxml/apihelpers.pxi":1439 + /* "src/lxml/apihelpers.pxi":1434 * s = lptr * * while s < (end + length % sizeof(unsigned long)): # <<<<<<<<<<<<<< @@ -33944,12 +33871,12 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_1 = (sizeof(unsigned long)); if (unlikely(__pyx_t_1 == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(5, 1439, __pyx_L1_error) + __PYX_ERR(5, 1434, __pyx_L1_error) } __pyx_t_2 = ((__pyx_v_s < (((const xmlChar *)__pyx_v_end) + (__pyx_v_length % __pyx_t_1))) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1440 + /* "src/lxml/apihelpers.pxi":1435 * * while s < (end + length % sizeof(unsigned long)): * if s[0] & 0x80: # <<<<<<<<<<<<<< @@ -33959,7 +33886,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_t_2 = (((__pyx_v_s[0]) & 0x80) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1441 + /* "src/lxml/apihelpers.pxi":1436 * while s < (end + length % sizeof(unsigned long)): * if s[0] & 0x80: * return True # <<<<<<<<<<<<<< @@ -33969,7 +33896,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1440 + /* "src/lxml/apihelpers.pxi":1435 * * while s < (end + length % sizeof(unsigned long)): * if s[0] & 0x80: # <<<<<<<<<<<<<< @@ -33978,7 +33905,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v */ } - /* "src/lxml/apihelpers.pxi":1442 + /* "src/lxml/apihelpers.pxi":1437 * if s[0] & 0x80: * return True * s += 1 # <<<<<<<<<<<<<< @@ -33988,7 +33915,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_v_s = (__pyx_v_s + 1); } - /* "src/lxml/apihelpers.pxi":1444 + /* "src/lxml/apihelpers.pxi":1439 * s += 1 * * return False # <<<<<<<<<<<<<< @@ -33998,7 +33925,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1410 + /* "src/lxml/apihelpers.pxi":1405 * return False * * cdef bint isutf8l(const_xmlChar* s, size_t length): # <<<<<<<<<<<<<< @@ -34015,7 +33942,7 @@ static int __pyx_f_4lxml_5etree_isutf8l(const xmlChar *__pyx_v_s, size_t __pyx_v return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1446 +/* "src/lxml/apihelpers.pxi":1441 * return False * * cdef int _is_valid_xml_ascii(bytes pystring): # <<<<<<<<<<<<<< @@ -34035,7 +33962,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) int __pyx_t_6; __Pyx_RefNannySetupContext("_is_valid_xml_ascii", 0); - /* "src/lxml/apihelpers.pxi":1451 + /* "src/lxml/apihelpers.pxi":1446 * # When ch is a *signed* char, non-ascii characters are negative integers * # and xmlIsChar_ch does not accept them. * for ch in pystring: # <<<<<<<<<<<<<< @@ -34044,7 +33971,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) */ if (unlikely(__pyx_v_pystring == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); - __PYX_ERR(5, 1451, __pyx_L1_error) + __PYX_ERR(5, 1446, __pyx_L1_error) } __Pyx_INCREF(__pyx_v_pystring); __pyx_t_1 = __pyx_v_pystring; @@ -34054,7 +33981,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) __pyx_t_2 = __pyx_t_5; __pyx_v_ch = (__pyx_t_2[0]); - /* "src/lxml/apihelpers.pxi":1452 + /* "src/lxml/apihelpers.pxi":1447 * # and xmlIsChar_ch does not accept them. * for ch in pystring: * if not tree.xmlIsChar_ch(ch): # <<<<<<<<<<<<<< @@ -34064,7 +33991,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) __pyx_t_6 = ((!(xmlIsChar_ch(__pyx_v_ch) != 0)) != 0); if (__pyx_t_6) { - /* "src/lxml/apihelpers.pxi":1453 + /* "src/lxml/apihelpers.pxi":1448 * for ch in pystring: * if not tree.xmlIsChar_ch(ch): * return 0 # <<<<<<<<<<<<<< @@ -34075,7 +34002,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1452 + /* "src/lxml/apihelpers.pxi":1447 * # and xmlIsChar_ch does not accept them. * for ch in pystring: * if not tree.xmlIsChar_ch(ch): # <<<<<<<<<<<<<< @@ -34086,7 +34013,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":1454 + /* "src/lxml/apihelpers.pxi":1449 * if not tree.xmlIsChar_ch(ch): * return 0 * return 1 # <<<<<<<<<<<<<< @@ -34096,7 +34023,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1446 + /* "src/lxml/apihelpers.pxi":1441 * return False * * cdef int _is_valid_xml_ascii(bytes pystring): # <<<<<<<<<<<<<< @@ -34114,7 +34041,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_ascii(PyObject *__pyx_v_pystring) return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1456 +/* "src/lxml/apihelpers.pxi":1451 * return 1 * * cdef bint _is_valid_xml_utf8(bytes pystring): # <<<<<<<<<<<<<< @@ -34133,7 +34060,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { int __pyx_t_3; __Pyx_RefNannySetupContext("_is_valid_xml_utf8", 0); - /* "src/lxml/apihelpers.pxi":1458 + /* "src/lxml/apihelpers.pxi":1453 * cdef bint _is_valid_xml_utf8(bytes pystring): * u"""Check if a string is like valid UTF-8 XML content.""" * cdef const_xmlChar* s = _xcstr(pystring) # <<<<<<<<<<<<<< @@ -34142,7 +34069,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ __pyx_v_s = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_pystring); - /* "src/lxml/apihelpers.pxi":1459 + /* "src/lxml/apihelpers.pxi":1454 * u"""Check if a string is like valid UTF-8 XML content.""" * cdef const_xmlChar* s = _xcstr(pystring) * cdef const_xmlChar* c_end = s + len(pystring) # <<<<<<<<<<<<<< @@ -34151,12 +34078,12 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ if (unlikely(__pyx_v_pystring == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(5, 1459, __pyx_L1_error) + __PYX_ERR(5, 1454, __pyx_L1_error) } - __pyx_t_1 = PyBytes_GET_SIZE(__pyx_v_pystring); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1459, __pyx_L1_error) + __pyx_t_1 = PyBytes_GET_SIZE(__pyx_v_pystring); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1454, __pyx_L1_error) __pyx_v_c_end = (__pyx_v_s + __pyx_t_1); - /* "src/lxml/apihelpers.pxi":1460 + /* "src/lxml/apihelpers.pxi":1455 * cdef const_xmlChar* s = _xcstr(pystring) * cdef const_xmlChar* c_end = s + len(pystring) * cdef unsigned long next3 = 0 # <<<<<<<<<<<<<< @@ -34165,7 +34092,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ __pyx_v_next3 = 0; - /* "src/lxml/apihelpers.pxi":1461 + /* "src/lxml/apihelpers.pxi":1456 * cdef const_xmlChar* c_end = s + len(pystring) * cdef unsigned long next3 = 0 * if s < c_end - 2: # <<<<<<<<<<<<<< @@ -34175,7 +34102,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_t_2 = ((__pyx_v_s < (__pyx_v_c_end - 2)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1462 + /* "src/lxml/apihelpers.pxi":1457 * cdef unsigned long next3 = 0 * if s < c_end - 2: * next3 = (s[0] << 8) | (s[1]) # <<<<<<<<<<<<<< @@ -34184,7 +34111,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ __pyx_v_next3 = (((__pyx_v_s[0]) << 8) | (__pyx_v_s[1])); - /* "src/lxml/apihelpers.pxi":1461 + /* "src/lxml/apihelpers.pxi":1456 * cdef const_xmlChar* c_end = s + len(pystring) * cdef unsigned long next3 = 0 * if s < c_end - 2: # <<<<<<<<<<<<<< @@ -34193,7 +34120,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ } - /* "src/lxml/apihelpers.pxi":1464 + /* "src/lxml/apihelpers.pxi":1459 * next3 = (s[0] << 8) | (s[1]) * * while s < c_end - 2: # <<<<<<<<<<<<<< @@ -34204,7 +34131,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_t_2 = ((__pyx_v_s < (__pyx_v_c_end - 2)) != 0); if (!__pyx_t_2) break; - /* "src/lxml/apihelpers.pxi":1465 + /* "src/lxml/apihelpers.pxi":1460 * * while s < c_end - 2: * next3 = 0x00ffffff & ((next3 << 8) | s[2]) # <<<<<<<<<<<<<< @@ -34213,7 +34140,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ __pyx_v_next3 = (0x00ffffff & ((__pyx_v_next3 << 8) | (__pyx_v_s[2]))); - /* "src/lxml/apihelpers.pxi":1466 + /* "src/lxml/apihelpers.pxi":1461 * while s < c_end - 2: * next3 = 0x00ffffff & ((next3 << 8) | s[2]) * if s[0] & 0x80: # <<<<<<<<<<<<<< @@ -34223,7 +34150,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_t_2 = (((__pyx_v_s[0]) & 0x80) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1469 + /* "src/lxml/apihelpers.pxi":1464 * # 0xefbfbe and 0xefbfbf are utf-8 encodings of * # forbidden characters \ufffe and \uffff * if next3 == 0x00efbfbe or next3 == 0x00efbfbf: # <<<<<<<<<<<<<< @@ -34234,7 +34161,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { case 0x00efbfbe: case 0x00efbfbf: - /* "src/lxml/apihelpers.pxi":1470 + /* "src/lxml/apihelpers.pxi":1465 * # forbidden characters \ufffe and \uffff * if next3 == 0x00efbfbe or next3 == 0x00efbfbf: * return 0 # <<<<<<<<<<<<<< @@ -34244,7 +34171,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1469 + /* "src/lxml/apihelpers.pxi":1464 * # 0xefbfbe and 0xefbfbf are utf-8 encodings of * # forbidden characters \ufffe and \uffff * if next3 == 0x00efbfbe or next3 == 0x00efbfbf: # <<<<<<<<<<<<<< @@ -34255,7 +34182,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { default: break; } - /* "src/lxml/apihelpers.pxi":1474 + /* "src/lxml/apihelpers.pxi":1469 * # \ud800 and \udfff. Anything between them (inclusive) * # is forbidden, because they are surrogate blocks in utf-16. * if 0x00eda080 <= next3 <= 0x00edbfbf: # <<<<<<<<<<<<<< @@ -34269,7 +34196,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1475 + /* "src/lxml/apihelpers.pxi":1470 * # is forbidden, because they are surrogate blocks in utf-16. * if 0x00eda080 <= next3 <= 0x00edbfbf: * return 0 # <<<<<<<<<<<<<< @@ -34279,7 +34206,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1474 + /* "src/lxml/apihelpers.pxi":1469 * # \ud800 and \udfff. Anything between them (inclusive) * # is forbidden, because they are surrogate blocks in utf-16. * if 0x00eda080 <= next3 <= 0x00edbfbf: # <<<<<<<<<<<<<< @@ -34288,7 +34215,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ } - /* "src/lxml/apihelpers.pxi":1466 + /* "src/lxml/apihelpers.pxi":1461 * while s < c_end - 2: * next3 = 0x00ffffff & ((next3 << 8) | s[2]) * if s[0] & 0x80: # <<<<<<<<<<<<<< @@ -34298,7 +34225,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { goto __pyx_L6; } - /* "src/lxml/apihelpers.pxi":1476 + /* "src/lxml/apihelpers.pxi":1471 * if 0x00eda080 <= next3 <= 0x00edbfbf: * return 0 * elif not tree.xmlIsChar_ch(s[0]): # <<<<<<<<<<<<<< @@ -34308,7 +34235,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_t_3 = ((!(xmlIsChar_ch((__pyx_v_s[0])) != 0)) != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1477 + /* "src/lxml/apihelpers.pxi":1472 * return 0 * elif not tree.xmlIsChar_ch(s[0]): * return 0 # invalid ascii char # <<<<<<<<<<<<<< @@ -34318,7 +34245,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1476 + /* "src/lxml/apihelpers.pxi":1471 * if 0x00eda080 <= next3 <= 0x00edbfbf: * return 0 * elif not tree.xmlIsChar_ch(s[0]): # <<<<<<<<<<<<<< @@ -34328,7 +34255,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { } __pyx_L6:; - /* "src/lxml/apihelpers.pxi":1478 + /* "src/lxml/apihelpers.pxi":1473 * elif not tree.xmlIsChar_ch(s[0]): * return 0 # invalid ascii char * s += 1 # <<<<<<<<<<<<<< @@ -34338,7 +34265,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_v_s = (__pyx_v_s + 1); } - /* "src/lxml/apihelpers.pxi":1480 + /* "src/lxml/apihelpers.pxi":1475 * s += 1 * * while s < c_end: # <<<<<<<<<<<<<< @@ -34349,7 +34276,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_t_3 = ((__pyx_v_s < __pyx_v_c_end) != 0); if (!__pyx_t_3) break; - /* "src/lxml/apihelpers.pxi":1481 + /* "src/lxml/apihelpers.pxi":1476 * * while s < c_end: * if not s[0] & 0x80 and not tree.xmlIsChar_ch(s[0]): # <<<<<<<<<<<<<< @@ -34367,7 +34294,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_L11_bool_binop_done:; if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1482 + /* "src/lxml/apihelpers.pxi":1477 * while s < c_end: * if not s[0] & 0x80 and not tree.xmlIsChar_ch(s[0]): * return 0 # invalid ascii char # <<<<<<<<<<<<<< @@ -34377,7 +34304,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1481 + /* "src/lxml/apihelpers.pxi":1476 * * while s < c_end: * if not s[0] & 0x80 and not tree.xmlIsChar_ch(s[0]): # <<<<<<<<<<<<<< @@ -34386,7 +34313,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { */ } - /* "src/lxml/apihelpers.pxi":1483 + /* "src/lxml/apihelpers.pxi":1478 * if not s[0] & 0x80 and not tree.xmlIsChar_ch(s[0]): * return 0 # invalid ascii char * s += 1 # <<<<<<<<<<<<<< @@ -34396,7 +34323,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_v_s = (__pyx_v_s + 1); } - /* "src/lxml/apihelpers.pxi":1485 + /* "src/lxml/apihelpers.pxi":1480 * s += 1 * * return 1 # <<<<<<<<<<<<<< @@ -34406,7 +34333,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1456 + /* "src/lxml/apihelpers.pxi":1451 * return 1 * * cdef bint _is_valid_xml_utf8(bytes pystring): # <<<<<<<<<<<<<< @@ -34423,7 +34350,7 @@ static int __pyx_f_4lxml_5etree__is_valid_xml_utf8(PyObject *__pyx_v_pystring) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1487 +/* "src/lxml/apihelpers.pxi":1482 * return 1 * * cdef inline object funicodeOrNone(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -34438,7 +34365,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("funicodeOrNone", 0); - /* "src/lxml/apihelpers.pxi":1488 + /* "src/lxml/apihelpers.pxi":1483 * * cdef inline object funicodeOrNone(const_xmlChar* s): * return funicode(s) if s is not NULL else None # <<<<<<<<<<<<<< @@ -34447,7 +34374,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar */ __Pyx_XDECREF(__pyx_r); if (((__pyx_v_s != NULL) != 0)) { - __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1488, __pyx_L1_error) + __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_t_2; __pyx_t_2 = 0; @@ -34459,7 +34386,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1487 + /* "src/lxml/apihelpers.pxi":1482 * return 1 * * cdef inline object funicodeOrNone(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -34479,7 +34406,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1490 +/* "src/lxml/apihelpers.pxi":1485 * return funicode(s) if s is not NULL else None * * cdef inline object funicodeOrEmpty(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -34494,7 +34421,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("funicodeOrEmpty", 0); - /* "src/lxml/apihelpers.pxi":1491 + /* "src/lxml/apihelpers.pxi":1486 * * cdef inline object funicodeOrEmpty(const_xmlChar* s): * return funicode(s) if s is not NULL else '' # <<<<<<<<<<<<<< @@ -34503,7 +34430,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha */ __Pyx_XDECREF(__pyx_r); if (((__pyx_v_s != NULL) != 0)) { - __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1491, __pyx_L1_error) + __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_t_2; __pyx_t_2 = 0; @@ -34515,7 +34442,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1490 + /* "src/lxml/apihelpers.pxi":1485 * return funicode(s) if s is not NULL else None * * cdef inline object funicodeOrEmpty(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -34535,7 +34462,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1493 +/* "src/lxml/apihelpers.pxi":1488 * return funicode(s) if s is not NULL else '' * * cdef object funicode(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -34553,7 +34480,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("funicode", 0); - /* "src/lxml/apihelpers.pxi":1497 + /* "src/lxml/apihelpers.pxi":1492 * cdef const_xmlChar* spos * cdef bint is_non_ascii * if python.LXML_UNICODE_STRINGS: # <<<<<<<<<<<<<< @@ -34563,7 +34490,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { __pyx_t_1 = (LXML_UNICODE_STRINGS != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1498 + /* "src/lxml/apihelpers.pxi":1493 * cdef bint is_non_ascii * if python.LXML_UNICODE_STRINGS: * return s.decode('UTF-8') # <<<<<<<<<<<<<< @@ -34571,13 +34498,13 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { * is_non_ascii = 0 */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, strlen(((char const *)__pyx_v_s)), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1498, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, strlen(((char const *)__pyx_v_s)), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1497 + /* "src/lxml/apihelpers.pxi":1492 * cdef const_xmlChar* spos * cdef bint is_non_ascii * if python.LXML_UNICODE_STRINGS: # <<<<<<<<<<<<<< @@ -34586,7 +34513,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ } - /* "src/lxml/apihelpers.pxi":1499 + /* "src/lxml/apihelpers.pxi":1494 * if python.LXML_UNICODE_STRINGS: * return s.decode('UTF-8') * spos = s # <<<<<<<<<<<<<< @@ -34595,7 +34522,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ __pyx_v_spos = __pyx_v_s; - /* "src/lxml/apihelpers.pxi":1500 + /* "src/lxml/apihelpers.pxi":1495 * return s.decode('UTF-8') * spos = s * is_non_ascii = 0 # <<<<<<<<<<<<<< @@ -34604,7 +34531,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ __pyx_v_is_non_ascii = 0; - /* "src/lxml/apihelpers.pxi":1501 + /* "src/lxml/apihelpers.pxi":1496 * spos = s * is_non_ascii = 0 * while spos[0] != c'\0': # <<<<<<<<<<<<<< @@ -34615,7 +34542,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { __pyx_t_1 = (((__pyx_v_spos[0]) != '\x00') != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1502 + /* "src/lxml/apihelpers.pxi":1497 * is_non_ascii = 0 * while spos[0] != c'\0': * if spos[0] & 0x80: # <<<<<<<<<<<<<< @@ -34625,7 +34552,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { __pyx_t_1 = (((__pyx_v_spos[0]) & 0x80) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1503 + /* "src/lxml/apihelpers.pxi":1498 * while spos[0] != c'\0': * if spos[0] & 0x80: * is_non_ascii = 1 # <<<<<<<<<<<<<< @@ -34634,7 +34561,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ __pyx_v_is_non_ascii = 1; - /* "src/lxml/apihelpers.pxi":1504 + /* "src/lxml/apihelpers.pxi":1499 * if spos[0] & 0x80: * is_non_ascii = 1 * break # <<<<<<<<<<<<<< @@ -34643,7 +34570,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ goto __pyx_L5_break; - /* "src/lxml/apihelpers.pxi":1502 + /* "src/lxml/apihelpers.pxi":1497 * is_non_ascii = 0 * while spos[0] != c'\0': * if spos[0] & 0x80: # <<<<<<<<<<<<<< @@ -34652,7 +34579,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ } - /* "src/lxml/apihelpers.pxi":1505 + /* "src/lxml/apihelpers.pxi":1500 * is_non_ascii = 1 * break * spos += 1 # <<<<<<<<<<<<<< @@ -34663,7 +34590,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { } __pyx_L5_break:; - /* "src/lxml/apihelpers.pxi":1506 + /* "src/lxml/apihelpers.pxi":1501 * break * spos += 1 * slen = spos - s # <<<<<<<<<<<<<< @@ -34672,7 +34599,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ __pyx_v_slen = (__pyx_v_spos - __pyx_v_s); - /* "src/lxml/apihelpers.pxi":1507 + /* "src/lxml/apihelpers.pxi":1502 * spos += 1 * slen = spos - s * if spos[0] != c'\0': # <<<<<<<<<<<<<< @@ -34682,7 +34609,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { __pyx_t_1 = (((__pyx_v_spos[0]) != '\x00') != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1508 + /* "src/lxml/apihelpers.pxi":1503 * slen = spos - s * if spos[0] != c'\0': * slen += cstring_h.strlen( spos) # <<<<<<<<<<<<<< @@ -34691,7 +34618,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ __pyx_v_slen = (__pyx_v_slen + strlen(((char const *)__pyx_v_spos))); - /* "src/lxml/apihelpers.pxi":1507 + /* "src/lxml/apihelpers.pxi":1502 * spos += 1 * slen = spos - s * if spos[0] != c'\0': # <<<<<<<<<<<<<< @@ -34700,7 +34627,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ } - /* "src/lxml/apihelpers.pxi":1509 + /* "src/lxml/apihelpers.pxi":1504 * if spos[0] != c'\0': * slen += cstring_h.strlen( spos) * if is_non_ascii: # <<<<<<<<<<<<<< @@ -34710,7 +34637,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { __pyx_t_1 = (__pyx_v_is_non_ascii != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1510 + /* "src/lxml/apihelpers.pxi":1505 * slen += cstring_h.strlen( spos) * if is_non_ascii: * return s[:slen].decode('UTF-8') # <<<<<<<<<<<<<< @@ -34718,13 +34645,13 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, __pyx_v_slen, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1510, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, __pyx_v_slen, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1509 + /* "src/lxml/apihelpers.pxi":1504 * if spos[0] != c'\0': * slen += cstring_h.strlen( spos) * if is_non_ascii: # <<<<<<<<<<<<<< @@ -34733,7 +34660,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { */ } - /* "src/lxml/apihelpers.pxi":1511 + /* "src/lxml/apihelpers.pxi":1506 * if is_non_ascii: * return s[:slen].decode('UTF-8') * return s[:slen] # <<<<<<<<<<<<<< @@ -34741,14 +34668,14 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { * cdef bytes _utf8(object s): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_s) + 0, __pyx_v_slen - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1511, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_s) + 0, __pyx_v_slen - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject*)__pyx_t_2)); __pyx_r = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1493 + /* "src/lxml/apihelpers.pxi":1488 * return funicode(s) if s is not NULL else '' * * cdef object funicode(const_xmlChar* s): # <<<<<<<<<<<<<< @@ -34767,7 +34694,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1513 +/* "src/lxml/apihelpers.pxi":1508 * return s[:slen] * * cdef bytes _utf8(object s): # <<<<<<<<<<<<<< @@ -34787,7 +34714,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("_utf8", 0); - /* "src/lxml/apihelpers.pxi":1520 + /* "src/lxml/apihelpers.pxi":1515 * cdef int valid * cdef bytes utf8_string * if python.IS_PYTHON2 and type(s) is bytes: # <<<<<<<<<<<<<< @@ -34806,7 +34733,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1521 + /* "src/lxml/apihelpers.pxi":1516 * cdef bytes utf8_string * if python.IS_PYTHON2 and type(s) is bytes: * utf8_string = s # <<<<<<<<<<<<<< @@ -34818,7 +34745,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { __pyx_v_utf8_string = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1522 + /* "src/lxml/apihelpers.pxi":1517 * if python.IS_PYTHON2 and type(s) is bytes: * utf8_string = s * valid = _is_valid_xml_ascii(utf8_string) # <<<<<<<<<<<<<< @@ -34827,7 +34754,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { */ __pyx_v_valid = __pyx_f_4lxml_5etree__is_valid_xml_ascii(__pyx_v_utf8_string); - /* "src/lxml/apihelpers.pxi":1520 + /* "src/lxml/apihelpers.pxi":1515 * cdef int valid * cdef bytes utf8_string * if python.IS_PYTHON2 and type(s) is bytes: # <<<<<<<<<<<<<< @@ -34837,7 +34764,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":1523 + /* "src/lxml/apihelpers.pxi":1518 * utf8_string = s * valid = _is_valid_xml_ascii(utf8_string) * elif isinstance(s, unicode): # <<<<<<<<<<<<<< @@ -34848,7 +34775,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { __pyx_t_3 = (__pyx_t_1 != 0); if (__pyx_t_3) { - /* "src/lxml/apihelpers.pxi":1524 + /* "src/lxml/apihelpers.pxi":1519 * valid = _is_valid_xml_ascii(utf8_string) * elif isinstance(s, unicode): * utf8_string = (s).encode('utf8') # <<<<<<<<<<<<<< @@ -34857,14 +34784,14 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { */ if (unlikely(__pyx_v_s == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode"); - __PYX_ERR(5, 1524, __pyx_L1_error) + __PYX_ERR(5, 1519, __pyx_L1_error) } - __pyx_t_4 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_s)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1524, __pyx_L1_error) + __pyx_t_4 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_s)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1519, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_utf8_string = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1525 + /* "src/lxml/apihelpers.pxi":1520 * elif isinstance(s, unicode): * utf8_string = (s).encode('utf8') * valid = _is_valid_xml_utf8(utf8_string) # <<<<<<<<<<<<<< @@ -34873,7 +34800,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { */ __pyx_v_valid = __pyx_f_4lxml_5etree__is_valid_xml_utf8(__pyx_v_utf8_string); - /* "src/lxml/apihelpers.pxi":1523 + /* "src/lxml/apihelpers.pxi":1518 * utf8_string = s * valid = _is_valid_xml_ascii(utf8_string) * elif isinstance(s, unicode): # <<<<<<<<<<<<<< @@ -34883,7 +34810,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":1526 + /* "src/lxml/apihelpers.pxi":1521 * utf8_string = (s).encode('utf8') * valid = _is_valid_xml_utf8(utf8_string) * elif isinstance(s, (bytes, bytearray)): # <<<<<<<<<<<<<< @@ -34904,19 +34831,19 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { __pyx_t_1 = (__pyx_t_3 != 0); if (likely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1527 + /* "src/lxml/apihelpers.pxi":1522 * valid = _is_valid_xml_utf8(utf8_string) * elif isinstance(s, (bytes, bytearray)): * utf8_string = bytes(s) # <<<<<<<<<<<<<< * valid = _is_valid_xml_ascii(utf8_string) * else: */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_s); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1527, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_s); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_utf8_string = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1528 + /* "src/lxml/apihelpers.pxi":1523 * elif isinstance(s, (bytes, bytearray)): * utf8_string = bytes(s) * valid = _is_valid_xml_ascii(utf8_string) # <<<<<<<<<<<<<< @@ -34925,7 +34852,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { */ __pyx_v_valid = __pyx_f_4lxml_5etree__is_valid_xml_ascii(__pyx_v_utf8_string); - /* "src/lxml/apihelpers.pxi":1526 + /* "src/lxml/apihelpers.pxi":1521 * utf8_string = (s).encode('utf8') * valid = _is_valid_xml_utf8(utf8_string) * elif isinstance(s, (bytes, bytearray)): # <<<<<<<<<<<<<< @@ -34935,7 +34862,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":1530 + /* "src/lxml/apihelpers.pxi":1525 * valid = _is_valid_xml_ascii(utf8_string) * else: * raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__) # <<<<<<<<<<<<<< @@ -34943,21 +34870,21 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { * raise ValueError( */ /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_s)), __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1530, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_s)), __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_must_be_bytes_or_unicod, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1530, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Argument_must_be_bytes_or_unicod, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1530, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(5, 1530, __pyx_L1_error) + __PYX_ERR(5, 1525, __pyx_L1_error) } __pyx_L3:; - /* "src/lxml/apihelpers.pxi":1531 + /* "src/lxml/apihelpers.pxi":1526 * else: * raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__) * if not valid: # <<<<<<<<<<<<<< @@ -34967,20 +34894,20 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { __pyx_t_1 = ((!(__pyx_v_valid != 0)) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1532 + /* "src/lxml/apihelpers.pxi":1527 * raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__) * if not valid: * raise ValueError( # <<<<<<<<<<<<<< * "All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters") * return utf8_string */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1532, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(5, 1532, __pyx_L1_error) + __PYX_ERR(5, 1527, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1531 + /* "src/lxml/apihelpers.pxi":1526 * else: * raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__) * if not valid: # <<<<<<<<<<<<<< @@ -34989,7 +34916,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { */ } - /* "src/lxml/apihelpers.pxi":1534 + /* "src/lxml/apihelpers.pxi":1529 * raise ValueError( * "All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters") * return utf8_string # <<<<<<<<<<<<<< @@ -35001,7 +34928,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { __pyx_r = __pyx_v_utf8_string; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1513 + /* "src/lxml/apihelpers.pxi":1508 * return s[:slen] * * cdef bytes _utf8(object s): # <<<<<<<<<<<<<< @@ -35022,7 +34949,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1537 +/* "src/lxml/apihelpers.pxi":1532 * * * cdef bytes _utf8orNone(object s): # <<<<<<<<<<<<<< @@ -35038,7 +34965,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) { PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("_utf8orNone", 0); - /* "src/lxml/apihelpers.pxi":1538 + /* "src/lxml/apihelpers.pxi":1533 * * cdef bytes _utf8orNone(object s): * return _utf8(s) if s is not None else None # <<<<<<<<<<<<<< @@ -35048,7 +34975,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) { __Pyx_XDECREF(__pyx_r); __pyx_t_2 = (__pyx_v_s != Py_None); if ((__pyx_t_2 != 0)) { - __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_s); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1538, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_s); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __pyx_t_3; __pyx_t_3 = 0; @@ -35060,7 +34987,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) { __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1537 + /* "src/lxml/apihelpers.pxi":1532 * * * cdef bytes _utf8orNone(object s): # <<<<<<<<<<<<<< @@ -35080,7 +35007,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1541 +/* "src/lxml/apihelpers.pxi":1536 * * * cdef strrepr(s): # <<<<<<<<<<<<<< @@ -35097,7 +35024,7 @@ static PyObject *__pyx_f_4lxml_5etree_strrepr(PyObject *__pyx_v_s) { PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("strrepr", 0); - /* "src/lxml/apihelpers.pxi":1545 + /* "src/lxml/apihelpers.pxi":1540 * methods, e.g. _Element.__repr__(). * """ * return s.encode('unicode-escape') if python.IS_PYTHON2 else s # <<<<<<<<<<<<<< @@ -35106,7 +35033,7 @@ static PyObject *__pyx_f_4lxml_5etree_strrepr(PyObject *__pyx_v_s) { */ __Pyx_XDECREF(__pyx_r); if ((IS_PYTHON2 != 0)) { - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1545, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { @@ -35120,7 +35047,7 @@ static PyObject *__pyx_f_4lxml_5etree_strrepr(PyObject *__pyx_v_s) { } __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_kp_s_unicode_escape) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_unicode_escape); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1545, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; @@ -35133,7 +35060,7 @@ static PyObject *__pyx_f_4lxml_5etree_strrepr(PyObject *__pyx_v_s) { __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1541 + /* "src/lxml/apihelpers.pxi":1536 * * * cdef strrepr(s): # <<<<<<<<<<<<<< @@ -35155,7 +35082,7 @@ static PyObject *__pyx_f_4lxml_5etree_strrepr(PyObject *__pyx_v_s) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1555 +/* "src/lxml/apihelpers.pxi":1550 * * * cdef bint _isFilePath(const_xmlChar* c_path): # <<<<<<<<<<<<<< @@ -35171,7 +35098,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { int __pyx_t_3; __Pyx_RefNannySetupContext("_isFilePath", 0); - /* "src/lxml/apihelpers.pxi":1559 + /* "src/lxml/apihelpers.pxi":1554 * cdef xmlChar c * # test if it looks like an absolute Unix path or a Windows network path * if c_path[0] == c'/': # <<<<<<<<<<<<<< @@ -35181,7 +35108,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_t_1 = (((__pyx_v_c_path[0]) == '/') != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1560 + /* "src/lxml/apihelpers.pxi":1555 * # test if it looks like an absolute Unix path or a Windows network path * if c_path[0] == c'/': * return ABS_UNIX_FILE_PATH # <<<<<<<<<<<<<< @@ -35191,7 +35118,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_r = __pyx_e_4lxml_5etree_ABS_UNIX_FILE_PATH; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1559 + /* "src/lxml/apihelpers.pxi":1554 * cdef xmlChar c * # test if it looks like an absolute Unix path or a Windows network path * if c_path[0] == c'/': # <<<<<<<<<<<<<< @@ -35200,7 +35127,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { */ } - /* "src/lxml/apihelpers.pxi":1563 + /* "src/lxml/apihelpers.pxi":1558 * * # test if it looks like an absolute Windows path or URL * if c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': # <<<<<<<<<<<<<< @@ -35226,7 +35153,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_L5_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1564 + /* "src/lxml/apihelpers.pxi":1559 * # test if it looks like an absolute Windows path or URL * if c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': * c_path += 1 # <<<<<<<<<<<<<< @@ -35235,7 +35162,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { */ __pyx_v_c_path = (__pyx_v_c_path + 1); - /* "src/lxml/apihelpers.pxi":1565 + /* "src/lxml/apihelpers.pxi":1560 * if c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': * c_path += 1 * if c_path[0] == c':' and c_path[1] in b'\0\\': # <<<<<<<<<<<<<< @@ -35262,7 +35189,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_L8_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1566 + /* "src/lxml/apihelpers.pxi":1561 * c_path += 1 * if c_path[0] == c':' and c_path[1] in b'\0\\': * return ABS_WIN_FILE_PATH # C: or C:\... # <<<<<<<<<<<<<< @@ -35272,7 +35199,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_r = __pyx_e_4lxml_5etree_ABS_WIN_FILE_PATH; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1565 + /* "src/lxml/apihelpers.pxi":1560 * if c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': * c_path += 1 * if c_path[0] == c':' and c_path[1] in b'\0\\': # <<<<<<<<<<<<<< @@ -35281,7 +35208,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { */ } - /* "src/lxml/apihelpers.pxi":1569 + /* "src/lxml/apihelpers.pxi":1564 * * # test if it looks like a URL with scheme:// * while c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': # <<<<<<<<<<<<<< @@ -35308,7 +35235,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_L12_bool_binop_done:; if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1570 + /* "src/lxml/apihelpers.pxi":1565 * # test if it looks like a URL with scheme:// * while c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': * c_path += 1 # <<<<<<<<<<<<<< @@ -35318,7 +35245,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_v_c_path = (__pyx_v_c_path + 1); } - /* "src/lxml/apihelpers.pxi":1571 + /* "src/lxml/apihelpers.pxi":1566 * while c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': * c_path += 1 * if c_path[0] == c':' and c_path[1] == c'/' and c_path[2] == c'/': # <<<<<<<<<<<<<< @@ -35342,7 +35269,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_L15_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1572 + /* "src/lxml/apihelpers.pxi":1567 * c_path += 1 * if c_path[0] == c':' and c_path[1] == c'/' and c_path[2] == c'/': * return NO_FILE_PATH # <<<<<<<<<<<<<< @@ -35352,7 +35279,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_r = __pyx_e_4lxml_5etree_NO_FILE_PATH; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1571 + /* "src/lxml/apihelpers.pxi":1566 * while c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': * c_path += 1 * if c_path[0] == c':' and c_path[1] == c'/' and c_path[2] == c'/': # <<<<<<<<<<<<<< @@ -35361,7 +35288,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { */ } - /* "src/lxml/apihelpers.pxi":1563 + /* "src/lxml/apihelpers.pxi":1558 * * # test if it looks like an absolute Windows path or URL * if c'a' <= c_path[0] <= c'z' or c'A' <= c_path[0] <= c'Z': # <<<<<<<<<<<<<< @@ -35370,7 +35297,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { */ } - /* "src/lxml/apihelpers.pxi":1575 + /* "src/lxml/apihelpers.pxi":1570 * * # assume it's a relative path * return REL_FILE_PATH # <<<<<<<<<<<<<< @@ -35380,7 +35307,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { __pyx_r = __pyx_e_4lxml_5etree_REL_FILE_PATH; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1555 + /* "src/lxml/apihelpers.pxi":1550 * * * cdef bint _isFilePath(const_xmlChar* c_path): # <<<<<<<<<<<<<< @@ -35394,7 +35321,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1577 +/* "src/lxml/apihelpers.pxi":1572 * return REL_FILE_PATH * * cdef object _encodeFilename(object filename): # <<<<<<<<<<<<<< @@ -35416,7 +35343,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename int __pyx_t_8; __Pyx_RefNannySetupContext("_encodeFilename", 0); - /* "src/lxml/apihelpers.pxi":1580 + /* "src/lxml/apihelpers.pxi":1575 * u"""Make sure a filename is 8-bit encoded (or None). * """ * if filename is None: # <<<<<<<<<<<<<< @@ -35427,7 +35354,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1581 + /* "src/lxml/apihelpers.pxi":1576 * """ * if filename is None: * return None # <<<<<<<<<<<<<< @@ -35438,7 +35365,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1580 + /* "src/lxml/apihelpers.pxi":1575 * u"""Make sure a filename is 8-bit encoded (or None). * """ * if filename is None: # <<<<<<<<<<<<<< @@ -35447,7 +35374,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename */ } - /* "src/lxml/apihelpers.pxi":1582 + /* "src/lxml/apihelpers.pxi":1577 * if filename is None: * return None * elif isinstance(filename, bytes): # <<<<<<<<<<<<<< @@ -35458,7 +35385,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1583 + /* "src/lxml/apihelpers.pxi":1578 * return None * elif isinstance(filename, bytes): * return filename # <<<<<<<<<<<<<< @@ -35470,7 +35397,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_r = __pyx_v_filename; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1582 + /* "src/lxml/apihelpers.pxi":1577 * if filename is None: * return None * elif isinstance(filename, bytes): # <<<<<<<<<<<<<< @@ -35479,7 +35406,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename */ } - /* "src/lxml/apihelpers.pxi":1584 + /* "src/lxml/apihelpers.pxi":1579 * elif isinstance(filename, bytes): * return filename * elif isinstance(filename, unicode): # <<<<<<<<<<<<<< @@ -35490,7 +35417,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_t_2 = (__pyx_t_1 != 0); if (likely(__pyx_t_2)) { - /* "src/lxml/apihelpers.pxi":1585 + /* "src/lxml/apihelpers.pxi":1580 * return filename * elif isinstance(filename, unicode): * filename8 = (filename).encode('utf8') # <<<<<<<<<<<<<< @@ -35499,25 +35426,25 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename */ if (unlikely(__pyx_v_filename == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode"); - __PYX_ERR(5, 1585, __pyx_L1_error) + __PYX_ERR(5, 1580, __pyx_L1_error) } - __pyx_t_3 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1585, __pyx_L1_error) + __pyx_t_3 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_filename8 = __pyx_t_3; __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":1586 + /* "src/lxml/apihelpers.pxi":1581 * elif isinstance(filename, unicode): * filename8 = (filename).encode('utf8') * if _isFilePath(filename8): # <<<<<<<<<<<<<< * try: * return python.PyUnicode_AsEncodedString( */ - __pyx_t_4 = __Pyx_PyObject_AsWritableUString(__pyx_v_filename8); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(5, 1586, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_AsWritableUString(__pyx_v_filename8); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(5, 1581, __pyx_L1_error) __pyx_t_2 = (__pyx_f_4lxml_5etree__isFilePath(((unsigned char *)__pyx_t_4)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1587 + /* "src/lxml/apihelpers.pxi":1582 * filename8 = (filename).encode('utf8') * if _isFilePath(filename8): * try: # <<<<<<<<<<<<<< @@ -35533,7 +35460,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __Pyx_XGOTREF(__pyx_t_7); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1588 + /* "src/lxml/apihelpers.pxi":1583 * if _isFilePath(filename8): * try: * return python.PyUnicode_AsEncodedString( # <<<<<<<<<<<<<< @@ -35542,20 +35469,20 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename */ __Pyx_XDECREF(__pyx_r); - /* "src/lxml/apihelpers.pxi":1589 + /* "src/lxml/apihelpers.pxi":1584 * try: * return python.PyUnicode_AsEncodedString( * filename, _C_FILENAME_ENCODING, NULL) # <<<<<<<<<<<<<< * except UnicodeEncodeError: * pass */ - __pyx_t_3 = PyUnicode_AsEncodedString(__pyx_v_filename, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1588, __pyx_L5_error) + __pyx_t_3 = PyUnicode_AsEncodedString(__pyx_v_filename, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1583, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L9_try_return; - /* "src/lxml/apihelpers.pxi":1587 + /* "src/lxml/apihelpers.pxi":1582 * filename8 = (filename).encode('utf8') * if _isFilePath(filename8): * try: # <<<<<<<<<<<<<< @@ -35566,7 +35493,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_L5_error:; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "src/lxml/apihelpers.pxi":1590 + /* "src/lxml/apihelpers.pxi":1585 * return python.PyUnicode_AsEncodedString( * filename, _C_FILENAME_ENCODING, NULL) * except UnicodeEncodeError: # <<<<<<<<<<<<<< @@ -35581,7 +35508,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename goto __pyx_L7_except_error; __pyx_L7_except_error:; - /* "src/lxml/apihelpers.pxi":1587 + /* "src/lxml/apihelpers.pxi":1582 * filename8 = (filename).encode('utf8') * if _isFilePath(filename8): * try: # <<<<<<<<<<<<<< @@ -35606,7 +35533,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); } - /* "src/lxml/apihelpers.pxi":1586 + /* "src/lxml/apihelpers.pxi":1581 * elif isinstance(filename, unicode): * filename8 = (filename).encode('utf8') * if _isFilePath(filename8): # <<<<<<<<<<<<<< @@ -35615,7 +35542,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename */ } - /* "src/lxml/apihelpers.pxi":1592 + /* "src/lxml/apihelpers.pxi":1587 * except UnicodeEncodeError: * pass * return filename8 # <<<<<<<<<<<<<< @@ -35627,7 +35554,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename __pyx_r = __pyx_v_filename8; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1584 + /* "src/lxml/apihelpers.pxi":1579 * elif isinstance(filename, bytes): * return filename * elif isinstance(filename, unicode): # <<<<<<<<<<<<<< @@ -35636,7 +35563,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename */ } - /* "src/lxml/apihelpers.pxi":1594 + /* "src/lxml/apihelpers.pxi":1589 * return filename8 * else: * raise TypeError("Argument must be string or unicode.") # <<<<<<<<<<<<<< @@ -35644,14 +35571,14 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename * cdef object _decodeFilename(const_xmlChar* c_path): */ /*else*/ { - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1594, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(5, 1594, __pyx_L1_error) + __PYX_ERR(5, 1589, __pyx_L1_error) } - /* "src/lxml/apihelpers.pxi":1577 + /* "src/lxml/apihelpers.pxi":1572 * return REL_FILE_PATH * * cdef object _encodeFilename(object filename): # <<<<<<<<<<<<<< @@ -35671,7 +35598,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1596 +/* "src/lxml/apihelpers.pxi":1591 * raise TypeError("Argument must be string or unicode.") * * cdef object _decodeFilename(const_xmlChar* c_path): # <<<<<<<<<<<<<< @@ -35685,7 +35612,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilename(const xmlChar *__pyx_v_c_p PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("_decodeFilename", 0); - /* "src/lxml/apihelpers.pxi":1599 + /* "src/lxml/apihelpers.pxi":1594 * u"""Make the filename a unicode string if we are in Py3. * """ * return _decodeFilenameWithLength(c_path, tree.xmlStrlen(c_path)) # <<<<<<<<<<<<<< @@ -35693,13 +35620,13 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilename(const xmlChar *__pyx_v_c_p * cdef object _decodeFilenameWithLength(const_xmlChar* c_path, size_t c_len): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_v_c_path, xmlStrlen(__pyx_v_c_path)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1599, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_v_c_path, xmlStrlen(__pyx_v_c_path)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1596 + /* "src/lxml/apihelpers.pxi":1591 * raise TypeError("Argument must be string or unicode.") * * cdef object _decodeFilename(const_xmlChar* c_path): # <<<<<<<<<<<<<< @@ -35718,7 +35645,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilename(const xmlChar *__pyx_v_c_p return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1601 +/* "src/lxml/apihelpers.pxi":1596 * return _decodeFilenameWithLength(c_path, tree.xmlStrlen(c_path)) * * cdef object _decodeFilenameWithLength(const_xmlChar* c_path, size_t c_len): # <<<<<<<<<<<<<< @@ -35740,7 +35667,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ PyObject *__pyx_t_9 = NULL; __Pyx_RefNannySetupContext("_decodeFilenameWithLength", 0); - /* "src/lxml/apihelpers.pxi":1604 + /* "src/lxml/apihelpers.pxi":1599 * u"""Make the filename a unicode string if we are in Py3. * """ * if _isFilePath(c_path): # <<<<<<<<<<<<<< @@ -35750,7 +35677,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __pyx_t_1 = (__pyx_f_4lxml_5etree__isFilePath(__pyx_v_c_path) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1605 + /* "src/lxml/apihelpers.pxi":1600 * """ * if _isFilePath(c_path): * try: # <<<<<<<<<<<<<< @@ -35766,7 +35693,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __Pyx_XGOTREF(__pyx_t_4); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1606 + /* "src/lxml/apihelpers.pxi":1601 * if _isFilePath(c_path): * try: * return python.PyUnicode_Decode( # <<<<<<<<<<<<<< @@ -35775,20 +35702,20 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ */ __Pyx_XDECREF(__pyx_r); - /* "src/lxml/apihelpers.pxi":1607 + /* "src/lxml/apihelpers.pxi":1602 * try: * return python.PyUnicode_Decode( * c_path, c_len, _C_FILENAME_ENCODING, NULL) # <<<<<<<<<<<<<< * except UnicodeDecodeError: * pass */ - __pyx_t_5 = PyUnicode_Decode(((const char *)__pyx_v_c_path), __pyx_v_c_len, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1606, __pyx_L4_error) + __pyx_t_5 = PyUnicode_Decode(((const char *)__pyx_v_c_path), __pyx_v_c_len, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1601, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L8_try_return; - /* "src/lxml/apihelpers.pxi":1605 + /* "src/lxml/apihelpers.pxi":1600 * """ * if _isFilePath(c_path): * try: # <<<<<<<<<<<<<< @@ -35799,7 +35726,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __pyx_L4_error:; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":1608 + /* "src/lxml/apihelpers.pxi":1603 * return python.PyUnicode_Decode( * c_path, c_len, _C_FILENAME_ENCODING, NULL) * except UnicodeDecodeError: # <<<<<<<<<<<<<< @@ -35814,7 +35741,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ goto __pyx_L6_except_error; __pyx_L6_except_error:; - /* "src/lxml/apihelpers.pxi":1605 + /* "src/lxml/apihelpers.pxi":1600 * """ * if _isFilePath(c_path): * try: # <<<<<<<<<<<<<< @@ -35839,7 +35766,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); } - /* "src/lxml/apihelpers.pxi":1604 + /* "src/lxml/apihelpers.pxi":1599 * u"""Make the filename a unicode string if we are in Py3. * """ * if _isFilePath(c_path): # <<<<<<<<<<<<<< @@ -35848,7 +35775,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ */ } - /* "src/lxml/apihelpers.pxi":1610 + /* "src/lxml/apihelpers.pxi":1605 * except UnicodeDecodeError: * pass * try: # <<<<<<<<<<<<<< @@ -35864,7 +35791,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __Pyx_XGOTREF(__pyx_t_2); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1611 + /* "src/lxml/apihelpers.pxi":1606 * pass * try: * return (c_path)[:c_len].decode('UTF-8') # <<<<<<<<<<<<<< @@ -35872,13 +35799,13 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ * # this is a stupid fallback, but it might still work... */ __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_decode_c_string(((char const *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1611, __pyx_L10_error) + __pyx_t_5 = __Pyx_decode_c_string(((char const *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1606, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L14_try_return; - /* "src/lxml/apihelpers.pxi":1610 + /* "src/lxml/apihelpers.pxi":1605 * except UnicodeDecodeError: * pass * try: # <<<<<<<<<<<<<< @@ -35889,7 +35816,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __pyx_L10_error:; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":1612 + /* "src/lxml/apihelpers.pxi":1607 * try: * return (c_path)[:c_len].decode('UTF-8') * except UnicodeDecodeError: # <<<<<<<<<<<<<< @@ -35899,12 +35826,12 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError); if (__pyx_t_6) { __Pyx_AddTraceback("lxml.etree._decodeFilenameWithLength", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(5, 1612, __pyx_L12_except_error) + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(5, 1607, __pyx_L12_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_7); __Pyx_GOTREF(__pyx_t_8); - /* "src/lxml/apihelpers.pxi":1614 + /* "src/lxml/apihelpers.pxi":1609 * except UnicodeDecodeError: * # this is a stupid fallback, but it might still work... * return (c_path)[:c_len].decode('latin-1', 'replace') # <<<<<<<<<<<<<< @@ -35912,7 +35839,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ * cdef object _encodeFilenameUTF8(object filename): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_9 = __Pyx_decode_c_string(((char const *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, ((char const *)"replace"), PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1614, __pyx_L12_except_error) + __pyx_t_9 = __Pyx_decode_c_string(((char const *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, ((char const *)"replace"), PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1609, __pyx_L12_except_error) __Pyx_GOTREF(__pyx_t_9); __pyx_r = __pyx_t_9; __pyx_t_9 = 0; @@ -35924,7 +35851,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ goto __pyx_L12_except_error; __pyx_L12_except_error:; - /* "src/lxml/apihelpers.pxi":1610 + /* "src/lxml/apihelpers.pxi":1605 * except UnicodeDecodeError: * pass * try: # <<<<<<<<<<<<<< @@ -35950,7 +35877,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ goto __pyx_L0; } - /* "src/lxml/apihelpers.pxi":1601 + /* "src/lxml/apihelpers.pxi":1596 * return _decodeFilenameWithLength(c_path, tree.xmlStrlen(c_path)) * * cdef object _decodeFilenameWithLength(const_xmlChar* c_path, size_t c_len): # <<<<<<<<<<<<<< @@ -35972,7 +35899,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1616 +/* "src/lxml/apihelpers.pxi":1611 * return (c_path)[:c_len].decode('latin-1', 'replace') * * cdef object _encodeFilenameUTF8(object filename): # <<<<<<<<<<<<<< @@ -36005,7 +35932,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __Pyx_RefNannySetupContext("_encodeFilenameUTF8", 0); __Pyx_INCREF(__pyx_v_filename); - /* "src/lxml/apihelpers.pxi":1621 + /* "src/lxml/apihelpers.pxi":1616 * """ * cdef char* c_filename * if filename is None: # <<<<<<<<<<<<<< @@ -36016,7 +35943,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1622 + /* "src/lxml/apihelpers.pxi":1617 * cdef char* c_filename * if filename is None: * return None # <<<<<<<<<<<<<< @@ -36027,7 +35954,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1621 + /* "src/lxml/apihelpers.pxi":1616 * """ * cdef char* c_filename * if filename is None: # <<<<<<<<<<<<<< @@ -36036,7 +35963,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ } - /* "src/lxml/apihelpers.pxi":1623 + /* "src/lxml/apihelpers.pxi":1618 * if filename is None: * return None * elif isinstance(filename, bytes): # <<<<<<<<<<<<<< @@ -36047,7 +35974,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1624 + /* "src/lxml/apihelpers.pxi":1619 * return None * elif isinstance(filename, bytes): * if not isutf8l(filename, len(filename)): # <<<<<<<<<<<<<< @@ -36056,18 +35983,18 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ if (unlikely(__pyx_v_filename == Py_None)) { PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); - __PYX_ERR(5, 1624, __pyx_L1_error) + __PYX_ERR(5, 1619, __pyx_L1_error) } - __pyx_t_3 = __Pyx_PyBytes_AsUString(__pyx_v_filename); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(5, 1624, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_AsUString(__pyx_v_filename); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(5, 1619, __pyx_L1_error) if (unlikely(__pyx_v_filename == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(5, 1624, __pyx_L1_error) + __PYX_ERR(5, 1619, __pyx_L1_error) } - __pyx_t_4 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1624, __pyx_L1_error) + __pyx_t_4 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1619, __pyx_L1_error) __pyx_t_1 = ((!(__pyx_f_4lxml_5etree_isutf8l(__pyx_t_3, __pyx_t_4) != 0)) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1626 + /* "src/lxml/apihelpers.pxi":1621 * if not isutf8l(filename, len(filename)): * # plain ASCII! * return filename # <<<<<<<<<<<<<< @@ -36079,7 +36006,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_r = __pyx_v_filename; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1624 + /* "src/lxml/apihelpers.pxi":1619 * return None * elif isinstance(filename, bytes): * if not isutf8l(filename, len(filename)): # <<<<<<<<<<<<<< @@ -36088,7 +36015,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ } - /* "src/lxml/apihelpers.pxi":1627 + /* "src/lxml/apihelpers.pxi":1622 * # plain ASCII! * return filename * c_filename = _cstr(filename) # <<<<<<<<<<<<<< @@ -36097,7 +36024,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ __pyx_v_c_filename = PyBytes_AS_STRING(__pyx_v_filename); - /* "src/lxml/apihelpers.pxi":1628 + /* "src/lxml/apihelpers.pxi":1623 * return filename * c_filename = _cstr(filename) * try: # <<<<<<<<<<<<<< @@ -36113,7 +36040,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __Pyx_XGOTREF(__pyx_t_7); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1631 + /* "src/lxml/apihelpers.pxi":1626 * # try to decode with default encoding * filename = python.PyUnicode_Decode( * c_filename, len(filename), # <<<<<<<<<<<<<< @@ -36122,23 +36049,23 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ if (unlikely(__pyx_v_filename == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(5, 1631, __pyx_L5_error) + __PYX_ERR(5, 1626, __pyx_L5_error) } - __pyx_t_4 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1631, __pyx_L5_error) + __pyx_t_4 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1626, __pyx_L5_error) - /* "src/lxml/apihelpers.pxi":1630 + /* "src/lxml/apihelpers.pxi":1625 * try: * # try to decode with default encoding * filename = python.PyUnicode_Decode( # <<<<<<<<<<<<<< * c_filename, len(filename), * _C_FILENAME_ENCODING, NULL) */ - __pyx_t_8 = PyUnicode_Decode(__pyx_v_c_filename, __pyx_t_4, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1630, __pyx_L5_error) + __pyx_t_8 = PyUnicode_Decode(__pyx_v_c_filename, __pyx_t_4, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 1625, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_8); __pyx_t_8 = 0; - /* "src/lxml/apihelpers.pxi":1628 + /* "src/lxml/apihelpers.pxi":1623 * return filename * c_filename = _cstr(filename) * try: # <<<<<<<<<<<<<< @@ -36153,7 +36080,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_L5_error:; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "src/lxml/apihelpers.pxi":1633 + /* "src/lxml/apihelpers.pxi":1628 * c_filename, len(filename), * _C_FILENAME_ENCODING, NULL) * except UnicodeDecodeError as decode_exc: # <<<<<<<<<<<<<< @@ -36163,14 +36090,14 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError); if (__pyx_t_9) { __Pyx_AddTraceback("lxml.etree._encodeFilenameUTF8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(5, 1633, __pyx_L7_except_error) + if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(5, 1628, __pyx_L7_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_10); __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __pyx_v_decode_exc = __pyx_t_10; - /* "src/lxml/apihelpers.pxi":1634 + /* "src/lxml/apihelpers.pxi":1629 * _C_FILENAME_ENCODING, NULL) * except UnicodeDecodeError as decode_exc: * try: # <<<<<<<<<<<<<< @@ -36186,7 +36113,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __Pyx_XGOTREF(__pyx_t_14); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1636 + /* "src/lxml/apihelpers.pxi":1631 * try: * # try if it's proper UTF-8 * (filename).decode('utf8') # <<<<<<<<<<<<<< @@ -36195,13 +36122,13 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ if (unlikely(__pyx_v_filename == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1636, __pyx_L13_error) + __PYX_ERR(5, 1631, __pyx_L13_error) } - __pyx_t_15 = __Pyx_decode_bytes(((PyObject*)__pyx_v_filename), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 1636, __pyx_L13_error) + __pyx_t_15 = __Pyx_decode_bytes(((PyObject*)__pyx_v_filename), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 1631, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - /* "src/lxml/apihelpers.pxi":1637 + /* "src/lxml/apihelpers.pxi":1632 * # try if it's proper UTF-8 * (filename).decode('utf8') * return filename # <<<<<<<<<<<<<< @@ -36216,7 +36143,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L17_try_return; - /* "src/lxml/apihelpers.pxi":1634 + /* "src/lxml/apihelpers.pxi":1629 * _C_FILENAME_ENCODING, NULL) * except UnicodeDecodeError as decode_exc: * try: # <<<<<<<<<<<<<< @@ -36227,7 +36154,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_L13_error:; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - /* "src/lxml/apihelpers.pxi":1638 + /* "src/lxml/apihelpers.pxi":1633 * (filename).decode('utf8') * return filename * except UnicodeDecodeError: # <<<<<<<<<<<<<< @@ -36237,12 +36164,12 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError); if (__pyx_t_9) { __Pyx_AddTraceback("lxml.etree._encodeFilenameUTF8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0) __PYX_ERR(5, 1638, __pyx_L15_except_error) + if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0) __PYX_ERR(5, 1633, __pyx_L15_except_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GOTREF(__pyx_t_16); __Pyx_GOTREF(__pyx_t_17); - /* "src/lxml/apihelpers.pxi":1639 + /* "src/lxml/apihelpers.pxi":1634 * return filename * except UnicodeDecodeError: * raise decode_exc # otherwise re-raise original exception # <<<<<<<<<<<<<< @@ -36250,12 +36177,12 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file * return (filename).encode('utf8') */ __Pyx_Raise(__pyx_v_decode_exc, 0, 0, 0); - __PYX_ERR(5, 1639, __pyx_L15_except_error) + __PYX_ERR(5, 1634, __pyx_L15_except_error) } goto __pyx_L15_except_error; __pyx_L15_except_error:; - /* "src/lxml/apihelpers.pxi":1634 + /* "src/lxml/apihelpers.pxi":1629 * _C_FILENAME_ENCODING, NULL) * except UnicodeDecodeError as decode_exc: * try: # <<<<<<<<<<<<<< @@ -36278,7 +36205,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file goto __pyx_L7_except_error; __pyx_L7_except_error:; - /* "src/lxml/apihelpers.pxi":1628 + /* "src/lxml/apihelpers.pxi":1623 * return filename * c_filename = _cstr(filename) * try: # <<<<<<<<<<<<<< @@ -36299,7 +36226,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_L10_try_end:; } - /* "src/lxml/apihelpers.pxi":1623 + /* "src/lxml/apihelpers.pxi":1618 * if filename is None: * return None * elif isinstance(filename, bytes): # <<<<<<<<<<<<<< @@ -36308,7 +36235,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ } - /* "src/lxml/apihelpers.pxi":1640 + /* "src/lxml/apihelpers.pxi":1635 * except UnicodeDecodeError: * raise decode_exc # otherwise re-raise original exception * if isinstance(filename, unicode): # <<<<<<<<<<<<<< @@ -36319,7 +36246,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __pyx_t_2 = (__pyx_t_1 != 0); if (likely(__pyx_t_2)) { - /* "src/lxml/apihelpers.pxi":1641 + /* "src/lxml/apihelpers.pxi":1636 * raise decode_exc # otherwise re-raise original exception * if isinstance(filename, unicode): * return (filename).encode('utf8') # <<<<<<<<<<<<<< @@ -36329,15 +36256,15 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file __Pyx_XDECREF(__pyx_r); if (unlikely(__pyx_v_filename == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode"); - __PYX_ERR(5, 1641, __pyx_L1_error) + __PYX_ERR(5, 1636, __pyx_L1_error) } - __pyx_t_11 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename)); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 1641, __pyx_L1_error) + __pyx_t_11 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename)); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 1636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_r = __pyx_t_11; __pyx_t_11 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1640 + /* "src/lxml/apihelpers.pxi":1635 * except UnicodeDecodeError: * raise decode_exc # otherwise re-raise original exception * if isinstance(filename, unicode): # <<<<<<<<<<<<<< @@ -36346,7 +36273,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file */ } - /* "src/lxml/apihelpers.pxi":1643 + /* "src/lxml/apihelpers.pxi":1638 * return (filename).encode('utf8') * else: * raise TypeError("Argument must be string or unicode.") # <<<<<<<<<<<<<< @@ -36354,14 +36281,14 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file * cdef tuple _getNsTag(tag): */ /*else*/ { - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 1643, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 1638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __PYX_ERR(5, 1643, __pyx_L1_error) + __PYX_ERR(5, 1638, __pyx_L1_error) } - /* "src/lxml/apihelpers.pxi":1616 + /* "src/lxml/apihelpers.pxi":1611 * return (c_path)[:c_len].decode('latin-1', 'replace') * * cdef object _encodeFilenameUTF8(object filename): # <<<<<<<<<<<<<< @@ -36387,7 +36314,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1645 +/* "src/lxml/apihelpers.pxi":1640 * raise TypeError("Argument must be string or unicode.") * * cdef tuple _getNsTag(tag): # <<<<<<<<<<<<<< @@ -36401,7 +36328,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTag(PyObject *__pyx_v_tag) { PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("_getNsTag", 0); - /* "src/lxml/apihelpers.pxi":1649 + /* "src/lxml/apihelpers.pxi":1644 * Return None for NS uri if no namespace URI provided. * """ * return __getNsTag(tag, 0) # <<<<<<<<<<<<<< @@ -36409,13 +36336,13 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTag(PyObject *__pyx_v_tag) { * cdef tuple _getNsTagWithEmptyNs(tag): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1649, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1644, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1645 + /* "src/lxml/apihelpers.pxi":1640 * raise TypeError("Argument must be string or unicode.") * * cdef tuple _getNsTag(tag): # <<<<<<<<<<<<<< @@ -36434,7 +36361,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTag(PyObject *__pyx_v_tag) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1651 +/* "src/lxml/apihelpers.pxi":1646 * return __getNsTag(tag, 0) * * cdef tuple _getNsTagWithEmptyNs(tag): # <<<<<<<<<<<<<< @@ -36448,7 +36375,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTagWithEmptyNs(PyObject *__pyx_v_tag PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("_getNsTagWithEmptyNs", 0); - /* "src/lxml/apihelpers.pxi":1656 + /* "src/lxml/apihelpers.pxi":1651 * part is '{}'. * """ * return __getNsTag(tag, 1) # <<<<<<<<<<<<<< @@ -36456,13 +36383,13 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTagWithEmptyNs(PyObject *__pyx_v_tag * cdef tuple __getNsTag(tag, bint empty_ns): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1656, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1651 + /* "src/lxml/apihelpers.pxi":1646 * return __getNsTag(tag, 0) * * cdef tuple _getNsTagWithEmptyNs(tag): # <<<<<<<<<<<<<< @@ -36481,7 +36408,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTagWithEmptyNs(PyObject *__pyx_v_tag return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1658 +/* "src/lxml/apihelpers.pxi":1653 * return __getNsTag(tag, 1) * * cdef tuple __getNsTag(tag, bint empty_ns): # <<<<<<<<<<<<<< @@ -36505,7 +36432,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __Pyx_RefNannySetupContext("__getNsTag", 0); __Pyx_INCREF(__pyx_v_tag); - /* "src/lxml/apihelpers.pxi":1663 + /* "src/lxml/apihelpers.pxi":1658 * cdef Py_ssize_t taglen * cdef Py_ssize_t nslen * cdef bytes ns = None # <<<<<<<<<<<<<< @@ -36515,7 +36442,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __Pyx_INCREF(Py_None); __pyx_v_ns = ((PyObject*)Py_None); - /* "src/lxml/apihelpers.pxi":1665 + /* "src/lxml/apihelpers.pxi":1660 * cdef bytes ns = None * # _isString() is much faster than isinstance() * if not _isString(tag) and isinstance(tag, QName): # <<<<<<<<<<<<<< @@ -36534,7 +36461,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1666 + /* "src/lxml/apihelpers.pxi":1661 * # _isString() is much faster than isinstance() * if not _isString(tag) and isinstance(tag, QName): * tag = (tag).text # <<<<<<<<<<<<<< @@ -36546,7 +36473,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1665 + /* "src/lxml/apihelpers.pxi":1660 * cdef bytes ns = None * # _isString() is much faster than isinstance() * if not _isString(tag) and isinstance(tag, QName): # <<<<<<<<<<<<<< @@ -36555,19 +36482,19 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ } - /* "src/lxml/apihelpers.pxi":1667 + /* "src/lxml/apihelpers.pxi":1662 * if not _isString(tag) and isinstance(tag, QName): * tag = (tag).text * tag = _utf8(tag) # <<<<<<<<<<<<<< * c_tag = _cstr(tag) * if c_tag[0] == c'{': */ - __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1667, __pyx_L1_error) + __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1668 + /* "src/lxml/apihelpers.pxi":1663 * tag = (tag).text * tag = _utf8(tag) * c_tag = _cstr(tag) # <<<<<<<<<<<<<< @@ -36576,7 +36503,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ __pyx_v_c_tag = PyBytes_AS_STRING(__pyx_v_tag); - /* "src/lxml/apihelpers.pxi":1669 + /* "src/lxml/apihelpers.pxi":1664 * tag = _utf8(tag) * c_tag = _cstr(tag) * if c_tag[0] == c'{': # <<<<<<<<<<<<<< @@ -36586,7 +36513,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_1 = (((__pyx_v_c_tag[0]) == '{') != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1670 + /* "src/lxml/apihelpers.pxi":1665 * c_tag = _cstr(tag) * if c_tag[0] == c'{': * c_tag += 1 # <<<<<<<<<<<<<< @@ -36595,7 +36522,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ __pyx_v_c_tag = (__pyx_v_c_tag + 1); - /* "src/lxml/apihelpers.pxi":1671 + /* "src/lxml/apihelpers.pxi":1666 * if c_tag[0] == c'{': * c_tag += 1 * c_ns_end = cstring_h.strchr(c_tag, c'}') # <<<<<<<<<<<<<< @@ -36604,7 +36531,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ __pyx_v_c_ns_end = strchr(__pyx_v_c_tag, '}'); - /* "src/lxml/apihelpers.pxi":1672 + /* "src/lxml/apihelpers.pxi":1667 * c_tag += 1 * c_ns_end = cstring_h.strchr(c_tag, c'}') * if c_ns_end is NULL: # <<<<<<<<<<<<<< @@ -36614,7 +36541,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_1 = ((__pyx_v_c_ns_end == NULL) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1673 + /* "src/lxml/apihelpers.pxi":1668 * c_ns_end = cstring_h.strchr(c_tag, c'}') * if c_ns_end is NULL: * raise ValueError, u"Invalid tag name" # <<<<<<<<<<<<<< @@ -36622,9 +36549,9 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py * taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2 */ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Invalid_tag_name, 0, 0); - __PYX_ERR(5, 1673, __pyx_L1_error) + __PYX_ERR(5, 1668, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1672 + /* "src/lxml/apihelpers.pxi":1667 * c_tag += 1 * c_ns_end = cstring_h.strchr(c_tag, c'}') * if c_ns_end is NULL: # <<<<<<<<<<<<<< @@ -36633,7 +36560,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ } - /* "src/lxml/apihelpers.pxi":1674 + /* "src/lxml/apihelpers.pxi":1669 * if c_ns_end is NULL: * raise ValueError, u"Invalid tag name" * nslen = c_ns_end - c_tag # <<<<<<<<<<<<<< @@ -36642,7 +36569,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ __pyx_v_nslen = (__pyx_v_c_ns_end - __pyx_v_c_tag); - /* "src/lxml/apihelpers.pxi":1675 + /* "src/lxml/apihelpers.pxi":1670 * raise ValueError, u"Invalid tag name" * nslen = c_ns_end - c_tag * taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2 # <<<<<<<<<<<<<< @@ -36651,7 +36578,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ __pyx_v_taglen = ((PyBytes_GET_SIZE(__pyx_v_tag) - __pyx_v_nslen) - 2); - /* "src/lxml/apihelpers.pxi":1676 + /* "src/lxml/apihelpers.pxi":1671 * nslen = c_ns_end - c_tag * taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2 * if taglen == 0: # <<<<<<<<<<<<<< @@ -36661,7 +36588,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_1 = ((__pyx_v_taglen == 0) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1677 + /* "src/lxml/apihelpers.pxi":1672 * taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2 * if taglen == 0: * raise ValueError, u"Empty tag name" # <<<<<<<<<<<<<< @@ -36669,9 +36596,9 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py * ns = c_tag[:nslen] */ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Empty_tag_name, 0, 0); - __PYX_ERR(5, 1677, __pyx_L1_error) + __PYX_ERR(5, 1672, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1676 + /* "src/lxml/apihelpers.pxi":1671 * nslen = c_ns_end - c_tag * taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2 * if taglen == 0: # <<<<<<<<<<<<<< @@ -36680,7 +36607,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py */ } - /* "src/lxml/apihelpers.pxi":1678 + /* "src/lxml/apihelpers.pxi":1673 * if taglen == 0: * raise ValueError, u"Empty tag name" * if nslen > 0: # <<<<<<<<<<<<<< @@ -36690,14 +36617,14 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_1 = ((__pyx_v_nslen > 0) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1679 + /* "src/lxml/apihelpers.pxi":1674 * raise ValueError, u"Empty tag name" * if nslen > 0: * ns = c_tag[:nslen] # <<<<<<<<<<<<<< * elif empty_ns: * ns = b'' */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_tag + 0, __pyx_v_nslen - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1679, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_tag + 0, __pyx_v_nslen - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); @@ -36705,7 +36632,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __Pyx_DECREF_SET(__pyx_v_ns, ((PyObject*)__pyx_t_5)); __pyx_t_5 = 0; - /* "src/lxml/apihelpers.pxi":1678 + /* "src/lxml/apihelpers.pxi":1673 * if taglen == 0: * raise ValueError, u"Empty tag name" * if nslen > 0: # <<<<<<<<<<<<<< @@ -36715,7 +36642,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py goto __pyx_L9; } - /* "src/lxml/apihelpers.pxi":1680 + /* "src/lxml/apihelpers.pxi":1675 * if nslen > 0: * ns = c_tag[:nslen] * elif empty_ns: # <<<<<<<<<<<<<< @@ -36725,7 +36652,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_1 = (__pyx_v_empty_ns != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1681 + /* "src/lxml/apihelpers.pxi":1676 * ns = c_tag[:nslen] * elif empty_ns: * ns = b'' # <<<<<<<<<<<<<< @@ -36735,7 +36662,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __Pyx_INCREF(__pyx_kp_b__12); __Pyx_DECREF_SET(__pyx_v_ns, __pyx_kp_b__12); - /* "src/lxml/apihelpers.pxi":1680 + /* "src/lxml/apihelpers.pxi":1675 * if nslen > 0: * ns = c_tag[:nslen] * elif empty_ns: # <<<<<<<<<<<<<< @@ -36745,14 +36672,14 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py } __pyx_L9:; - /* "src/lxml/apihelpers.pxi":1682 + /* "src/lxml/apihelpers.pxi":1677 * elif empty_ns: * ns = b'' * tag = c_ns_end[1:taglen+1] # <<<<<<<<<<<<<< * elif python.PyBytes_GET_SIZE(tag) == 0: * raise ValueError, u"Empty tag name" */ - __pyx_t_5 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_ns_end + 1, (__pyx_v_taglen + 1) - 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1682, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_ns_end + 1, (__pyx_v_taglen + 1) - 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __pyx_t_5; __Pyx_INCREF(__pyx_t_4); @@ -36760,7 +36687,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1669 + /* "src/lxml/apihelpers.pxi":1664 * tag = _utf8(tag) * c_tag = _cstr(tag) * if c_tag[0] == c'{': # <<<<<<<<<<<<<< @@ -36770,7 +36697,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py goto __pyx_L6; } - /* "src/lxml/apihelpers.pxi":1683 + /* "src/lxml/apihelpers.pxi":1678 * ns = b'' * tag = c_ns_end[1:taglen+1] * elif python.PyBytes_GET_SIZE(tag) == 0: # <<<<<<<<<<<<<< @@ -36780,7 +36707,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_1 = ((PyBytes_GET_SIZE(__pyx_v_tag) == 0) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1684 + /* "src/lxml/apihelpers.pxi":1679 * tag = c_ns_end[1:taglen+1] * elif python.PyBytes_GET_SIZE(tag) == 0: * raise ValueError, u"Empty tag name" # <<<<<<<<<<<<<< @@ -36788,9 +36715,9 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py * */ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Empty_tag_name, 0, 0); - __PYX_ERR(5, 1684, __pyx_L1_error) + __PYX_ERR(5, 1679, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1683 + /* "src/lxml/apihelpers.pxi":1678 * ns = b'' * tag = c_ns_end[1:taglen+1] * elif python.PyBytes_GET_SIZE(tag) == 0: # <<<<<<<<<<<<<< @@ -36800,7 +36727,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py } __pyx_L6:; - /* "src/lxml/apihelpers.pxi":1685 + /* "src/lxml/apihelpers.pxi":1680 * elif python.PyBytes_GET_SIZE(tag) == 0: * raise ValueError, u"Empty tag name" * return ns, tag # <<<<<<<<<<<<<< @@ -36808,7 +36735,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py * cdef inline int _pyXmlNameIsValid(name_utf8): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1685, __pyx_L1_error) + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_ns); __Pyx_GIVEREF(__pyx_v_ns); @@ -36820,7 +36747,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py __pyx_t_4 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1658 + /* "src/lxml/apihelpers.pxi":1653 * return __getNsTag(tag, 1) * * cdef tuple __getNsTag(tag, bint empty_ns): # <<<<<<<<<<<<<< @@ -36842,7 +36769,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1687 +/* "src/lxml/apihelpers.pxi":1682 * return ns, tag * * cdef inline int _pyXmlNameIsValid(name_utf8): # <<<<<<<<<<<<<< @@ -36858,7 +36785,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyXmlNameIsValid(PyObject *__pyx_ int __pyx_t_3; __Pyx_RefNannySetupContext("_pyXmlNameIsValid", 0); - /* "src/lxml/apihelpers.pxi":1688 + /* "src/lxml/apihelpers.pxi":1683 * * cdef inline int _pyXmlNameIsValid(name_utf8): * return _xmlNameIsValid(_xcstr(name_utf8)) and b':' not in name_utf8 # <<<<<<<<<<<<<< @@ -36871,13 +36798,13 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyXmlNameIsValid(PyObject *__pyx_ __pyx_t_1 = __pyx_t_2; goto __pyx_L3_bool_binop_done; } - __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__17, __pyx_v_name_utf8, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(5, 1688, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__17, __pyx_v_name_utf8, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(5, 1683, __pyx_L1_error) __pyx_t_1 = __pyx_t_3; __pyx_L3_bool_binop_done:; __pyx_r = __pyx_t_1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1687 + /* "src/lxml/apihelpers.pxi":1682 * return ns, tag * * cdef inline int _pyXmlNameIsValid(name_utf8): # <<<<<<<<<<<<<< @@ -36894,7 +36821,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyXmlNameIsValid(PyObject *__pyx_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1690 +/* "src/lxml/apihelpers.pxi":1685 * return _xmlNameIsValid(_xcstr(name_utf8)) and b':' not in name_utf8 * * cdef inline int _pyHtmlNameIsValid(name_utf8): # <<<<<<<<<<<<<< @@ -36907,7 +36834,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyHtmlNameIsValid(PyObject *__pyx __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_pyHtmlNameIsValid", 0); - /* "src/lxml/apihelpers.pxi":1691 + /* "src/lxml/apihelpers.pxi":1686 * * cdef inline int _pyHtmlNameIsValid(name_utf8): * return _htmlNameIsValid(_xcstr(name_utf8)) # <<<<<<<<<<<<<< @@ -36917,7 +36844,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyHtmlNameIsValid(PyObject *__pyx __pyx_r = __pyx_f_4lxml_5etree__htmlNameIsValid((const xmlChar*)PyBytes_AS_STRING(__pyx_v_name_utf8)); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1690 + /* "src/lxml/apihelpers.pxi":1685 * return _xmlNameIsValid(_xcstr(name_utf8)) and b':' not in name_utf8 * * cdef inline int _pyHtmlNameIsValid(name_utf8): # <<<<<<<<<<<<<< @@ -36931,7 +36858,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyHtmlNameIsValid(PyObject *__pyx return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1693 +/* "src/lxml/apihelpers.pxi":1688 * return _htmlNameIsValid(_xcstr(name_utf8)) * * cdef inline int _xmlNameIsValid(const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -36944,7 +36871,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__xmlNameIsValid(const xmlChar *__p __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_xmlNameIsValid", 0); - /* "src/lxml/apihelpers.pxi":1694 + /* "src/lxml/apihelpers.pxi":1689 * * cdef inline int _xmlNameIsValid(const_xmlChar* c_name): * return tree.xmlValidateNameValue(c_name) # <<<<<<<<<<<<<< @@ -36954,7 +36881,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__xmlNameIsValid(const xmlChar *__p __pyx_r = xmlValidateNameValue(__pyx_v_c_name); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1693 + /* "src/lxml/apihelpers.pxi":1688 * return _htmlNameIsValid(_xcstr(name_utf8)) * * cdef inline int _xmlNameIsValid(const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -36968,7 +36895,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__xmlNameIsValid(const xmlChar *__p return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1696 +/* "src/lxml/apihelpers.pxi":1691 * return tree.xmlValidateNameValue(c_name) * * cdef int _htmlNameIsValid(const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -36983,7 +36910,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) int __pyx_t_2; __Pyx_RefNannySetupContext("_htmlNameIsValid", 0); - /* "src/lxml/apihelpers.pxi":1697 + /* "src/lxml/apihelpers.pxi":1692 * * cdef int _htmlNameIsValid(const_xmlChar* c_name): * if c_name is NULL or c_name[0] == c'\0': # <<<<<<<<<<<<<< @@ -37001,7 +36928,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1698 + /* "src/lxml/apihelpers.pxi":1693 * cdef int _htmlNameIsValid(const_xmlChar* c_name): * if c_name is NULL or c_name[0] == c'\0': * return 0 # <<<<<<<<<<<<<< @@ -37011,7 +36938,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1697 + /* "src/lxml/apihelpers.pxi":1692 * * cdef int _htmlNameIsValid(const_xmlChar* c_name): * if c_name is NULL or c_name[0] == c'\0': # <<<<<<<<<<<<<< @@ -37020,7 +36947,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) */ } - /* "src/lxml/apihelpers.pxi":1699 + /* "src/lxml/apihelpers.pxi":1694 * if c_name is NULL or c_name[0] == c'\0': * return 0 * while c_name[0] != c'\0': # <<<<<<<<<<<<<< @@ -37031,7 +36958,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) __pyx_t_1 = (((__pyx_v_c_name[0]) != '\x00') != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1700 + /* "src/lxml/apihelpers.pxi":1695 * return 0 * while c_name[0] != c'\0': * if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ': # <<<<<<<<<<<<<< @@ -37052,7 +36979,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) case '<': case '>': - /* "src/lxml/apihelpers.pxi":1701 + /* "src/lxml/apihelpers.pxi":1696 * while c_name[0] != c'\0': * if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ': * return 0 # <<<<<<<<<<<<<< @@ -37062,7 +36989,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1700 + /* "src/lxml/apihelpers.pxi":1695 * return 0 * while c_name[0] != c'\0': * if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ': # <<<<<<<<<<<<<< @@ -37073,7 +37000,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) default: break; } - /* "src/lxml/apihelpers.pxi":1702 + /* "src/lxml/apihelpers.pxi":1697 * if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ': * return 0 * c_name += 1 # <<<<<<<<<<<<<< @@ -37083,7 +37010,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) __pyx_v_c_name = (__pyx_v_c_name + 1); } - /* "src/lxml/apihelpers.pxi":1703 + /* "src/lxml/apihelpers.pxi":1698 * return 0 * c_name += 1 * return 1 # <<<<<<<<<<<<<< @@ -37093,7 +37020,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1696 + /* "src/lxml/apihelpers.pxi":1691 * return tree.xmlValidateNameValue(c_name) * * cdef int _htmlNameIsValid(const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -37107,7 +37034,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name) return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1705 +/* "src/lxml/apihelpers.pxi":1700 * return 1 * * cdef bint _characterReferenceIsValid(const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -37123,7 +37050,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ int __pyx_t_2; __Pyx_RefNannySetupContext("_characterReferenceIsValid", 0); - /* "src/lxml/apihelpers.pxi":1707 + /* "src/lxml/apihelpers.pxi":1702 * cdef bint _characterReferenceIsValid(const_xmlChar* c_name): * cdef bint is_hex * if c_name[0] == c'x': # <<<<<<<<<<<<<< @@ -37133,7 +37060,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_t_1 = (((__pyx_v_c_name[0]) == 'x') != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1708 + /* "src/lxml/apihelpers.pxi":1703 * cdef bint is_hex * if c_name[0] == c'x': * c_name += 1 # <<<<<<<<<<<<<< @@ -37142,7 +37069,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ __pyx_v_c_name = (__pyx_v_c_name + 1); - /* "src/lxml/apihelpers.pxi":1709 + /* "src/lxml/apihelpers.pxi":1704 * if c_name[0] == c'x': * c_name += 1 * is_hex = 1 # <<<<<<<<<<<<<< @@ -37151,7 +37078,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ __pyx_v_is_hex = 1; - /* "src/lxml/apihelpers.pxi":1707 + /* "src/lxml/apihelpers.pxi":1702 * cdef bint _characterReferenceIsValid(const_xmlChar* c_name): * cdef bint is_hex * if c_name[0] == c'x': # <<<<<<<<<<<<<< @@ -37161,7 +37088,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ goto __pyx_L3; } - /* "src/lxml/apihelpers.pxi":1711 + /* "src/lxml/apihelpers.pxi":1706 * is_hex = 1 * else: * is_hex = 0 # <<<<<<<<<<<<<< @@ -37173,7 +37100,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ } __pyx_L3:; - /* "src/lxml/apihelpers.pxi":1712 + /* "src/lxml/apihelpers.pxi":1707 * else: * is_hex = 0 * if c_name[0] == c'\0': # <<<<<<<<<<<<<< @@ -37183,7 +37110,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_t_1 = (((__pyx_v_c_name[0]) == '\x00') != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1713 + /* "src/lxml/apihelpers.pxi":1708 * is_hex = 0 * if c_name[0] == c'\0': * return 0 # <<<<<<<<<<<<<< @@ -37193,7 +37120,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1712 + /* "src/lxml/apihelpers.pxi":1707 * else: * is_hex = 0 * if c_name[0] == c'\0': # <<<<<<<<<<<<<< @@ -37202,7 +37129,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ } - /* "src/lxml/apihelpers.pxi":1714 + /* "src/lxml/apihelpers.pxi":1709 * if c_name[0] == c'\0': * return 0 * while c_name[0] != c'\0': # <<<<<<<<<<<<<< @@ -37213,7 +37140,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_t_1 = (((__pyx_v_c_name[0]) != '\x00') != 0); if (!__pyx_t_1) break; - /* "src/lxml/apihelpers.pxi":1715 + /* "src/lxml/apihelpers.pxi":1710 * return 0 * while c_name[0] != c'\0': * if c_name[0] < c'0' or c_name[0] > c'9': # <<<<<<<<<<<<<< @@ -37231,7 +37158,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_L8_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1716 + /* "src/lxml/apihelpers.pxi":1711 * while c_name[0] != c'\0': * if c_name[0] < c'0' or c_name[0] > c'9': * if not is_hex: # <<<<<<<<<<<<<< @@ -37241,7 +37168,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_t_1 = ((!(__pyx_v_is_hex != 0)) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1717 + /* "src/lxml/apihelpers.pxi":1712 * if c_name[0] < c'0' or c_name[0] > c'9': * if not is_hex: * return 0 # <<<<<<<<<<<<<< @@ -37251,7 +37178,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1716 + /* "src/lxml/apihelpers.pxi":1711 * while c_name[0] != c'\0': * if c_name[0] < c'0' or c_name[0] > c'9': * if not is_hex: # <<<<<<<<<<<<<< @@ -37260,7 +37187,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ } - /* "src/lxml/apihelpers.pxi":1718 + /* "src/lxml/apihelpers.pxi":1713 * if not is_hex: * return 0 * if not (c'a' <= c_name[0] <= c'f'): # <<<<<<<<<<<<<< @@ -37274,7 +37201,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); if (__pyx_t_2) { - /* "src/lxml/apihelpers.pxi":1719 + /* "src/lxml/apihelpers.pxi":1714 * return 0 * if not (c'a' <= c_name[0] <= c'f'): * if not (c'A' <= c_name[0] <= c'F'): # <<<<<<<<<<<<<< @@ -37288,7 +37215,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1720 + /* "src/lxml/apihelpers.pxi":1715 * if not (c'a' <= c_name[0] <= c'f'): * if not (c'A' <= c_name[0] <= c'F'): * return 0 # <<<<<<<<<<<<<< @@ -37298,7 +37225,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1719 + /* "src/lxml/apihelpers.pxi":1714 * return 0 * if not (c'a' <= c_name[0] <= c'f'): * if not (c'A' <= c_name[0] <= c'F'): # <<<<<<<<<<<<<< @@ -37307,7 +37234,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ } - /* "src/lxml/apihelpers.pxi":1718 + /* "src/lxml/apihelpers.pxi":1713 * if not is_hex: * return 0 * if not (c'a' <= c_name[0] <= c'f'): # <<<<<<<<<<<<<< @@ -37316,7 +37243,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ } - /* "src/lxml/apihelpers.pxi":1715 + /* "src/lxml/apihelpers.pxi":1710 * return 0 * while c_name[0] != c'\0': * if c_name[0] < c'0' or c_name[0] > c'9': # <<<<<<<<<<<<<< @@ -37325,7 +37252,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ */ } - /* "src/lxml/apihelpers.pxi":1721 + /* "src/lxml/apihelpers.pxi":1716 * if not (c'A' <= c_name[0] <= c'F'): * return 0 * c_name += 1 # <<<<<<<<<<<<<< @@ -37335,7 +37262,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_v_c_name = (__pyx_v_c_name + 1); } - /* "src/lxml/apihelpers.pxi":1722 + /* "src/lxml/apihelpers.pxi":1717 * return 0 * c_name += 1 * return 1 # <<<<<<<<<<<<<< @@ -37345,7 +37272,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ __pyx_r = 1; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1705 + /* "src/lxml/apihelpers.pxi":1700 * return 1 * * cdef bint _characterReferenceIsValid(const_xmlChar* c_name): # <<<<<<<<<<<<<< @@ -37359,7 +37286,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1724 +/* "src/lxml/apihelpers.pxi":1719 * return 1 * * cdef int _tagValidOrRaise(tag_utf) except -1: # <<<<<<<<<<<<<< @@ -37375,7 +37302,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) { PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("_tagValidOrRaise", 0); - /* "src/lxml/apihelpers.pxi":1725 + /* "src/lxml/apihelpers.pxi":1720 * * cdef int _tagValidOrRaise(tag_utf) except -1: * if not _pyXmlNameIsValid(tag_utf): # <<<<<<<<<<<<<< @@ -37385,7 +37312,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) { __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyXmlNameIsValid(__pyx_v_tag_utf) != 0)) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1726 + /* "src/lxml/apihelpers.pxi":1721 * cdef int _tagValidOrRaise(tag_utf) except -1: * if not _pyXmlNameIsValid(tag_utf): * raise ValueError(f"Invalid tag name {(tag_utf).decode('utf8')!r}") # <<<<<<<<<<<<<< @@ -37394,24 +37321,24 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) { */ if (unlikely(__pyx_v_tag_utf == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1726, __pyx_L1_error) + __PYX_ERR(5, 1721, __pyx_L1_error) } - __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1726, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1726, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_tag_name_2, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1726, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_tag_name_2, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1726, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(5, 1726, __pyx_L1_error) + __PYX_ERR(5, 1721, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1725 + /* "src/lxml/apihelpers.pxi":1720 * * cdef int _tagValidOrRaise(tag_utf) except -1: * if not _pyXmlNameIsValid(tag_utf): # <<<<<<<<<<<<<< @@ -37420,7 +37347,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) { */ } - /* "src/lxml/apihelpers.pxi":1727 + /* "src/lxml/apihelpers.pxi":1722 * if not _pyXmlNameIsValid(tag_utf): * raise ValueError(f"Invalid tag name {(tag_utf).decode('utf8')!r}") * return 0 # <<<<<<<<<<<<<< @@ -37430,7 +37357,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1724 + /* "src/lxml/apihelpers.pxi":1719 * return 1 * * cdef int _tagValidOrRaise(tag_utf) except -1: # <<<<<<<<<<<<<< @@ -37449,7 +37376,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1729 +/* "src/lxml/apihelpers.pxi":1724 * return 0 * * cdef int _htmlTagValidOrRaise(tag_utf) except -1: # <<<<<<<<<<<<<< @@ -37465,7 +37392,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf) PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("_htmlTagValidOrRaise", 0); - /* "src/lxml/apihelpers.pxi":1730 + /* "src/lxml/apihelpers.pxi":1725 * * cdef int _htmlTagValidOrRaise(tag_utf) except -1: * if not _pyHtmlNameIsValid(tag_utf): # <<<<<<<<<<<<<< @@ -37475,7 +37402,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf) __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyHtmlNameIsValid(__pyx_v_tag_utf) != 0)) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1731 + /* "src/lxml/apihelpers.pxi":1726 * cdef int _htmlTagValidOrRaise(tag_utf) except -1: * if not _pyHtmlNameIsValid(tag_utf): * raise ValueError(f"Invalid HTML tag name {(tag_utf).decode('utf8')!r}") # <<<<<<<<<<<<<< @@ -37484,24 +37411,24 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf) */ if (unlikely(__pyx_v_tag_utf == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1731, __pyx_L1_error) + __PYX_ERR(5, 1726, __pyx_L1_error) } - __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1731, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1731, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_HTML_tag_name, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1731, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_HTML_tag_name, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1731, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(5, 1731, __pyx_L1_error) + __PYX_ERR(5, 1726, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1730 + /* "src/lxml/apihelpers.pxi":1725 * * cdef int _htmlTagValidOrRaise(tag_utf) except -1: * if not _pyHtmlNameIsValid(tag_utf): # <<<<<<<<<<<<<< @@ -37510,7 +37437,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf) */ } - /* "src/lxml/apihelpers.pxi":1732 + /* "src/lxml/apihelpers.pxi":1727 * if not _pyHtmlNameIsValid(tag_utf): * raise ValueError(f"Invalid HTML tag name {(tag_utf).decode('utf8')!r}") * return 0 # <<<<<<<<<<<<<< @@ -37520,7 +37447,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf) __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1729 + /* "src/lxml/apihelpers.pxi":1724 * return 0 * * cdef int _htmlTagValidOrRaise(tag_utf) except -1: # <<<<<<<<<<<<<< @@ -37539,7 +37466,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf) return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1734 +/* "src/lxml/apihelpers.pxi":1729 * return 0 * * cdef int _attributeValidOrRaise(name_utf) except -1: # <<<<<<<<<<<<<< @@ -37555,7 +37482,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("_attributeValidOrRaise", 0); - /* "src/lxml/apihelpers.pxi":1735 + /* "src/lxml/apihelpers.pxi":1730 * * cdef int _attributeValidOrRaise(name_utf) except -1: * if not _pyXmlNameIsValid(name_utf): # <<<<<<<<<<<<<< @@ -37565,7 +37492,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyXmlNameIsValid(__pyx_v_name_utf) != 0)) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1736 + /* "src/lxml/apihelpers.pxi":1731 * cdef int _attributeValidOrRaise(name_utf) except -1: * if not _pyXmlNameIsValid(name_utf): * raise ValueError(f"Invalid attribute name {(name_utf).decode('utf8')!r}") # <<<<<<<<<<<<<< @@ -37574,24 +37501,24 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut */ if (unlikely(__pyx_v_name_utf == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1736, __pyx_L1_error) + __PYX_ERR(5, 1731, __pyx_L1_error) } - __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_name_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1736, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_name_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1736, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_attribute_name, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1736, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_attribute_name, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1736, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(5, 1736, __pyx_L1_error) + __PYX_ERR(5, 1731, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1735 + /* "src/lxml/apihelpers.pxi":1730 * * cdef int _attributeValidOrRaise(name_utf) except -1: * if not _pyXmlNameIsValid(name_utf): # <<<<<<<<<<<<<< @@ -37600,7 +37527,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut */ } - /* "src/lxml/apihelpers.pxi":1737 + /* "src/lxml/apihelpers.pxi":1732 * if not _pyXmlNameIsValid(name_utf): * raise ValueError(f"Invalid attribute name {(name_utf).decode('utf8')!r}") * return 0 # <<<<<<<<<<<<<< @@ -37610,7 +37537,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1734 + /* "src/lxml/apihelpers.pxi":1729 * return 0 * * cdef int _attributeValidOrRaise(name_utf) except -1: # <<<<<<<<<<<<<< @@ -37629,7 +37556,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1739 +/* "src/lxml/apihelpers.pxi":1734 * return 0 * * cdef int _prefixValidOrRaise(tag_utf) except -1: # <<<<<<<<<<<<<< @@ -37645,7 +37572,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) { PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("_prefixValidOrRaise", 0); - /* "src/lxml/apihelpers.pxi":1740 + /* "src/lxml/apihelpers.pxi":1735 * * cdef int _prefixValidOrRaise(tag_utf) except -1: * if not _pyXmlNameIsValid(tag_utf): # <<<<<<<<<<<<<< @@ -37655,7 +37582,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) { __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyXmlNameIsValid(__pyx_v_tag_utf) != 0)) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1741 + /* "src/lxml/apihelpers.pxi":1736 * cdef int _prefixValidOrRaise(tag_utf) except -1: * if not _pyXmlNameIsValid(tag_utf): * raise ValueError(f"Invalid namespace prefix {(tag_utf).decode('utf8')!r}") # <<<<<<<<<<<<<< @@ -37664,24 +37591,24 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) { */ if (unlikely(__pyx_v_tag_utf == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1741, __pyx_L1_error) + __PYX_ERR(5, 1736, __pyx_L1_error) } - __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1741, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1741, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_namespace_prefix, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1741, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_namespace_prefix, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1741, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(5, 1741, __pyx_L1_error) + __PYX_ERR(5, 1736, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1740 + /* "src/lxml/apihelpers.pxi":1735 * * cdef int _prefixValidOrRaise(tag_utf) except -1: * if not _pyXmlNameIsValid(tag_utf): # <<<<<<<<<<<<<< @@ -37690,7 +37617,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) { */ } - /* "src/lxml/apihelpers.pxi":1742 + /* "src/lxml/apihelpers.pxi":1737 * if not _pyXmlNameIsValid(tag_utf): * raise ValueError(f"Invalid namespace prefix {(tag_utf).decode('utf8')!r}") * return 0 # <<<<<<<<<<<<<< @@ -37700,7 +37627,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1739 + /* "src/lxml/apihelpers.pxi":1734 * return 0 * * cdef int _prefixValidOrRaise(tag_utf) except -1: # <<<<<<<<<<<<<< @@ -37719,7 +37646,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1744 +/* "src/lxml/apihelpers.pxi":1739 * return 0 * * cdef int _uriValidOrRaise(uri_utf) except -1: # <<<<<<<<<<<<<< @@ -37736,7 +37663,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("_uriValidOrRaise", 0); - /* "src/lxml/apihelpers.pxi":1745 + /* "src/lxml/apihelpers.pxi":1740 * * cdef int _uriValidOrRaise(uri_utf) except -1: * cdef uri.xmlURI* c_uri = uri.xmlParseURI(_cstr(uri_utf)) # <<<<<<<<<<<<<< @@ -37745,7 +37672,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { */ __pyx_v_c_uri = xmlParseURI(PyBytes_AS_STRING(__pyx_v_uri_utf)); - /* "src/lxml/apihelpers.pxi":1746 + /* "src/lxml/apihelpers.pxi":1741 * cdef int _uriValidOrRaise(uri_utf) except -1: * cdef uri.xmlURI* c_uri = uri.xmlParseURI(_cstr(uri_utf)) * if c_uri is NULL: # <<<<<<<<<<<<<< @@ -37755,7 +37682,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { __pyx_t_1 = ((__pyx_v_c_uri == NULL) != 0); if (unlikely(__pyx_t_1)) { - /* "src/lxml/apihelpers.pxi":1747 + /* "src/lxml/apihelpers.pxi":1742 * cdef uri.xmlURI* c_uri = uri.xmlParseURI(_cstr(uri_utf)) * if c_uri is NULL: * raise ValueError(f"Invalid namespace URI {(uri_utf).decode('utf8')!r}") # <<<<<<<<<<<<<< @@ -37764,24 +37691,24 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { */ if (unlikely(__pyx_v_uri_utf == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1747, __pyx_L1_error) + __PYX_ERR(5, 1742, __pyx_L1_error) } - __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_uri_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1747, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_uri_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1747, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_namespace_URI, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1747, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_namespace_URI, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1747, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(5, 1747, __pyx_L1_error) + __PYX_ERR(5, 1742, __pyx_L1_error) - /* "src/lxml/apihelpers.pxi":1746 + /* "src/lxml/apihelpers.pxi":1741 * cdef int _uriValidOrRaise(uri_utf) except -1: * cdef uri.xmlURI* c_uri = uri.xmlParseURI(_cstr(uri_utf)) * if c_uri is NULL: # <<<<<<<<<<<<<< @@ -37790,7 +37717,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { */ } - /* "src/lxml/apihelpers.pxi":1748 + /* "src/lxml/apihelpers.pxi":1743 * if c_uri is NULL: * raise ValueError(f"Invalid namespace URI {(uri_utf).decode('utf8')!r}") * uri.xmlFreeURI(c_uri) # <<<<<<<<<<<<<< @@ -37799,7 +37726,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { */ xmlFreeURI(__pyx_v_c_uri); - /* "src/lxml/apihelpers.pxi":1749 + /* "src/lxml/apihelpers.pxi":1744 * raise ValueError(f"Invalid namespace URI {(uri_utf).decode('utf8')!r}") * uri.xmlFreeURI(c_uri) * return 0 # <<<<<<<<<<<<<< @@ -37809,7 +37736,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { __pyx_r = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1744 + /* "src/lxml/apihelpers.pxi":1739 * return 0 * * cdef int _uriValidOrRaise(uri_utf) except -1: # <<<<<<<<<<<<<< @@ -37828,7 +37755,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) { return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1751 +/* "src/lxml/apihelpers.pxi":1746 * return 0 * * cdef inline object _namespacedName(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -37842,7 +37769,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__namespacedName(xmlNode *__p PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("_namespacedName", 0); - /* "src/lxml/apihelpers.pxi":1752 + /* "src/lxml/apihelpers.pxi":1747 * * cdef inline object _namespacedName(xmlNode* c_node): * return _namespacedNameFromNsName(_getNs(c_node), c_node.name) # <<<<<<<<<<<<<< @@ -37850,13 +37777,13 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__namespacedName(xmlNode *__p * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_4lxml_5etree__namespacedNameFromNsName(_getNs(__pyx_v_c_node), __pyx_v_c_node->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1752, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4lxml_5etree__namespacedNameFromNsName(_getNs(__pyx_v_c_node), __pyx_v_c_node->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1751 + /* "src/lxml/apihelpers.pxi":1746 * return 0 * * cdef inline object _namespacedName(xmlNode* c_node): # <<<<<<<<<<<<<< @@ -37875,7 +37802,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__namespacedName(xmlNode *__p return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1754 +/* "src/lxml/apihelpers.pxi":1749 * return _namespacedNameFromNsName(_getNs(c_node), c_node.name) * * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name): # <<<<<<<<<<<<<< @@ -37894,7 +37821,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ Py_ssize_t __pyx_t_5; __Pyx_RefNannySetupContext("_namespacedNameFromNsName", 0); - /* "src/lxml/apihelpers.pxi":1755 + /* "src/lxml/apihelpers.pxi":1750 * * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name): * if href is NULL: # <<<<<<<<<<<<<< @@ -37904,7 +37831,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ __pyx_t_1 = ((__pyx_v_href == NULL) != 0); if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1756 + /* "src/lxml/apihelpers.pxi":1751 * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name): * if href is NULL: * return funicode(name) # <<<<<<<<<<<<<< @@ -37912,13 +37839,13 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ * return python.PyUnicode_FromFormat("{%s}%s", href, name) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1756, __pyx_L1_error) + __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1751, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1755 + /* "src/lxml/apihelpers.pxi":1750 * * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name): * if href is NULL: # <<<<<<<<<<<<<< @@ -37927,7 +37854,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ */ } - /* "src/lxml/apihelpers.pxi":1757 + /* "src/lxml/apihelpers.pxi":1752 * if href is NULL: * return funicode(name) * elif not python.IS_PYPY and (python.LXML_UNICODE_STRINGS or isutf8(name) or isutf8(href)): # <<<<<<<<<<<<<< @@ -37957,7 +37884,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1758 + /* "src/lxml/apihelpers.pxi":1753 * return funicode(name) * elif not python.IS_PYPY and (python.LXML_UNICODE_STRINGS or isutf8(name) or isutf8(href)): * return python.PyUnicode_FromFormat("{%s}%s", href, name) # <<<<<<<<<<<<<< @@ -37965,13 +37892,13 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ * s = python.PyBytes_FromFormat("{%s}%s", href, name) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyUnicode_FromFormat(((char *)"{%s}%s"), __pyx_v_href, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1758, __pyx_L1_error) + __pyx_t_2 = PyUnicode_FromFormat(((char *)"{%s}%s"), __pyx_v_href, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1757 + /* "src/lxml/apihelpers.pxi":1752 * if href is NULL: * return funicode(name) * elif not python.IS_PYPY and (python.LXML_UNICODE_STRINGS or isutf8(name) or isutf8(href)): # <<<<<<<<<<<<<< @@ -37980,7 +37907,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ */ } - /* "src/lxml/apihelpers.pxi":1760 + /* "src/lxml/apihelpers.pxi":1755 * return python.PyUnicode_FromFormat("{%s}%s", href, name) * else: * s = python.PyBytes_FromFormat("{%s}%s", href, name) # <<<<<<<<<<<<<< @@ -37988,12 +37915,12 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ * return (s).decode('utf8') */ /*else*/ { - __pyx_t_2 = PyBytes_FromFormat(((char *)"{%s}%s"), __pyx_v_href, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1760, __pyx_L1_error) + __pyx_t_2 = PyBytes_FromFormat(((char *)"{%s}%s"), __pyx_v_href, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_s = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "src/lxml/apihelpers.pxi":1761 + /* "src/lxml/apihelpers.pxi":1756 * else: * s = python.PyBytes_FromFormat("{%s}%s", href, name) * if python.IS_PYPY and (python.LXML_UNICODE_STRINGS or isutf8l(s, len(s))): # <<<<<<<<<<<<<< @@ -38014,20 +37941,20 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ } if (unlikely(__pyx_v_s == Py_None)) { PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); - __PYX_ERR(5, 1761, __pyx_L1_error) + __PYX_ERR(5, 1756, __pyx_L1_error) } - __pyx_t_4 = __Pyx_PyBytes_AsUString(__pyx_v_s); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(5, 1761, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_AsUString(__pyx_v_s); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(5, 1756, __pyx_L1_error) if (unlikely(__pyx_v_s == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(5, 1761, __pyx_L1_error) + __PYX_ERR(5, 1756, __pyx_L1_error) } - __pyx_t_5 = PyBytes_GET_SIZE(__pyx_v_s); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1761, __pyx_L1_error) + __pyx_t_5 = PyBytes_GET_SIZE(__pyx_v_s); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 1756, __pyx_L1_error) __pyx_t_3 = (__pyx_f_4lxml_5etree_isutf8l(__pyx_t_4, __pyx_t_5) != 0); __pyx_t_1 = __pyx_t_3; __pyx_L9_bool_binop_done:; if (__pyx_t_1) { - /* "src/lxml/apihelpers.pxi":1762 + /* "src/lxml/apihelpers.pxi":1757 * s = python.PyBytes_FromFormat("{%s}%s", href, name) * if python.IS_PYPY and (python.LXML_UNICODE_STRINGS or isutf8l(s, len(s))): * return (s).decode('utf8') # <<<<<<<<<<<<<< @@ -38037,15 +37964,15 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ __Pyx_XDECREF(__pyx_r); if (unlikely(__pyx_v_s == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(5, 1762, __pyx_L1_error) + __PYX_ERR(5, 1757, __pyx_L1_error) } - __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_s), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1762, __pyx_L1_error) + __pyx_t_2 = __Pyx_decode_bytes(((PyObject*)__pyx_v_s), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1761 + /* "src/lxml/apihelpers.pxi":1756 * else: * s = python.PyBytes_FromFormat("{%s}%s", href, name) * if python.IS_PYPY and (python.LXML_UNICODE_STRINGS or isutf8l(s, len(s))): # <<<<<<<<<<<<<< @@ -38054,7 +37981,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ */ } - /* "src/lxml/apihelpers.pxi":1764 + /* "src/lxml/apihelpers.pxi":1759 * return (s).decode('utf8') * else: * return s # <<<<<<<<<<<<<< @@ -38069,7 +37996,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ } } - /* "src/lxml/apihelpers.pxi":1754 + /* "src/lxml/apihelpers.pxi":1749 * return _namespacedNameFromNsName(_getNs(c_node), c_node.name) * * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name): # <<<<<<<<<<<<<< @@ -38089,7 +38016,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_ return __pyx_r; } -/* "src/lxml/apihelpers.pxi":1766 +/* "src/lxml/apihelpers.pxi":1761 * return s * * cdef _getFilenameForFile(source): # <<<<<<<<<<<<<< @@ -38110,7 +38037,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour int __pyx_t_7; __Pyx_RefNannySetupContext("_getFilenameForFile", 0); - /* "src/lxml/apihelpers.pxi":1772 + /* "src/lxml/apihelpers.pxi":1767 * """ * # urllib2 provides a geturl() method * try: # <<<<<<<<<<<<<< @@ -38126,7 +38053,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1773 + /* "src/lxml/apihelpers.pxi":1768 * # urllib2 provides a geturl() method * try: * return source.geturl() # <<<<<<<<<<<<<< @@ -38134,7 +38061,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour * pass */ __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_geturl); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1773, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_geturl); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1768, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { @@ -38148,14 +38075,14 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour } __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1773, __pyx_L3_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1768, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L7_try_return; - /* "src/lxml/apihelpers.pxi":1772 + /* "src/lxml/apihelpers.pxi":1767 * """ * # urllib2 provides a geturl() method * try: # <<<<<<<<<<<<<< @@ -38168,7 +38095,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "src/lxml/apihelpers.pxi":1774 + /* "src/lxml/apihelpers.pxi":1769 * try: * return source.geturl() * except: # <<<<<<<<<<<<<< @@ -38181,7 +38108,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour } __pyx_L7_try_return:; - /* "src/lxml/apihelpers.pxi":1772 + /* "src/lxml/apihelpers.pxi":1767 * """ * # urllib2 provides a geturl() method * try: # <<<<<<<<<<<<<< @@ -38200,7 +38127,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); } - /* "src/lxml/apihelpers.pxi":1777 + /* "src/lxml/apihelpers.pxi":1772 * pass * # file instances have a name attribute * try: # <<<<<<<<<<<<<< @@ -38216,19 +38143,19 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_XGOTREF(__pyx_t_1); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1778 + /* "src/lxml/apihelpers.pxi":1773 * # file instances have a name attribute * try: * filename = source.name # <<<<<<<<<<<<<< * if _isString(filename): * return os_path_abspath(filename) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_name_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1778, __pyx_L9_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_name_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1773, __pyx_L9_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_filename = __pyx_t_4; __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1779 + /* "src/lxml/apihelpers.pxi":1774 * try: * filename = source.name * if _isString(filename): # <<<<<<<<<<<<<< @@ -38238,7 +38165,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __pyx_t_7 = (_isString(__pyx_v_filename) != 0); if (__pyx_t_7) { - /* "src/lxml/apihelpers.pxi":1780 + /* "src/lxml/apihelpers.pxi":1775 * filename = source.name * if _isString(filename): * return os_path_abspath(filename) # <<<<<<<<<<<<<< @@ -38259,14 +38186,14 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour } __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_filename); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1780, __pyx_L9_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1775, __pyx_L9_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L13_try_return; - /* "src/lxml/apihelpers.pxi":1779 + /* "src/lxml/apihelpers.pxi":1774 * try: * filename = source.name * if _isString(filename): # <<<<<<<<<<<<<< @@ -38275,7 +38202,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour */ } - /* "src/lxml/apihelpers.pxi":1777 + /* "src/lxml/apihelpers.pxi":1772 * pass * # file instances have a name attribute * try: # <<<<<<<<<<<<<< @@ -38292,7 +38219,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "src/lxml/apihelpers.pxi":1781 + /* "src/lxml/apihelpers.pxi":1776 * if _isString(filename): * return os_path_abspath(filename) * except: # <<<<<<<<<<<<<< @@ -38305,7 +38232,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour } __pyx_L13_try_return:; - /* "src/lxml/apihelpers.pxi":1777 + /* "src/lxml/apihelpers.pxi":1772 * pass * # file instances have a name attribute * try: # <<<<<<<<<<<<<< @@ -38325,7 +38252,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __pyx_L14_try_end:; } - /* "src/lxml/apihelpers.pxi":1784 + /* "src/lxml/apihelpers.pxi":1779 * pass * # gzip file instances have a filename attribute (before Py3k) * try: # <<<<<<<<<<<<<< @@ -38341,19 +38268,19 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "src/lxml/apihelpers.pxi":1785 + /* "src/lxml/apihelpers.pxi":1780 * # gzip file instances have a filename attribute (before Py3k) * try: * filename = source.filename # <<<<<<<<<<<<<< * if _isString(filename): * return os_path_abspath(filename) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1785, __pyx_L16_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1780, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_filename, __pyx_t_4); __pyx_t_4 = 0; - /* "src/lxml/apihelpers.pxi":1786 + /* "src/lxml/apihelpers.pxi":1781 * try: * filename = source.filename * if _isString(filename): # <<<<<<<<<<<<<< @@ -38363,7 +38290,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __pyx_t_7 = (_isString(__pyx_v_filename) != 0); if (__pyx_t_7) { - /* "src/lxml/apihelpers.pxi":1787 + /* "src/lxml/apihelpers.pxi":1782 * filename = source.filename * if _isString(filename): * return os_path_abspath(filename) # <<<<<<<<<<<<<< @@ -38384,14 +38311,14 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour } __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_filename); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1787, __pyx_L16_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1782, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L20_try_return; - /* "src/lxml/apihelpers.pxi":1786 + /* "src/lxml/apihelpers.pxi":1781 * try: * filename = source.filename * if _isString(filename): # <<<<<<<<<<<<<< @@ -38400,7 +38327,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour */ } - /* "src/lxml/apihelpers.pxi":1784 + /* "src/lxml/apihelpers.pxi":1779 * pass * # gzip file instances have a filename attribute (before Py3k) * try: # <<<<<<<<<<<<<< @@ -38417,7 +38344,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "src/lxml/apihelpers.pxi":1788 + /* "src/lxml/apihelpers.pxi":1783 * if _isString(filename): * return os_path_abspath(filename) * except: # <<<<<<<<<<<<<< @@ -38430,7 +38357,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour } __pyx_L20_try_return:; - /* "src/lxml/apihelpers.pxi":1784 + /* "src/lxml/apihelpers.pxi":1779 * pass * # gzip file instances have a filename attribute (before Py3k) * try: # <<<<<<<<<<<<<< @@ -38450,7 +38377,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __pyx_L21_try_end:; } - /* "src/lxml/apihelpers.pxi":1791 + /* "src/lxml/apihelpers.pxi":1786 * pass * # can't determine filename * return None # <<<<<<<<<<<<<< @@ -38459,7 +38386,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "src/lxml/apihelpers.pxi":1766 + /* "src/lxml/apihelpers.pxi":1761 * return s * * cdef _getFilenameForFile(source): # <<<<<<<<<<<<<< @@ -239839,14 +239766,14 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(4, 234, __pyx_L1_error) __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(5, 19, __pyx_L1_error) __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(5, 41, __pyx_L1_error) - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(5, 413, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(5, 408, __pyx_L1_error) #if PY_MAJOR_VERSION >= 3 - __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) __PYX_ERR(5, 1033, __pyx_L1_error) + __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) __PYX_ERR(5, 1028, __pyx_L1_error) #else - __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) __PYX_ERR(5, 1033, __pyx_L1_error) + __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) __PYX_ERR(5, 1028, __pyx_L1_error) #endif - __pyx_builtin_UnicodeEncodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeEncodeError); if (!__pyx_builtin_UnicodeEncodeError) __PYX_ERR(5, 1590, __pyx_L1_error) - __pyx_builtin_UnicodeDecodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeDecodeError); if (!__pyx_builtin_UnicodeDecodeError) __PYX_ERR(5, 1608, __pyx_L1_error) + __pyx_builtin_UnicodeEncodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeEncodeError); if (!__pyx_builtin_UnicodeEncodeError) __PYX_ERR(5, 1585, __pyx_L1_error) + __pyx_builtin_UnicodeDecodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeDecodeError); if (!__pyx_builtin_UnicodeDecodeError) __PYX_ERR(5, 1603, __pyx_L1_error) __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 315, __pyx_L1_error) __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 745, __pyx_L1_error) __pyx_builtin_FutureWarning = __Pyx_GetBuiltinName(__pyx_n_s_FutureWarning); if (!__pyx_builtin_FutureWarning) __PYX_ERR(0, 1177, __pyx_L1_error) @@ -239950,47 +239877,47 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); - /* "src/lxml/apihelpers.pxi":1333 + /* "src/lxml/apihelpers.pxi":1328 * # prevent cycles * if _isAncestorOrSame(c_node, parent._c_node): * raise ValueError("cannot append parent to itself") # <<<<<<<<<<<<<< * # store possible text node * c_next = c_node.next */ - __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_cannot_append_parent_to_itself); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(5, 1333, __pyx_L1_error) + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_cannot_append_parent_to_itself); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(5, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__13); __Pyx_GIVEREF(__pyx_tuple__13); - /* "src/lxml/apihelpers.pxi":1387 + /* "src/lxml/apihelpers.pxi":1382 * if element._c_node is c_node: * return 0 # nothing to do * raise ValueError("cannot add ancestor as sibling, please break cycle first") # <<<<<<<<<<<<<< * # store possible text node * c_next = c_node.next */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_cannot_add_ancestor_as_sibling_p); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(5, 1387, __pyx_L1_error) + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_cannot_add_ancestor_as_sibling_p); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(5, 1382, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); - /* "src/lxml/apihelpers.pxi":1532 + /* "src/lxml/apihelpers.pxi":1527 * raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__) * if not valid: * raise ValueError( # <<<<<<<<<<<<<< * "All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters") * return utf8_string */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_All_strings_must_be_XML_compatib); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(5, 1532, __pyx_L1_error) + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_All_strings_must_be_XML_compatib); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(5, 1527, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); - /* "src/lxml/apihelpers.pxi":1594 + /* "src/lxml/apihelpers.pxi":1589 * return filename8 * else: * raise TypeError("Argument must be string or unicode.") # <<<<<<<<<<<<<< * * cdef object _decodeFilename(const_xmlChar* c_path): */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Argument_must_be_string_or_unico); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(5, 1594, __pyx_L1_error) + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Argument_must_be_string_or_unico); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(5, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); @@ -247827,34 +247754,34 @@ if (!__Pyx_RefNanny) { if (PyDict_SetItem(__pyx_d, __pyx_n_s_version_2, __pyx_t_1) < 0) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "src/lxml/apihelpers.pxi":654 + /* "src/lxml/apihelpers.pxi":649 * return attributes * * cdef object __RE_XML_ENCODING = re.compile( # <<<<<<<<<<<<<< * ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U) * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 654, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - /* "src/lxml/apihelpers.pxi":655 + /* "src/lxml/apihelpers.pxi":650 * * cdef object __RE_XML_ENCODING = re.compile( * ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U) # <<<<<<<<<<<<<< * * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_U); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 655, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_U); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - /* "src/lxml/apihelpers.pxi":654 + /* "src/lxml/apihelpers.pxi":649 * return attributes * * cdef object __RE_XML_ENCODING = re.compile( # <<<<<<<<<<<<<< * ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U) * */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 654, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_u_xml_s_encoding_s_s_s); __Pyx_GIVEREF(__pyx_kp_u_xml_s_encoding_s_s_s); @@ -247862,7 +247789,7 @@ if (!__Pyx_RefNanny) { __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 654, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -247871,28 +247798,28 @@ if (!__Pyx_RefNanny) { __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":657 + /* "src/lxml/apihelpers.pxi":652 * ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U) * * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub # <<<<<<<<<<<<<< * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match * */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_sub); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 657, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_sub); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING); __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; - /* "src/lxml/apihelpers.pxi":658 + /* "src/lxml/apihelpers.pxi":653 * * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match # <<<<<<<<<<<<<< * * cdef object _stripEncodingDeclaration(object xml_string): */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 658, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 653, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_v_4lxml_5etree___HAS_XML_ENCODING); __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, __pyx_t_7); diff --git a/src/lxml/html/_diffcommand.py b/src/lxml/html/_diffcommand.py index f99a265..e0502c0 100644 --- a/src/lxml/html/_diffcommand.py +++ b/src/lxml/html/_diffcommand.py @@ -51,9 +51,8 @@ def main(args=None): result += '\n' sys.stdout.write(result) else: - f = open(options.output, 'wb') - f.write(result) - f.close() + with open(options.output, 'wb') as f: + f.write(result) def read_file(filename): if filename == '-': @@ -62,9 +61,8 @@ def read_file(filename): raise OSError( "Input file %s does not exist" % filename) else: - f = open(filename, 'rb') - c = f.read() - f.close() + with open(filename, 'rb') as f: + c = f.read() return c body_start_re = re.compile( diff --git a/src/lxml/includes/lxml-version.h b/src/lxml/includes/lxml-version.h index cbd3ed1..6e1d126 100644 --- a/src/lxml/includes/lxml-version.h +++ b/src/lxml/includes/lxml-version.h @@ -1,3 +1,3 @@ #ifndef LXML_VERSION_STRING -#define LXML_VERSION_STRING "4.4.0" +#define LXML_VERSION_STRING "4.4.1" #endif diff --git a/src/lxml/tests/c14n-20/world.txt b/src/lxml/tests/c14n-20/world.txt new file mode 100644 index 0000000..04fea06 --- /dev/null +++ b/src/lxml/tests/c14n-20/world.txt @@ -0,0 +1 @@ +world \ No newline at end of file diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py index 7e30946..fc31967 100644 --- a/src/lxml/tests/test_etree.py +++ b/src/lxml/tests/test_etree.py @@ -9,6 +9,7 @@ test_elementtree from __future__ import absolute_import +from collections import OrderedDict import os.path import unittest import copy @@ -16,7 +17,6 @@ import sys import re import gc import operator -import tempfile import textwrap import zlib import gzip @@ -286,8 +286,8 @@ class ETreeOnlyTestCase(HelperTestCase): def test_attrib_order(self): Element = self.etree.Element - keys = ["attr%d" % i for i in range(10)] - values = ["TEST-%d" % i for i in range(10)] + keys = ["attr%d" % i for i in range(12, 4, -1)] + values = ["TEST-%d" % i for i in range(12, 4, -1)] items = list(zip(keys, values)) root = Element("root") @@ -296,19 +296,32 @@ class ETreeOnlyTestCase(HelperTestCase): self.assertEqual(keys, root.attrib.keys()) self.assertEqual(values, root.attrib.values()) - root2 = Element("root2", root.attrib, - attr_99='TOAST-1', attr_98='TOAST-2') - + attr_order = [ + ('attr_99', 'TOAST-1'), + ('attr_98', 'TOAST-2'), + ] + ordered_dict_types = [OrderedDict, lambda x:x] if sys.version_info >= (3, 6): - self.assertEqual(['attr_99', 'attr_98'] + keys, - root2.attrib.keys()) - self.assertEqual(['TOAST-1', 'TOAST-2'] + values, - root2.attrib.values()) + ordered_dict_types.append(dict) else: - self.assertEqual(['attr_98', 'attr_99'] + keys, - root2.attrib.keys()) - self.assertEqual(['TOAST-2', 'TOAST-1'] + values, - root2.attrib.values()) + # Keyword arguments are not ordered in Py<3.6, and thus get sorted. + attr_order.sort() + attr_order += items + expected_keys = [attr[0] for attr in attr_order] + expected_values = [attr[1] for attr in attr_order] + expected_items = list(zip(expected_keys, expected_values)) + + for dict_type in ordered_dict_types: + root2 = Element("root2", dict_type(root.attrib), + attr_99='TOAST-1', attr_98='TOAST-2') + + try: + self.assertSequenceEqual(expected_keys, root2.attrib.keys()) + self.assertSequenceEqual(expected_values, root2.attrib.values()) + self.assertSequenceEqual(expected_items, root2.attrib.items()) + except AssertionError as exc: + exc.args = ("Order of '%s': %s" % (dict_type.__name__, exc.args[0]),) + exc.args[1:] + raise self.assertEqual(keys, root.attrib.keys()) self.assertEqual(values, root.attrib.values()) diff --git a/version.txt b/version.txt index fdc6698..cca25a9 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.4.0 +4.4.1 -- 2.7.4