CHANGES.txt 94 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441
  1. ==============
  2. lxml changelog
  3. ==============
  4. 3.4.4 (2015-04-25)
  5. ==================
  6. Bugs fixed
  7. ----------
  8. * An ElementTree compatibility test added in lxml 3.4.3 that failed in
  9. Python 3.4+ was removed again.
  10. 3.4.3 (2015-04-15)
  11. ==================
  12. Bugs fixed
  13. ----------
  14. * Expression cache in ElementPath was ignored. Fix by Changaco.
  15. * LP#1426868: Passing a default namespace and a prefixed namespace mapping
  16. as nsmap into ``xmlfile.element()`` raised a ``TypeError``.
  17. * LP#1421927: DOCTYPE system URLs were incorrectly quoted when containing
  18. double quotes. Patch by Olli Pottonen.
  19. * LP#1419354: meta-redirect URLs were incorrectly processed by
  20. ``iterlinks()`` if preceded by whitespace.
  21. 3.4.2 (2015-02-07)
  22. ==================
  23. Bugs fixed
  24. ----------
  25. * LP#1415907: Crash when creating an XMLSchema from a non-root element
  26. of an XML document.
  27. * LP#1369362: HTML cleaning failed when hitting processing instructions
  28. with pseudo-attributes.
  29. * ``CDATA()`` wrapped content was rejected for tail text.
  30. * CDATA sections were not serialised as tail text of the top-level element.
  31. 3.4.1 (2014-11-20)
  32. ==================
  33. Features added
  34. --------------
  35. * New ``htmlfile`` HTML generator to accompany the incremental ``xmlfile``
  36. serialisation API. Patch by Burak Arslan.
  37. Bugs fixed
  38. ----------
  39. * ``lxml.sax.ElementTreeContentHandler`` did not initialise its superclass.
  40. 3.4.0 (2014-09-10)
  41. ==================
  42. Features added
  43. --------------
  44. * ``xmlfile(buffered=False)`` disables output buffering and flushes the
  45. content after each API operation (starting/ending element blocks or writes).
  46. A new method ``xf.flush()`` can alternatively be used to explicitly flush
  47. the output.
  48. * ``lxml.html.document_fromstring`` has a new option ``ensure_head_body=True``
  49. which will add an empty head and/or body element to the result document if
  50. missing.
  51. * ``lxml.html.iterlinks`` now returns links inside meta refresh tags.
  52. * New ``XMLParser`` option ``collect_ids=False`` to disable ID hash table
  53. creation. This can substantially speed up parsing of documents with many
  54. different IDs that are not used.
  55. * The parser uses per-document hash tables for XML IDs. This reduces the
  56. load of the global parser dict and speeds up parsing for documents with
  57. many different IDs.
  58. * ``ElementTree.getelementpath(element)`` returns a structural ElementPath
  59. expression for the given element, which can be used for lookups later.
  60. * ``xmlfile()`` accepts a new argument ``close=True`` to close file(-like)
  61. objects after writing to them. Before, ``xmlfile()`` only closed the file
  62. if it had opened it internally.
  63. * Allow "bytearray" type for ASCII text input.
  64. Bugs fixed
  65. ----------
  66. Other changes
  67. -------------
  68. * LP#400588: decoding errors have become hard errors even in recovery mode.
  69. Previously, they could lead to an internal tree representation in a mixed
  70. encoding state, which lead to very late errors or even silently incorrect
  71. behaviour during tree traversal or serialisation.
  72. * Requires Python 2.6, 2.7, 3.2 or later. No longer supports
  73. Python 2.4, 2.5 and 3.1, use lxml 3.3.x for those.
  74. * Requires libxml2 2.7.0 or later and libxslt 1.1.23 or later,
  75. use lxml 3.3.x with older versions.
  76. 3.3.6 (2014-08-28)
  77. ==================
  78. Bugs fixed
  79. ----------
  80. * Prevent tree cycle creation when adding Elements as siblings.
  81. * LP#1361948: crash when deallocating Element siblings without parent.
  82. * LP#1354652: crash when traversing internally loaded documents in XSLT
  83. extension functions.
  84. 3.3.5 (2014-04-18)
  85. ==================
  86. Bugs fixed
  87. ----------
  88. * HTML cleaning could fail to strip javascript links that mix control
  89. characters into the link scheme.
  90. 3.3.4 (2014-04-03)
  91. ==================
  92. Features added
  93. --------------
  94. * Source line numbers above 65535 are available on Elements when
  95. using libxml2 2.9 or later.
  96. Bugs fixed
  97. ----------
  98. * ``lxml.html.fragment_fromstring()`` failed for bytes input in Py3.
  99. Other changes
  100. -------------
  101. 3.3.3 (2014-03-04)
  102. ==================
  103. Bugs fixed
  104. ----------
  105. * LP#1287118: Crash when using Element subtypes with ``__slots__``.
  106. Other changes
  107. -------------
  108. * The internal classes ``_LogEntry`` and ``_Attrib`` can no longer be
  109. subclassed from Python code.
  110. 3.3.2 (2014-02-26)
  111. ==================
  112. Bugs fixed
  113. ----------
  114. * The properties ``resolvers`` and ``version``, as well as the methods
  115. ``set_element_class_lookup()`` and ``makeelement()``, were lost from
  116. ``iterparse`` objects in 3.3.0.
  117. * LP#1222132: instances of ``XMLSchema``, ``Schematron`` and ``RelaxNG``
  118. did not clear their local ``error_log`` before running a validation.
  119. * LP#1238500: lxml.doctestcompare mixed up "expected" and "actual" in
  120. attribute values.
  121. * Some file I/O tests were failing in MS-Windows due to non-portable temp
  122. file usage. Initial patch by Gabi Davar.
  123. * LP#910014: duplicate IDs in a document were not reported by DTD validation.
  124. * LP#1185332: ``tostring(method="html")`` did not use HTML serialisation
  125. semantics for trailing tail text. Initial patch by Sylvain Viollon.
  126. * LP#1281139: ``.attrib`` value of Comments lost its mutation methods
  127. in 3.3.0. Even though it is empty and immutable, it should still
  128. provide the same interface as that returned for Elements.
  129. 3.3.1 (2014-02-12)
  130. ==================
  131. Features added
  132. --------------
  133. Bugs fixed
  134. ----------
  135. * LP#1014290: HTML documents parsed with ``parser.feed()`` failed to find
  136. elements during tag iteration.
  137. * LP#1273709: Building in PyPy failed due to missing support for
  138. ``PyUnicode_Compare()`` and ``PyByteArray_*()`` in PyPy's C-API.
  139. * LP#1274413: Compilation in MSVC failed due to missing "stdint.h" standard
  140. header file.
  141. * LP#1274118: iterparse() failed to parse BOM prefixed files.
  142. Other changes
  143. -------------
  144. 3.3.0 (2014-01-26)
  145. ==================
  146. Features added
  147. --------------
  148. Bugs fixed
  149. ----------
  150. * The heuristic that distinguishes file paths from URLs was tightened
  151. to produce less false negatives.
  152. Other changes
  153. -------------
  154. 3.3.0beta5 (2014-01-18)
  155. =======================
  156. Features added
  157. --------------
  158. * The PEP 393 unicode parsing support gained a fallback for wchar strings
  159. which might still be somewhat common on Windows systems.
  160. Bugs fixed
  161. ----------
  162. * Several error handling problems were fixed throughout the code base that
  163. could previously lead to exceptions being silently swallowed or not
  164. properly reported.
  165. * The C-API function ``appendChild()`` is now deprecated as it does not
  166. propagate exceptions (its return type is ``void``). The new function
  167. ``appendChildToElement()`` was added as a safe replacement.
  168. * Passing a string into ``fromstringlist()`` raises an exception instead of
  169. parsing the string character by character.
  170. Other changes
  171. -------------
  172. * Document cleanup code was simplified using the new GC features in
  173. Cython 0.20.
  174. 3.3.0beta4 (2014-01-12)
  175. =======================
  176. Features added
  177. --------------
  178. Bugs fixed
  179. ----------
  180. * The (empty) value returned by the ``attrib`` property of Entity and Comment
  181. objects was mutable.
  182. * Element class lookup wasn't available for the new pull parsers or when using
  183. a custom parser target.
  184. * Setting Element attributes on instantiation with both the ``attrib`` argument
  185. and keyword arguments could modify the mapping passed as ``attrib``.
  186. * LP#1266171: DTDs instantiated from internal/external subsets (i.e. through
  187. the docinfo property) lost their attribute declarations.
  188. Other changes
  189. -------------
  190. * Built with Cython 0.20pre (gitrev 012ae82eb) to prepare support for
  191. Python 3.4.
  192. 3.3.0beta3 (2014-01-02)
  193. =======================
  194. Features added
  195. --------------
  196. * Unicode string parsing was optimised for Python 3.3 (PEP 393).
  197. Bugs fixed
  198. ----------
  199. * HTML parsing of Unicode strings could misdecode the input on some platforms.
  200. * Crash in xmlfile() when closing open elements out of order in an error case.
  201. Other changes
  202. -------------
  203. 3.3.0beta2 (2013-12-20)
  204. =======================
  205. Features added
  206. --------------
  207. * ``iterparse()`` supports the ``recover`` option.
  208. Bugs fixed
  209. ----------
  210. * Crash in ``iterparse()`` for HTML parsing.
  211. * Crash in target parsing with attributes.
  212. Other changes
  213. -------------
  214. * The safety check in the read-only tree implementation (e.g. used by
  215. ``PythonElementClassLookup``) raises a more appropriate ``ReferenceError``
  216. for illegal access after tree disposal instead of an ``AssertionError``.
  217. This should only impact test code that specifically checks the original
  218. behaviour.
  219. 3.3.0beta1 (2013-12-12)
  220. =======================
  221. Features added
  222. --------------
  223. * New option ``handle_failures`` in ``make_links_absolute()`` and
  224. ``resolve_base_href()`` (lxml.html) that enables ignoring or
  225. discarding links that fail to parse as URLs.
  226. * New parser classes ``XMLPullParser`` and ``HTMLPullParser`` for
  227. incremental parsing, as implemented for ElementTree in Python 3.4.
  228. * ``iterparse()`` enables recovery mode by default for HTML parsing
  229. (``html=True``).
  230. Bugs fixed
  231. ----------
  232. * LP#1255132: crash when trying to run validation over non-Element (e.g.
  233. comment or PI).
  234. * Error messages in the log and in exception messages that originated
  235. from libxml2 could accidentally be picked up from preceding warnings
  236. instead of the actual error.
  237. * The ``ElementMaker`` in lxml.objectify did not accept a dict as
  238. argument for adding attributes to the element it's building. This
  239. works as in lxml.builder now.
  240. * LP#1228881: ``repr(XSLTAccessControl)`` failed in Python 3.
  241. * Raise ``ValueError`` when trying to append an Element to itself or
  242. to one of its own descendants, instead of running into an infinite
  243. loop.
  244. * LP#1206077: htmldiff discarded whitespace from the output.
  245. * Compressed plain-text serialisation to file-like objects was broken.
  246. * lxml.html.formfill: Fix textarea form filling.
  247. The textarea used to be cleared before the new content was set,
  248. which removed the name attribute.
  249. Other changes
  250. -------------
  251. * Some basic API classes use freelists internally for faster
  252. instantiation. This can speed up some ``iterparse()`` scenarios,
  253. for example.
  254. * ``iterparse()`` was rewritten to use the new ``*PullParser``
  255. classes internally instead of being a parser itself.
  256. 3.2.5 (2014-01-02)
  257. ==================
  258. Features added
  259. --------------
  260. Bugs fixed
  261. ----------
  262. * Crash in xmlfile() when closing open elements out of order in an error case.
  263. * Crash in target parsing with attributes.
  264. * LP#1255132: crash when trying to run validation over non-Element (e.g.
  265. comment or PI).
  266. Other changes
  267. -------------
  268. 3.2.4 (2013-11-07)
  269. ==================
  270. Features added
  271. --------------
  272. Bugs fixed
  273. ----------
  274. * Memory leak when creating an XPath evaluator in a thread.
  275. * LP#1228881: ``repr(XSLTAccessControl)`` failed in Python 3.
  276. * Raise ``ValueError`` when trying to append an Element to itself or
  277. to one of its own descendants.
  278. * LP#1206077: htmldiff discarded whitespace from the output.
  279. * Compressed plain-text serialisation to file-like objects was broken.
  280. Other changes
  281. -------------
  282. 3.2.3 (2013-07-28)
  283. ==================
  284. Bugs fixed
  285. ----------
  286. * Fix support for Python 2.4 which was lost in 3.2.2.
  287. 3.2.2 (2013-07-28)
  288. ==================
  289. Features added
  290. --------------
  291. Bugs fixed
  292. ----------
  293. * LP#1185701: spurious XMLSyntaxError after finishing iterparse().
  294. * Crash in lxml.objectify during xsi annotation.
  295. Other changes
  296. -------------
  297. * Return values of user provided element class lookup methods are now
  298. validated against the type of the XML node they represent to prevent
  299. API class mismatches.
  300. 3.2.1 (2013-05-11)
  301. ==================
  302. Features added
  303. --------------
  304. * The methods ``apply_templates()`` and ``process_children()`` of XSLT
  305. extension elements have gained two new boolean options ``elements_only``
  306. and ``remove_blank_text`` that discard either all strings or whitespace-only
  307. strings from the result list.
  308. Bugs fixed
  309. ----------
  310. * When moving Elements to another tree, the namespace cleanup mechanism
  311. no longer drops namespace prefixes from attributes for which it finds
  312. a default namespace declaration, to prevent them from appearing as
  313. unnamespaced attributes after serialisation.
  314. * Returning non-type objects from a custom class lookup method could lead
  315. to a crash.
  316. * Instantiating and using subtypes of Comments and ProcessingInstructions
  317. crashed.
  318. Other changes
  319. -------------
  320. 3.2.0 (2013-04-28)
  321. ==================
  322. Features added
  323. --------------
  324. Bugs fixed
  325. ----------
  326. * LP#690319: Leading whitespace could change the behaviour of the string
  327. parsing functions in ``lxml.html``.
  328. * LP#599318: The string parsing functions in ``lxml.html`` are more robust
  329. in the face of uncommon HTML content like framesets or missing body tags.
  330. Patch by Stefan Seelmann.
  331. * LP#712941: I/O errors while trying to access files with paths that contain
  332. non-ASCII characters could raise ``UnicodeDecodeError`` instead of properly
  333. reporting the ``IOError``.
  334. * LP#673205: Parsing from in-memory strings disabled network access in the
  335. default parser and made subsequent attempts to parse from a URL fail.
  336. * LP#971754: lxml.html.clean appends 'nofollow' to 'rel' attributes instead
  337. of overwriting the current value.
  338. * LP#715687: lxml.html.clean no longer discards scripts that are explicitly
  339. allowed by the user provided whitelist. Patch by Christine Koppelt.
  340. Other changes
  341. -------------
  342. 3.1.2 (2013-04-12)
  343. ==================
  344. Features added
  345. --------------
  346. Bugs fixed
  347. ----------
  348. * LP#1136509: Passing attributes through the namespace-unaware API of
  349. the sax bridge (i.e. the ``handler.startElement()`` method) failed
  350. with a ``TypeError``. Patch by Mike Bayer.
  351. * LP#1123074: Fix serialisation error in XSLT output when converting
  352. the result tree to a Unicode string.
  353. * GH#105: Replace illegal usage of ``xmlBufLength()`` in libxml2 2.9.0
  354. by properly exported API function ``xmlBufUse()``.
  355. Other changes
  356. -------------
  357. 3.1.1 (2013-03-29)
  358. ==================
  359. Features added
  360. --------------
  361. Bugs fixed
  362. ----------
  363. * LP#1160386: Write access to ``lxml.html.FormElement.fields`` raised
  364. an AttributeError in Py3.
  365. * Illegal memory access during cleanup in incremental xmlfile writer.
  366. Other changes
  367. -------------
  368. * The externally useless class ``lxml.etree._BaseParser`` was removed
  369. from the module dict.
  370. 3.1.0 (2013-02-10)
  371. ==================
  372. Features added
  373. --------------
  374. * GH#89: lxml.html.clean allows overriding the set of attributes that it
  375. considers 'safe'. Patch by Francis Devereux.
  376. Bugs fixed
  377. ----------
  378. * LP#1104370: ``copy.copy(el.attrib)`` raised an exception. It now returns
  379. a copy of the attributes as a plain Python dict.
  380. * GH#95: When used with namespace prefixes, the ``el.find*()`` methods
  381. always used the first namespace mapping that was provided for each
  382. path expression instead of using the one that was actually passed
  383. in for the current run.
  384. * LP#1092521, GH#91: Fix undefined C symbol in Python runtimes compiled
  385. without threading support. Patch by Ulrich Seidl.
  386. Other changes
  387. -------------
  388. 3.1beta1 (2012-12-21)
  389. =====================
  390. Features added
  391. --------------
  392. * New build-time option ``--with-unicode-strings`` for Python 2 that
  393. makes the API always return Unicode strings for names and text
  394. instead of byte strings for plain ASCII content.
  395. * New incremental XML file writing API ``etree.xmlfile()``.
  396. * E factory in lxml.objectify is callable to simplify the creation of
  397. tags with non-identifier names without having to resort to getattr().
  398. Bugs fixed
  399. ----------
  400. * When starting from a non-namespaced element in lxml.objectify, searching
  401. for a child without explicitly specifying a namespace incorrectly found
  402. namespaced elements with the requested local name, instead of restricting
  403. the search to non-namespaced children.
  404. * GH#85: Deprecation warnings were fixed for Python 3.x.
  405. * GH#33: lxml.html.fromstring() failed to accept bytes input in Py3.
  406. * LP#1080792: Static build of libxml2 2.9.0 failed due to missing file.
  407. Other changes
  408. -------------
  409. * The externally useless class ``_ObjectifyElementMakerCaller`` was
  410. removed from the module API of lxml.objectify.
  411. * LP#1075622: lxml.builder is faster for adding text to elements with
  412. many children. Patch by Anders Hammarquist.
  413. 3.0.2 (2012-12-14)
  414. ==================
  415. Features added
  416. --------------
  417. Bugs fixed
  418. ----------
  419. * Fix crash during interpreter shutdown by switching to Cython 0.17.3 for building.
  420. Other changes
  421. -------------
  422. 3.0.1 (2012-10-14)
  423. ==================
  424. Features added
  425. --------------
  426. Bugs fixed
  427. ----------
  428. * LP#1065924: Element proxies could disappear during garbage collection
  429. in PyPy without proper cleanup.
  430. * GH#71: Failure to work with libxml2 2.6.x.
  431. * LP#1065139: static MacOS-X build failed in Py3.
  432. Other changes
  433. -------------
  434. 3.0 (2012-10-08)
  435. ================
  436. Features added
  437. --------------
  438. Bugs fixed
  439. ----------
  440. * End-of-file handling was incorrect in iterparse() when reading from
  441. a low-level C file stream and failed in libxml2 2.9.0 due to its
  442. improved consistency checks.
  443. Other changes
  444. -------------
  445. * The build no longer uses Cython by default unless the generated C files
  446. are missing. To use Cython, pass the option "--with-cython". To ignore
  447. the fatal build error when Cython is required but not available (e.g. to
  448. run special setup.py commands that do not actually run a build), pass
  449. "--without-cython".
  450. 3.0beta1 (2012-09-26)
  451. =====================
  452. Features added
  453. --------------
  454. * Python level access to (optional) libxml2 memory debugging features
  455. to simplify debugging of memory leaks etc.
  456. Bugs fixed
  457. ----------
  458. * Fix a memory leak in XPath by switching to Cython 0.17.1.
  459. * Some tests were adapted to work with PyPy.
  460. Other changes
  461. -------------
  462. * The code was adapted to work with the upcoming libxml2 2.9.0 release.
  463. 3.0alpha2 (2012-08-23)
  464. ======================
  465. Features added
  466. --------------
  467. * The ``.iter()`` method of elements now accepts ``tag`` arguments like
  468. ``"{*}name"`` to search for elements with a given local name in any
  469. namespace. With this addition, all combinations of wildcards now work
  470. as expected:
  471. ``"{ns}name"``, ``"{}name"``, ``"{*}name"``, ``"{ns}*"``, ``"{}*"``
  472. and ``"{*}*"``. Note that ``"name"`` is equivalent to ``"{}name"``,
  473. but ``"*"`` is ``"{*}*"``.
  474. The same change applies to the ``.getiterator()``, ``.itersiblings()``,
  475. ``.iterancestors()``, ``.iterdescendants()``, ``.iterchildren()``
  476. and ``.itertext()`` methods;the ``strip_attributes()``,
  477. ``strip_elements()`` and ``strip_tags()`` functions as well as the
  478. ``iterparse()`` class. Patch by Simon Sapin.
  479. * C14N allows specifying the inclusive prefixes to be promoted
  480. to top-level during exclusive serialisation.
  481. Bugs fixed
  482. ----------
  483. * Passing long Unicode strings into the ``feed()`` parser interface
  484. failed to read the entire string.
  485. Other changes
  486. -------------
  487. 3.0alpha1 (2012-07-31)
  488. ======================
  489. Features added
  490. --------------
  491. * Initial support for building in PyPy (through cpyext).
  492. * DTD objects gained an API that allows read access to their
  493. declarations.
  494. * ``xpathgrep.py`` gained support for parsing line-by-line (e.g.
  495. from grep output) and for surrounding the output with a new root
  496. tag.
  497. * ``E-factory`` in ``lxml.builder`` accepts subtypes of known data
  498. types (such as string subtypes) when building elements around them.
  499. * Tree iteration and ``iterparse()`` with a selective ``tag``
  500. argument supports passing a set of tags. Tree nodes will be
  501. returned by the iterators if they match any of the tags.
  502. Bugs fixed
  503. ----------
  504. * The ``.find*()`` methods in ``lxml.objectify`` no longer use XPath
  505. internally, which makes them faster in many cases (especially when
  506. short circuiting after a single or couple of elements) and fixes
  507. some behavioural differences compared to ``lxml.etree``. Note that
  508. this means that they no longer support arbitrary XPath expressions
  509. but only the subset that the ``ElementPath`` language supports.
  510. The previous implementation was also redundant with the normal
  511. XPath support, which can be used as a replacement.
  512. * ``el.find('*')`` could accidentally return a comment or processing
  513. instruction that happened to be in the wrong spot. (Same for the
  514. other ``.find*()`` methods.)
  515. * The error logging is less intrusive and avoids a global setup where
  516. possible.
  517. * Fixed undefined names in html5lib parser.
  518. * ``xpathgrep.py`` did not work in Python 3.
  519. * ``Element.attrib.update()`` did not accept an ``attrib`` of
  520. another Element as parameter.
  521. * For subtypes of ``ElementBase`` that make the ``.text`` or ``.tail``
  522. properties immutable (as in objectify, for example), inserting text
  523. when creating Elements through the E-Factory feature of the class
  524. constructor would fail with an exception, stating that the text
  525. cannot be modified.
  526. Other changes
  527. --------------
  528. * The code base was overhauled to properly use 'const' where the API
  529. of libxml2 and libxslt requests it. This also has an impact on the
  530. public C-API of lxml itself, as defined in ``etreepublic.pxd``, as
  531. well as the provided declarations in the ``lxml/includes/`` directory.
  532. Code that uses these declarations may have to be adapted. On the
  533. plus side, this fixes several C compiler warnings, also for user
  534. code, thus making it easier to spot real problems again.
  535. * The functionality of "lxml.cssselect" was moved into a separate PyPI
  536. package called "cssselect". To continue using it, you must install
  537. that package separately. The "lxml.cssselect" module is still
  538. available and provides the same interface, provided the "cssselect"
  539. package can be imported at runtime.
  540. * Element attributes passed in as an ``attrib`` dict or as keyword
  541. arguments are now sorted by (namespaced) name before being created
  542. to make their order predictable for serialisation and iteration.
  543. Note that adding or deleting attributes afterwards does not take
  544. that order into account, i.e. setting a new attribute appends it
  545. after the existing ones.
  546. * Several classes that are for internal use only were removed
  547. from the ``lxml.etree`` module dict:
  548. ``_InputDocument, _ResolverRegistry, _ResolverContext, _BaseContext,
  549. _ExsltRegExp, _IterparseContext, _TempStore, _ExceptionContext,
  550. __ContentOnlyElement, _AttribIterator, _NamespaceRegistry,
  551. _ClassNamespaceRegistry, _FunctionNamespaceRegistry,
  552. _XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
  553. _FileReaderContext, _ParserContext, _PythonSaxParserTarget,
  554. _TargetParserContext, _ReadOnlyProxy, _ReadOnlyPIProxy,
  555. _ReadOnlyEntityProxy, _ReadOnlyElementProxy, _OpaqueNodeWrapper,
  556. _OpaqueDocumentWrapper, _ModifyContentOnlyProxy,
  557. _ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
  558. _AppendOnlyElementProxy, _SaxParserContext, _FilelikeWriter,
  559. _ParserSchemaValidationContext, _XPathContext,
  560. _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam``
  561. * Several internal classes can no longer be inherited from:
  562. ``_InputDocument, _ResolverRegistry, _ExsltRegExp, _ElementUnicodeResult,
  563. _IterparseContext, _TempStore, _AttribIterator, _ClassNamespaceRegistry,
  564. _XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
  565. _FileReaderContext, _PythonSaxParserTarget, _TargetParserContext,
  566. _ReadOnlyPIProxy, _ReadOnlyEntityProxy, _OpaqueDocumentWrapper,
  567. _ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
  568. _AppendOnlyElementProxy, _FilelikeWriter, _ParserSchemaValidationContext,
  569. _XPathContext, _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam,
  570. _XSLTResultTree, _XSLTProcessingInstruction``
  571. 2.3.6 (2012-09-28)
  572. ==================
  573. Features added
  574. --------------
  575. Bugs fixed
  576. ----------
  577. * Passing long Unicode strings into the ``feed()`` parser interface
  578. failed to read the entire string.
  579. Other changes
  580. --------------
  581. 2.3.5 (2012-07-31)
  582. ==================
  583. Features added
  584. --------------
  585. Bugs fixed
  586. ----------
  587. * Crash when merging text nodes in ``element.remove()``.
  588. * Crash in sax/target parser when reporting empty doctype.
  589. Other changes
  590. --------------
  591. 2.3.4 (2012-03-26)
  592. ==================
  593. Features added
  594. --------------
  595. Bugs fixed
  596. ----------
  597. * Crash when building an nsmap (Element property) with empty
  598. namespace URIs.
  599. * Crash due to race condition when errors (or user messages) occur
  600. during threaded XSLT processing.
  601. * XSLT stylesheet compilation could ignore compilation errors.
  602. Other changes
  603. --------------
  604. 2.3.3 (2012-01-04)
  605. ==================
  606. Features added
  607. --------------
  608. * ``lxml.html.tostring()`` gained new serialisation options
  609. ``with_tail`` and ``doctype``.
  610. Bugs fixed
  611. ----------
  612. * Fixed a crash when using ``iterparse()`` for HTML parsing and
  613. requesting start events.
  614. * Fixed parsing of more selectors in cssselect. Whitespace before
  615. pseudo-elements and pseudo-classes is significant as it is a
  616. descendant combinator.
  617. "E :pseudo" should parse the same as "E \*:pseudo", not "E:pseudo".
  618. Patch by Simon Sapin.
  619. * lxml.html.diff no longer raises an exception when hitting
  620. 'img' tags without 'src' attribute.
  621. Other changes
  622. --------------
  623. 2.3.2 (2011-11-11)
  624. ==================
  625. Features added
  626. --------------
  627. * ``lxml.objectify.deannotate()`` has a new boolean option
  628. ``cleanup_namespaces`` to remove the objectify namespace
  629. declarations (and generally clean up the namespace declarations)
  630. after removing the type annotations.
  631. * ``lxml.objectify`` gained its own ``SubElement()`` function as a
  632. copy of ``etree.SubElement`` to avoid an otherwise redundant import
  633. of ``lxml.etree`` on the user side.
  634. Bugs fixed
  635. ----------
  636. * Fixed the "descendant" bug in cssselect a second time (after a first
  637. fix in lxml 2.3.1). The previous change resulted in a serious
  638. performance regression for the XPath based evaluation of the
  639. translated expression. Note that this breaks the usage of some of
  640. the generated XPath expressions as XSLT location paths that
  641. previously worked in 2.3.1.
  642. * Fixed parsing of some selectors in cssselect. Whitespace after combinators
  643. ">", "+" and "~" is now correctly ignored. Previously is was parsed as
  644. a descendant combinator. For example, "div> .foo" was parsed the same as
  645. "div>* .foo" instead of "div>.foo". Patch by Simon Sapin.
  646. Other changes
  647. --------------
  648. 2.3.1 (2011-09-25)
  649. ==================
  650. Features added
  651. --------------
  652. * New option ``kill_tags`` in ``lxml.html.clean`` to remove specific
  653. tags and their content (i.e. their whole subtree).
  654. * ``pi.get()`` and ``pi.attrib`` on processing instructions to parse
  655. pseudo-attributes from the text content of processing instructions.
  656. * ``lxml.get_include()`` returns a list of include paths that can be
  657. used to compile external C code against lxml.etree. This is
  658. specifically required for statically linked lxml builds when code
  659. needs to compile against the exact same header file versions as lxml
  660. itself.
  661. * ``Resolver.resolve_file()`` takes an additional option
  662. ``close_file`` that configures if the file(-like) object will be
  663. closed after reading or not. By default, the file will be closed,
  664. as the user is not expected to keep a reference to it.
  665. Bugs fixed
  666. ----------
  667. * HTML cleaning didn't remove 'data:' links.
  668. * The html5lib parser integration now uses the 'official'
  669. implementation in html5lib itself, which makes it work with newer
  670. releases of the library.
  671. * In ``lxml.sax``, ``endElementNS()`` could incorrectly reject a plain
  672. tag name when the corresponding start event inferred the same plain
  673. tag name to be in the default namespace.
  674. * When an open file-like object is passed into ``parse()`` or
  675. ``iterparse()``, the parser will no longer close it after use. This
  676. reverts a change in lxml 2.3 where all files would be closed. It is
  677. the users responsibility to properly close the file(-like) object,
  678. also in error cases.
  679. * Assertion error in lxml.html.cleaner when discarding top-level elements.
  680. * In lxml.cssselect, use the xpath 'A//B' (short for
  681. 'A/descendant-or-self::node()/B') instead of 'A/descendant::B' for
  682. the css descendant selector ('A B'). This makes a few edge cases
  683. like ``"div *:last-child"`` consistent with the selector behavior in
  684. WebKit and Firefox, and makes more css expressions valid location
  685. paths (for use in xsl:template match).
  686. * In lxml.html, non-selected ``<option>`` tags no longer show up in the
  687. collected form values.
  688. * Adding/removing ``<option>`` values to/from a multiple select form
  689. field properly selects them and unselects them.
  690. Other changes
  691. --------------
  692. * Static builds can specify the download directory with the
  693. ``--download-dir`` option.
  694. 2.3 (2011-02-06)
  695. ================
  696. Features added
  697. --------------
  698. * When looking for children, ``lxml.objectify`` takes '{}tag' as
  699. meaning an empty namespace, as opposed to the parent namespace.
  700. Bugs fixed
  701. ----------
  702. * When finished reading from a file-like object, the parser
  703. immediately calls its ``.close()`` method.
  704. * When finished parsing, ``iterparse()`` immediately closes the input
  705. file.
  706. * Work-around for libxml2 bug that can leave the HTML parser in a
  707. non-functional state after parsing a severly broken document (fixed
  708. in libxml2 2.7.8).
  709. * ``marque`` tag in HTML cleanup code is correctly named ``marquee``.
  710. Other changes
  711. --------------
  712. * Some public functions in the Cython-level C-API have more explicit
  713. return types.
  714. 2.3beta1 (2010-09-06)
  715. =====================
  716. Features added
  717. --------------
  718. Bugs fixed
  719. ----------
  720. * Crash in newer libxml2 versions when moving elements between
  721. documents that had attributes on replaced XInclude nodes.
  722. * ``XMLID()`` function was missing the optional ``parser`` and
  723. ``base_url`` parameters.
  724. * Searching for wildcard tags in ``iterparse()`` was broken in Py3.
  725. * ``lxml.html.open_in_browser()`` didn't work in Python 3 due to the
  726. use of os.tempnam. It now takes an optional 'encoding' parameter.
  727. Other changes
  728. --------------
  729. 2.3alpha2 (2010-07-24)
  730. ======================
  731. Features added
  732. --------------
  733. Bugs fixed
  734. ----------
  735. * Crash in XSLT when generating text-only result documents with a
  736. stylesheet created in a different thread.
  737. Other changes
  738. --------------
  739. * ``repr()`` of Element objects shows the hex ID with leading 0x
  740. (following ElementTree 1.3).
  741. 2.3alpha1 (2010-06-19)
  742. ======================
  743. Features added
  744. --------------
  745. * Keyword argument ``namespaces`` in ``lxml.cssselect.CSSSelector()``
  746. to pass a prefix-to-namespace mapping for the selector.
  747. * New function ``lxml.etree.register_namespace(prefix, uri)`` that
  748. globally registers a namespace prefix for a namespace that newly
  749. created Elements in that namespace will use automatically. Follows
  750. ElementTree 1.3.
  751. * Support 'unicode' string name as encoding parameter in
  752. ``tostring()``, following ElementTree 1.3.
  753. * Support 'c14n' serialisation method in ``ElementTree.write()`` and
  754. ``tostring()``, following ElementTree 1.3.
  755. * The ElementPath expression syntax (``el.find*()``) was extended to
  756. match the upcoming ElementTree 1.3 that will ship in the standard
  757. library of Python 3.2/2.7. This includes extended support for
  758. predicates as well as namespace prefixes (as known from XPath).
  759. * During regular XPath evaluation, various ESXLT functions are
  760. available within their namespace when using libxslt 1.1.26 or later.
  761. * Support passing a readily configured logger instance into
  762. ``PyErrorLog``, instead of a logger name.
  763. * On serialisation, the new ``doctype`` parameter can be used to
  764. override the DOCTYPE (internal subset) of the document.
  765. * New parameter ``output_parent`` to ``XSLTExtension.apply_templates()``
  766. to append the resulting content directly to an output element.
  767. * ``XSLTExtension.process_children()`` to process the content of the
  768. XSLT extension element itself.
  769. * ISO-Schematron support based on the de-facto Schematron reference
  770. 'skeleton implementation'.
  771. * XSLT objects now take XPath object as ``__call__`` stylesheet
  772. parameters.
  773. * Enable path caching in ElementPath (``el.find*()``) to avoid parsing
  774. overhead.
  775. * Setting the value of a namespaced attribute always uses a prefixed
  776. namespace instead of the default namespace even if both declare the
  777. same namespace URI. This avoids serialisation problems when an
  778. attribute from a default namespace is set on an element from a
  779. different namespace.
  780. * XSLT extension elements: support for XSLT context nodes other than
  781. elements: document root, comments, processing instructions.
  782. * Support for strings (in addition to Elements) in node-sets returned
  783. by extension functions.
  784. * Forms that lack an ``action`` attribute default to the base URL of
  785. the document on submit.
  786. * XPath attribute result strings have an ``attrname`` property.
  787. * Namespace URIs get validated against RFC 3986 at the API level
  788. (required by the XML namespace specification).
  789. * Target parsers show their target object in the ``.target`` property
  790. (compatible with ElementTree).
  791. Bugs fixed
  792. ----------
  793. * API is hardened against invalid proxy instances to prevent crashes
  794. due to incorrectly instantiated Element instances.
  795. * Prevent crash when instantiating ``CommentBase`` and friends.
  796. * Export ElementTree compatible XML parser class as
  797. ``XMLTreeBuilder``, as it is called in ET 1.2.
  798. * ObjectifiedDataElements in lxml.objectify were not hashable. They
  799. now use the hash value of the underlying Python value (string,
  800. number, etc.) to which they compare equal.
  801. * Parsing broken fragments in lxml.html could fail if the fragment
  802. contained an orphaned closing '</div>' tag.
  803. * Using XSLT extension elements around the root of the output document
  804. crashed.
  805. * ``lxml.cssselect`` did not distinguish between ``x[attr="val"]`` and
  806. ``x [attr="val"]`` (with a space). The latter now matches the
  807. attribute independent of the element.
  808. * Rewriting multiple links inside of HTML text content could end up
  809. replacing unrelated content as replacements could impact the
  810. reported position of subsequent matches. Modifications are now
  811. simplified by letting the ``iterlinks()`` generator in ``lxml.html``
  812. return links in reversed order if they appear inside the same text
  813. node. Thus, replacements and link-internal modifications no longer
  814. change the position of links reported afterwards.
  815. * The ``.value`` attribute of ``textarea`` elements in lxml.html did
  816. not represent the complete raw value (including child tags etc.). It
  817. now serialises the complete content on read and replaces the
  818. complete content by a string on write.
  819. * Target parser didn't call ``.close()`` on the target object if
  820. parsing failed. Now it is guaranteed that ``.close()`` will be
  821. called after parsing, regardless of the outcome.
  822. Other changes
  823. -------------
  824. * Official support for Python 3.1.2 and later.
  825. * Static MS Windows builds can now download their dependencies
  826. themselves.
  827. * ``Element.attrib`` no longer uses a cyclic reference back to its
  828. Element object. It therefore no longer requires the garbage
  829. collector to clean up.
  830. * Static builds include libiconv, in addition to libxml2 and libxslt.
  831. 2.2.8 (2010-09-02)
  832. ==================
  833. Bugs fixed
  834. ----------
  835. * Crash in newer libxml2 versions when moving elements between
  836. documents that had attributes on replaced XInclude nodes.
  837. * Import fix for urljoin in Python 3.1+.
  838. 2.2.7 (2010-07-24)
  839. ==================
  840. Bugs fixed
  841. ----------
  842. * Crash in XSLT when generating text-only result documents with a
  843. stylesheet created in a different thread.
  844. 2.2.6 (2010-03-02)
  845. ==================
  846. Bugs fixed
  847. ----------
  848. * Fixed several Python 3 regressions by building with Cython 0.11.3.
  849. 2.2.5 (2010-02-28)
  850. ==================
  851. Features added
  852. --------------
  853. * Support for running XSLT extension elements on the input root node
  854. (e.g. in a template matching on "/").
  855. Bugs fixed
  856. ----------
  857. * Crash in XPath evaluation when reading smart strings from a document
  858. other than the original context document.
  859. * Support recent versions of html5lib by not requiring its
  860. ``XHTMLParser`` in ``htmlparser.py`` anymore.
  861. * Manually instantiating the custom element classes in
  862. ``lxml.objectify`` could crash.
  863. * Invalid XML text characters were not rejected by the API when they
  864. appeared in unicode strings directly after non-ASCII characters.
  865. * lxml.html.open_http_urllib() did not work in Python 3.
  866. * The functions ``strip_tags()`` and ``strip_elements()`` in
  867. ``lxml.etree`` did not remove all occurrences of a tag in all cases.
  868. * Crash in XSLT extension elements when the XSLT context node is not
  869. an element.
  870. 2.2.4 (2009-11-11)
  871. ==================
  872. Bugs fixed
  873. ----------
  874. * Static build of libxml2/libxslt was broken.
  875. 2.2.3 (2009-10-30)
  876. ==================
  877. Features added
  878. --------------
  879. Bugs fixed
  880. ----------
  881. * The ``resolve_entities`` option did not work in the incremental feed
  882. parser.
  883. * Looking up and deleting attributes without a namespace could hit a
  884. namespaced attribute of the same name instead.
  885. * Late errors during calls to ``SubElement()`` (e.g. attribute related
  886. ones) could leave a partially initialised element in the tree.
  887. * Modifying trees that contain parsed entity references could result
  888. in an infinite loop.
  889. * ObjectifiedElement.__setattr__ created an empty-string child element when the
  890. attribute value was rejected as a non-unicode/non-ascii string
  891. * Syntax errors in ``lxml.cssselect`` could result in misleading error
  892. messages.
  893. * Invalid syntax in CSS expressions could lead to an infinite loop in
  894. the parser of ``lxml.cssselect``.
  895. * CSS special character escapes were not properly handled in
  896. ``lxml.cssselect``.
  897. * CSS Unicode escapes were not properly decoded in ``lxml.cssselect``.
  898. * Select options in HTML forms that had no explicit ``value``
  899. attribute were not handled correctly. The HTML standard dictates
  900. that their value is defined by their text content. This is now
  901. supported by lxml.html.
  902. * XPath raised a TypeError when finding CDATA sections. This is now
  903. fully supported.
  904. * Calling ``help(lxml.objectify)`` didn't work at the prompt.
  905. * The ``ElementMaker`` in lxml.objectify no longer defines the default
  906. namespaces when annotation is disabled.
  907. * Feed parser failed to honout the 'recover' option on parse errors.
  908. * Diverting the error logging to Python's logging system was broken.
  909. Other changes
  910. -------------
  911. 2.2.2 (2009-06-21)
  912. ==================
  913. Features added
  914. --------------
  915. * New helper functions ``strip_attributes()``, ``strip_elements()``,
  916. ``strip_tags()`` in lxml.etree to remove attributes/subtrees/tags
  917. from a subtree.
  918. Bugs fixed
  919. ----------
  920. * Namespace cleanup on subtree insertions could result in missing
  921. namespace declarations (and potentially crashes) if the element
  922. defining a namespace was deleted and the namespace was not used by
  923. the top element of the inserted subtree but only in deeper subtrees.
  924. * Raising an exception from a parser target callback didn't always
  925. terminate the parser.
  926. * Only {true, false, 1, 0} are accepted as the lexical representation for
  927. BoolElement ({True, False, T, F, t, f} not any more), restoring lxml <= 2.0
  928. behaviour.
  929. Other changes
  930. -------------
  931. 2.2.1 (2009-06-02)
  932. ==================
  933. Features added
  934. --------------
  935. * Injecting default attributes into a document during XML Schema
  936. validation (also at parse time).
  937. * Pass ``huge_tree`` parser option to disable parser security
  938. restrictions imposed by libxml2 2.7.
  939. Bugs fixed
  940. ----------
  941. * The script for statically building libxml2 and libxslt didn't work
  942. in Py3.
  943. * ``XMLSchema()`` also passes invalid schema documents on to libxml2
  944. for parsing (which could lead to a crash before release 2.6.24).
  945. Other changes
  946. -------------
  947. 2.2 (2009-03-21)
  948. ================
  949. Features added
  950. --------------
  951. * Support for ``standalone`` flag in XML declaration through
  952. ``tree.docinfo.standalone`` and by passing ``standalone=True/False``
  953. on serialisation.
  954. Bugs fixed
  955. ----------
  956. * Crash when parsing an XML Schema with external imports from a
  957. filename.
  958. 2.2beta4 (2009-02-27)
  959. =====================
  960. Features added
  961. --------------
  962. * Support strings and instantiable Element classes as child arguments
  963. to the constructor of custom Element classes.
  964. * GZip compression support for serialisation to files and file-like
  965. objects.
  966. Bugs fixed
  967. ----------
  968. * Deep-copying an ElementTree copied neither its sibling PIs and
  969. comments nor its internal/external DTD subsets.
  970. * Soupparser failed on broken attributes without values.
  971. * Crash in XSLT when overwriting an already defined attribute using
  972. ``xsl:attribute``.
  973. * Crash bug in exception handling code under Python 3. This was due
  974. to a problem in Cython, not lxml itself.
  975. * ``lxml.html.FormElement._name()`` failed for non top-level forms.
  976. * ``TAG`` special attribute in constructor of custom Element classes
  977. was evaluated incorrectly.
  978. Other changes
  979. -------------
  980. * Official support for Python 3.0.1.
  981. * ``Element.findtext()`` now returns an empty string instead of None
  982. for Elements without text content.
  983. 2.2beta3 (2009-02-17)
  984. =====================
  985. Features added
  986. --------------
  987. * ``XSLT.strparam()`` class method to wrap quoted string parameters
  988. that require escaping.
  989. Bugs fixed
  990. ----------
  991. * Memory leak in XPath evaluators.
  992. * Crash when parsing indented XML in one thread and merging it with
  993. other documents parsed in another thread.
  994. * Setting the ``base`` attribute in ``lxml.objectify`` from a unicode
  995. string failed.
  996. * Fixes following changes in Python 3.0.1.
  997. * Minor fixes for Python 3.
  998. Other changes
  999. -------------
  1000. * The global error log (which is copied into the exception log) is now
  1001. local to a thread, which fixes some race conditions.
  1002. * More robust error handling on serialisation.
  1003. 2.2beta2 (2009-01-25)
  1004. =====================
  1005. Bugs fixed
  1006. ----------
  1007. * Potential memory leak on exception handling. This was due to a
  1008. problem in Cython, not lxml itself.
  1009. * ``iter_links`` (and related link-rewriting functions) in
  1010. ``lxml.html`` would interpret CSS like ``url("link")`` incorrectly
  1011. (treating the quotation marks as part of the link).
  1012. * Failing import on systems that have an ``io`` module.
  1013. 2.1.5 (2009-01-06)
  1014. ==================
  1015. Bugs fixed
  1016. ----------
  1017. * Potential memory leak on exception handling. This was due to a
  1018. problem in Cython, not lxml itself.
  1019. * Failing import on systems that have an ``io`` module.
  1020. 2.2beta1 (2008-12-12)
  1021. =====================
  1022. Features added
  1023. --------------
  1024. * Allow ``lxml.html.diff.htmldiff`` to accept Element objects, not
  1025. just HTML strings.
  1026. Bugs fixed
  1027. ----------
  1028. * Crash when using an XPath evaluator in multiple threads.
  1029. * Fixed missing whitespace before ``Link:...`` in ``lxml.html.diff``.
  1030. Other changes
  1031. -------------
  1032. * Export ``lxml.html.parse``.
  1033. 2.1.4 (2008-12-12)
  1034. ==================
  1035. Bugs fixed
  1036. ----------
  1037. * Crash when using an XPath evaluator in multiple threads.
  1038. 2.0.11 (2008-12-12)
  1039. ===================
  1040. Bugs fixed
  1041. ----------
  1042. * Crash when using an XPath evaluator in multiple threads.
  1043. 2.2alpha1 (2008-11-23)
  1044. ======================
  1045. Features added
  1046. --------------
  1047. * Support for XSLT result tree fragments in XPath/XSLT extension
  1048. functions.
  1049. * QName objects have new properties ``namespace`` and ``localname``.
  1050. * New options for exclusive C14N and C14N without comments.
  1051. * Instantiating a custom Element classes creates a new Element.
  1052. Bugs fixed
  1053. ----------
  1054. * XSLT didn't inherit the parse options of the input document.
  1055. * 0-bytes could slip through the API when used inside of Unicode
  1056. strings.
  1057. * With ``lxml.html.clean.autolink``, links with balanced parenthesis,
  1058. that end in a parenthesis, will be linked in their entirety (typical
  1059. with Wikipedia links).
  1060. Other changes
  1061. -------------
  1062. 2.1.3 (2008-11-17)
  1063. ==================
  1064. Features added
  1065. --------------
  1066. Bugs fixed
  1067. ----------
  1068. * Ref-count leaks when lxml enters a try-except statement while an
  1069. outside exception lives in sys.exc_*(). This was due to a problem in
  1070. Cython, not lxml itself.
  1071. * Parser Unicode decoding errors could get swallowed by other
  1072. exceptions.
  1073. * Name/import errors in some Python modules.
  1074. * Internal DTD subsets that did not specify a system or public ID were
  1075. not serialised and did not appear in the docinfo property of
  1076. ElementTrees.
  1077. * Fix a pre-Py3k warning when parsing from a gzip file in Py2.6.
  1078. * Test suite fixes for libxml2 2.7.
  1079. * Resolver.resolve_string() did not work for non-ASCII byte strings.
  1080. * Resolver.resolve_file() was broken.
  1081. * Overriding the parser encoding didn't work for many encodings.
  1082. Other changes
  1083. -------------
  1084. 2.0.10 (2008-11-17)
  1085. ===================
  1086. Bugs fixed
  1087. ----------
  1088. * Ref-count leaks when lxml enters a try-except statement while an
  1089. outside exception lives in sys.exc_*(). This was due to a problem in
  1090. Cython, not lxml itself.
  1091. 2.1.2 (2008-09-05)
  1092. ==================
  1093. Features added
  1094. --------------
  1095. * lxml.etree now tries to find the absolute path name of files when
  1096. parsing from a file-like object. This helps custom resolvers when
  1097. resolving relative URLs, as lixbml2 can prepend them with the path
  1098. of the source document.
  1099. Bugs fixed
  1100. ----------
  1101. * Memory problem when passing documents between threads.
  1102. * Target parser did not honour the ``recover`` option and raised an
  1103. exception instead of calling ``.close()`` on the target.
  1104. Other changes
  1105. -------------
  1106. 2.0.9 (2008-09-05)
  1107. ==================
  1108. Bugs fixed
  1109. ----------
  1110. * Memory problem when passing documents between threads.
  1111. * Target parser did not honour the ``recover`` option and raised an
  1112. exception instead of calling ``.close()`` on the target.
  1113. 2.1.1 (2008-07-24)
  1114. ==================
  1115. Features added
  1116. --------------
  1117. Bugs fixed
  1118. ----------
  1119. * Crash when parsing XSLT stylesheets in a thread and using them in
  1120. another.
  1121. * Encoding problem when including text with ElementInclude under
  1122. Python 3.
  1123. Other changes
  1124. -------------
  1125. 2.0.8 (2008-07-24)
  1126. ==================
  1127. Features added
  1128. --------------
  1129. * ``lxml.html.rewrite_links()`` strips links to work around documents
  1130. with whitespace in URL attributes.
  1131. Bugs fixed
  1132. ----------
  1133. * Crash when parsing XSLT stylesheets in a thread and using them in
  1134. another.
  1135. * CSS selector parser dropped remaining expression after a function
  1136. with parameters.
  1137. Other changes
  1138. -------------
  1139. 2.1 (2008-07-09)
  1140. ================
  1141. Features added
  1142. --------------
  1143. * Smart strings can be switched off in XPath (``smart_strings``
  1144. keyword option).
  1145. * ``lxml.html.rewrite_links()`` strips links to work around documents
  1146. with whitespace in URL attributes.
  1147. Bugs fixed
  1148. ----------
  1149. * Custom resolvers were not used for XMLSchema includes/imports and
  1150. XInclude processing.
  1151. * CSS selector parser dropped remaining expression after a function
  1152. with parameters.
  1153. Other changes
  1154. -------------
  1155. * ``objectify.enableRecursiveStr()`` was removed, use
  1156. ``objectify.enable_recursive_str()`` instead
  1157. * Speed-up when running XSLTs on documents from other threads
  1158. 2.0.7 (2008-06-20)
  1159. ==================
  1160. Features added
  1161. --------------
  1162. * Pickling ``ElementTree`` objects in lxml.objectify.
  1163. Bugs fixed
  1164. ----------
  1165. * Descending dot-separated classes in CSS selectors were not resolved
  1166. correctly.
  1167. * ``ElementTree.parse()`` didn't handle target parser result.
  1168. * Potential threading problem in XInclude.
  1169. * Crash in Element class lookup classes when the __init__() method of
  1170. the super class is not called from Python subclasses.
  1171. Other changes
  1172. -------------
  1173. * Non-ASCII characters in attribute values are no longer escaped on
  1174. serialisation.
  1175. 2.1beta3 (2008-06-19)
  1176. =====================
  1177. Features added
  1178. --------------
  1179. * Major overhaul of ``tools/xpathgrep.py`` script.
  1180. * Pickling ``ElementTree`` objects in lxml.objectify.
  1181. * Support for parsing from file-like objects that return unicode
  1182. strings.
  1183. * New function ``etree.cleanup_namespaces(el)`` that removes unused
  1184. namespace declarations from a (sub)tree (experimental).
  1185. * XSLT results support the buffer protocol in Python 3.
  1186. * Polymorphic functions in ``lxml.html`` that accept either a tree or
  1187. a parsable string will return either a UTF-8 encoded byte string, a
  1188. unicode string or a tree, based on the type of the input.
  1189. Previously, the result was always a byte string or a tree.
  1190. * Support for Python 2.6 and 3.0 beta.
  1191. * File name handling now uses a heuristic to convert between byte
  1192. strings (usually filenames) and unicode strings (usually URLs).
  1193. * Parsing from a plain file object frees the GIL under Python 2.x.
  1194. * Running ``iterparse()`` on a plain file (or filename) frees the GIL
  1195. on reading under Python 2.x.
  1196. * Conversion functions ``html_to_xhtml()`` and ``xhtml_to_html()`` in
  1197. lxml.html (experimental).
  1198. * Most features in lxml.html work for XHTML namespaced tag names
  1199. (experimental).
  1200. Bugs fixed
  1201. ----------
  1202. * ``ElementTree.parse()`` didn't handle target parser result.
  1203. * Crash in Element class lookup classes when the __init__() method of
  1204. the super class is not called from Python subclasses.
  1205. * A number of problems related to unicode/byte string conversion of
  1206. filenames and error messages were fixed.
  1207. * Building on MacOS-X now passes the "flat_namespace" option to the C
  1208. compiler, which reportedly prevents build quirks and crashes on this
  1209. platform.
  1210. * Windows build was broken.
  1211. * Rare crash when serialising to a file object with certain encodings.
  1212. Other changes
  1213. -------------
  1214. * Non-ASCII characters in attribute values are no longer escaped on
  1215. serialisation.
  1216. * Passing non-ASCII byte strings or invalid unicode strings as .tag,
  1217. namespaces, etc. will result in a ValueError instead of an
  1218. AssertionError (just like the tag well-formedness check).
  1219. * Up to several times faster attribute access (i.e. tree traversal) in
  1220. lxml.objectify.
  1221. 2.0.6 (2008-05-31)
  1222. ==================
  1223. Features added
  1224. --------------
  1225. Bugs fixed
  1226. ----------
  1227. * Incorrect evaluation of ``el.find("tag[child]")``.
  1228. * Windows build was broken.
  1229. * Moving a subtree from a document created in one thread into a
  1230. document of another thread could crash when the rest of the source
  1231. document is deleted while the subtree is still in use.
  1232. * Rare crash when serialising to a file object with certain encodings.
  1233. Other changes
  1234. -------------
  1235. * lxml should now build without problems on MacOS-X.
  1236. 2.1beta2 (2008-05-02)
  1237. =====================
  1238. Features added
  1239. --------------
  1240. * All parse functions in lxml.html take a ``parser`` keyword argument.
  1241. * lxml.html has a new parser class ``XHTMLParser`` and a module
  1242. attribute ``xhtml_parser`` that provide XML parsers that are
  1243. pre-configured for the lxml.html package.
  1244. Bugs fixed
  1245. ----------
  1246. * Moving a subtree from a document created in one thread into a
  1247. document of another thread could crash when the rest of the source
  1248. document is deleted while the subtree is still in use.
  1249. * Passing an nsmap when creating an Element will no longer strip
  1250. redundantly defined namespace URIs. This prevented the definition
  1251. of more than one prefix for a namespace on the same Element.
  1252. Other changes
  1253. -------------
  1254. * If the default namespace is redundantly defined with a prefix on the
  1255. same Element, the prefix will now be preferred for subelements and
  1256. attributes. This allows users to work around a problem in libxml2
  1257. where attributes from the default namespace could serialise without
  1258. a prefix even when they appear on an Element with a different
  1259. namespace (i.e. they would end up in the wrong namespace).
  1260. 2.0.5 (2008-05-01)
  1261. ==================
  1262. Features added
  1263. --------------
  1264. Bugs fixed
  1265. ----------
  1266. * Resolving to a filename in custom resolvers didn't work.
  1267. * lxml did not honour libxslt's second error state "STOPPED", which
  1268. let some XSLT errors pass silently.
  1269. * Memory leak in Schematron with libxml2 >= 2.6.31.
  1270. Other changes
  1271. -------------
  1272. 2.1beta1 (2008-04-15)
  1273. =====================
  1274. Features added
  1275. --------------
  1276. * Error logging in Schematron (requires libxml2 2.6.32 or later).
  1277. * Parser option ``strip_cdata`` for normalising or keeping CDATA
  1278. sections. Defaults to ``True`` as before, thus replacing CDATA
  1279. sections by their text content.
  1280. * ``CDATA()`` factory to wrap string content as CDATA section.
  1281. Bugs fixed
  1282. ----------
  1283. * Resolving to a filename in custom resolvers didn't work.
  1284. * lxml did not honour libxslt's second error state "STOPPED", which
  1285. let some XSLT errors pass silently.
  1286. * Memory leak in Schematron with libxml2 >= 2.6.31.
  1287. * lxml.etree accepted non well-formed namespace prefix names.
  1288. Other changes
  1289. -------------
  1290. * Major cleanup in internal ``moveNodeToDocument()`` function, which
  1291. takes care of namespace cleanup when moving elements between
  1292. different namespace contexts.
  1293. * New Elements created through the ``makeelement()`` method of an HTML
  1294. parser or through lxml.html now end up in a new HTML document
  1295. (doctype HTML 4.01 Transitional) instead of a generic XML document.
  1296. This mostly impacts the serialisation and the availability of a DTD
  1297. context.
  1298. 2.0.4 (2008-04-13)
  1299. ==================
  1300. Features added
  1301. --------------
  1302. Bugs fixed
  1303. ----------
  1304. * Hanging thread in conjunction with GTK threading.
  1305. * Crash bug in iterparse when moving elements into other documents.
  1306. * HTML elements' ``.cssselect()`` method was broken.
  1307. * ``ElementTree.find*()`` didn't accept QName objects.
  1308. Other changes
  1309. -------------
  1310. 2.1alpha1 (2008-03-27)
  1311. ======================
  1312. Features added
  1313. --------------
  1314. * New event types 'comment' and 'pi' in ``iterparse()``.
  1315. * ``XSLTAccessControl`` instances have a property ``options`` that
  1316. returns a dict of access configuration options.
  1317. * Constant instances ``DENY_ALL`` and ``DENY_WRITE`` on
  1318. ``XSLTAccessControl`` class.
  1319. * Extension elements for XSLT (experimental!)
  1320. * ``Element.base`` property returns the xml:base or HTML base URL of
  1321. an Element.
  1322. * ``docinfo.URL`` property is writable.
  1323. Bugs fixed
  1324. ----------
  1325. * Default encoding for plain text serialisation was different from
  1326. that of XML serialisation (UTF-8 instead of ASCII).
  1327. Other changes
  1328. -------------
  1329. * Minor API speed-ups.
  1330. * The benchmark suite now uses tail text in the trees, which makes the
  1331. absolute numbers incomparable to previous results.
  1332. * Generating the HTML documentation now requires Pygments_, which is
  1333. used to enable syntax highlighting for the doctest examples.
  1334. .. _Pygments: http://pygments.org/
  1335. Most long-time deprecated functions and methods were removed:
  1336. - ``etree.clearErrorLog()``, use ``etree.clear_error_log()``
  1337. - ``etree.useGlobalPythonLog()``, use
  1338. ``etree.use_global_python_log()``
  1339. - ``etree.ElementClassLookup.setFallback()``, use
  1340. ``etree.ElementClassLookup.set_fallback()``
  1341. - ``etree.getDefaultParser()``, use ``etree.get_default_parser()``
  1342. - ``etree.setDefaultParser()``, use ``etree.set_default_parser()``
  1343. - ``etree.setElementClassLookup()``, use
  1344. ``etree.set_element_class_lookup()``
  1345. Note that ``parser.setElementClassLookup()`` has not been removed
  1346. yet, although ``parser.set_element_class_lookup()`` should be used
  1347. instead.
  1348. - ``xpath_evaluator.registerNamespace()``, use
  1349. ``xpath_evaluator.register_namespace()``
  1350. - ``xpath_evaluator.registerNamespaces()``, use
  1351. ``xpath_evaluator.register_namespaces()``
  1352. - ``objectify.setPytypeAttributeTag``, use
  1353. ``objectify.set_pytype_attribute_tag``
  1354. - ``objectify.setDefaultParser()``, use
  1355. ``objectify.set_default_parser()``
  1356. 2.0.3 (2008-03-26)
  1357. ==================
  1358. Features added
  1359. --------------
  1360. * soupparser.parse() allows passing keyword arguments on to
  1361. BeautifulSoup.
  1362. * ``fromstring()`` method in ``lxml.html.soupparser``.
  1363. Bugs fixed
  1364. ----------
  1365. * ``lxml.html.diff`` didn't treat empty tags properly (e.g.,
  1366. ``<br>``).
  1367. * Handle entity replacements correctly in target parser.
  1368. * Crash when using ``iterparse()`` with XML Schema validation.
  1369. * The BeautifulSoup parser (soupparser.py) did not replace entities,
  1370. which made them turn up in text content.
  1371. * Attribute assignment of custom PyTypes in objectify could fail to
  1372. correctly serialise the value to a string.
  1373. Other changes
  1374. -------------
  1375. * ``lxml.html.ElementSoup`` was replaced by a new module
  1376. ``lxml.html.soupparser`` with a more consistent API. The old module
  1377. remains for compatibility with ElementTree's own ElementSoup module.
  1378. * Setting the XSLT_CONFIG and XML2_CONFIG environment variables at
  1379. build time will let setup.py pick up the ``xml2-config`` and
  1380. ``xslt-config`` scripts from the supplied path name.
  1381. * Passing ``--with-xml2-config=/path/to/xml2-config`` to setup.py will
  1382. override the ``xml2-config`` script that is used to determine the C
  1383. compiler options. The same applies for the ``--with-xslt-config``
  1384. option.
  1385. 2.0.2 (2008-02-22)
  1386. ==================
  1387. Features added
  1388. --------------
  1389. * Support passing ``base_url`` to file parser functions to override
  1390. the filename of the file(-like) object.
  1391. Bugs fixed
  1392. ----------
  1393. * The prefix for objectify's pytype namespace was missing from the set
  1394. of default prefixes.
  1395. * Memory leak in Schematron (fixed only for libxml2 2.6.31+).
  1396. * Error type names in RelaxNG were reported incorrectly.
  1397. * Slice deletion bug fixed in objectify.
  1398. Other changes
  1399. -------------
  1400. * Enabled doctests for some Python modules (especially ``lxml.html``).
  1401. * Add a ``method`` argument to ``lxml.html.tostring()``
  1402. (``method="xml"`` for XHTML output).
  1403. * Make it clearer that methods like ``lxml.html.fromstring()`` take a
  1404. ``base_url`` argument.
  1405. 2.0.1 (2008-02-13)
  1406. ==================
  1407. Features added
  1408. --------------
  1409. * Child iteration in ``lxml.pyclasslookup``.
  1410. * Loads of new docstrings reflect the signature of functions and
  1411. methods to make them visible in API docs and ``help()``
  1412. Bugs fixed
  1413. ----------
  1414. * The module ``lxml.html.builder`` was duplicated as
  1415. ``lxml.htmlbuilder``
  1416. * Form elements would return None for ``form.fields.keys()`` if there
  1417. was an unnamed input field. Now unnamed input fields are completely
  1418. ignored.
  1419. * Setting an element slice in objectify could insert slice-overlapping
  1420. elements at the wrong position.
  1421. Other changes
  1422. -------------
  1423. * The generated API documentation was cleaned up and disburdened from
  1424. non-public classes etc.
  1425. * The previously public module ``lxml.html.setmixin`` was renamed to
  1426. ``lxml.html._setmixin`` as it is not an official part of lxml. If
  1427. you want to use it, feel free to copy it over to your own source
  1428. base.
  1429. * Passing ``--with-xslt-config=/path/to/xslt-config`` to setup.py will
  1430. override the ``xslt-config`` script that is used to determine the C
  1431. compiler options.
  1432. 2.0 (2008-02-01)
  1433. ================
  1434. Features added
  1435. --------------
  1436. * Passing the ``unicode`` type as ``encoding`` to ``tostring()`` will
  1437. serialise to unicode. The ``tounicode()`` function is now
  1438. deprecated.
  1439. * ``XMLSchema()`` and ``RelaxNG()`` can parse from StringIO.
  1440. * ``makeparser()`` function in ``lxml.objectify`` to create a new
  1441. parser with the usual objectify setup.
  1442. * Plain ASCII XPath string results are no longer forced into unicode
  1443. objects as in 2.0beta1, but are returned as plain strings as before.
  1444. * All XPath string results are 'smart' objects that have a
  1445. ``getparent()`` method to retrieve their parent Element.
  1446. * ``with_tail`` option in serialiser functions.
  1447. * More accurate exception messages in validator creation.
  1448. * Parse-time XML schema validation (``schema`` parser keyword).
  1449. * XPath string results of the ``text()`` function and attribute
  1450. selection make their Element container accessible through a
  1451. ``getparent()`` method. As a side-effect, they are now always
  1452. unicode objects (even ASCII strings).
  1453. * ``XSLT`` objects are usable in any thread - at the cost of a deep
  1454. copy if they were not created in that thread.
  1455. * Invalid entity names and character references will be rejected by
  1456. the ``Entity()`` factory.
  1457. * ``entity.text`` returns the textual representation of the entity,
  1458. e.g. ``&amp;``.
  1459. * New properties ``position`` and ``code`` on ParseError exception (as
  1460. in ET 1.3)
  1461. * Rich comparison of ``element.attrib`` proxies.
  1462. * ElementTree compatible TreeBuilder class.
  1463. * Use default prefixes for some common XML namespaces.
  1464. * ``lxml.html.clean.Cleaner`` now allows for a ``host_whitelist``, and
  1465. two overridable methods: ``allow_embedded_url(el, url)`` and the
  1466. more general ``allow_element(el)``.
  1467. * Extended slicing of Elements as in ``element[1:-1:2]``, both in
  1468. etree and in objectify
  1469. * Resolvers can now provide a ``base_url`` keyword argument when
  1470. resolving a document as string data.
  1471. * When using ``lxml.doctestcompare`` you can give the doctest option
  1472. ``NOPARSE_MARKUP`` (like ``# doctest: +NOPARSE_MARKUP``) to suppress
  1473. the special checking for one test.
  1474. * Separate ``feed_error_log`` property for the feed parser interface.
  1475. The normal parser interface and ``iterparse`` continue to use
  1476. ``error_log``.
  1477. * The normal parsers and the feed parser interface are now separated
  1478. and can be used concurrently on the same parser instance.
  1479. * ``fromstringlist()`` and ``tostringlist()`` functions as in
  1480. ElementTree 1.3
  1481. * ``iterparse()`` accepts an ``html`` boolean keyword argument for
  1482. parsing with the HTML parser (note that this interface may be
  1483. subject to change)
  1484. * Parsers accept an ``encoding`` keyword argument that overrides the encoding
  1485. of the parsed documents.
  1486. * New C-API function ``hasChild()`` to test for children
  1487. * ``annotate()`` function in objectify can annotate with Python types and XSI
  1488. types in one step. Accompanied by ``xsiannotate()`` and ``pyannotate()``.
  1489. * ``ET.write()``, ``tostring()`` and ``tounicode()`` now accept a keyword
  1490. argument ``method`` that can be one of 'xml' (or None), 'html' or 'text' to
  1491. serialise as XML, HTML or plain text content.
  1492. * ``iterfind()`` method on Elements returns an iterator equivalent to
  1493. ``findall()``
  1494. * ``itertext()`` method on Elements
  1495. * Setting a QName object as value of the .text property or as an attribute
  1496. will resolve its prefix in the respective context
  1497. * ElementTree-like parser target interface as described in
  1498. http://effbot.org/elementtree/elementtree-xmlparser.htm
  1499. * ElementTree-like feed parser interface on XMLParser and HTMLParser
  1500. (``feed()`` and ``close()`` methods)
  1501. * Reimplemented ``objectify.E`` for better performance and improved
  1502. integration with objectify. Provides extended type support based on
  1503. registered PyTypes.
  1504. * XSLT objects now support deep copying
  1505. * New ``makeSubElement()`` C-API function that allows creating a new
  1506. subelement straight with text, tail and attributes.
  1507. * XPath extension functions can now access the current context node
  1508. (``context.context_node``) and use a context dictionary
  1509. (``context.eval_context``) from the context provided in their first
  1510. parameter
  1511. * HTML tag soup parser based on BeautifulSoup in ``lxml.html.ElementSoup``
  1512. * New module ``lxml.doctestcompare`` by Ian Bicking for writing simplified
  1513. doctests based on XML/HTML output. Use by importing ``lxml.usedoctest`` or
  1514. ``lxml.html.usedoctest`` from within a doctest.
  1515. * New module ``lxml.cssselect`` by Ian Bicking for selecting Elements with CSS
  1516. selectors.
  1517. * New package ``lxml.html`` written by Ian Bicking for advanced HTML
  1518. treatment.
  1519. * Namespace class setup is now local to the ``ElementNamespaceClassLookup``
  1520. instance and no longer global.
  1521. * Schematron validation (incomplete in libxml2)
  1522. * Additional ``stringify`` argument to ``objectify.PyType()`` takes a
  1523. conversion function to strings to support setting text values from arbitrary
  1524. types.
  1525. * Entity support through an ``Entity`` factory and element classes. XML
  1526. parsers now have a ``resolve_entities`` keyword argument that can be set to
  1527. False to keep entities in the document.
  1528. * ``column`` field on error log entries to accompany the ``line`` field
  1529. * Error specific messages in XPath parsing and evaluation
  1530. NOTE: for evaluation errors, you will now get an XPathEvalError instead of
  1531. an XPathSyntaxError. To catch both, you can except on ``XPathError``
  1532. * The regular expression functions in XPath now support passing a node-set
  1533. instead of a string
  1534. * Extended type annotation in objectify: new ``xsiannotate()`` function
  1535. * EXSLT RegExp support in standard XPath (not only XSLT)
  1536. Bugs fixed
  1537. ----------
  1538. * Missing import in ``lxml.html.clean``.
  1539. * Some Python 2.4-isms prevented lxml from building/running under
  1540. Python 2.3.
  1541. * XPath on ElementTrees could crash when selecting the virtual root
  1542. node of the ElementTree.
  1543. * Compilation ``--without-threading`` was buggy in alpha5/6.
  1544. * Memory leak in the ``parse()`` function.
  1545. * Minor bugs in XSLT error message formatting.
  1546. * Result document memory leak in target parser.
  1547. * Target parser failed to report comments.
  1548. * In the ``lxml.html`` ``iter_links`` method, links in ``<object>``
  1549. tags weren't recognized. (Note: plugin-specific link parameters
  1550. still aren't recognized.) Also, the ``<embed>`` tag, though not
  1551. standard, is now included in ``lxml.html.defs.special_inline_tags``.
  1552. * Using custom resolvers on XSLT stylesheets parsed from a string
  1553. could request ill-formed URLs.
  1554. * With ``lxml.doctestcompare`` if you do ``<tag xmlns="...">`` in your
  1555. output, it will then be namespace-neutral (before the ellipsis was
  1556. treated as a real namespace).
  1557. * AttributeError in feed parser on parse errors
  1558. * XML feed parser setup problem
  1559. * Type annotation for unicode strings in ``DataElement()``
  1560. * lxml failed to serialise namespace declarations of elements other than the
  1561. root node of a tree
  1562. * Race condition in XSLT where the resolver context leaked between concurrent
  1563. XSLT calls
  1564. * lxml.etree did not check tag/attribute names
  1565. * The XML parser did not report undefined entities as error
  1566. * The text in exceptions raised by XML parsers, validators and XPath
  1567. evaluators now reports the first error that occurred instead of the last
  1568. * Passing '' as XPath namespace prefix did not raise an error
  1569. * Thread safety in XPath evaluators
  1570. Other changes
  1571. -------------
  1572. * Exceptions carry only the part of the error log that is related to
  1573. the operation that caused the error.
  1574. * ``XMLSchema()`` and ``RelaxNG()`` now enforce passing the source
  1575. file/filename through the ``file`` keyword argument.
  1576. * The test suite now skips most doctests under Python 2.3.
  1577. * ``make clean`` no longer removes the .c files (use ``make
  1578. realclean`` instead)
  1579. * Minor performance tweaks for Element instantiation and subelement
  1580. creation
  1581. * Various places in the XPath, XSLT and iteration APIs now require
  1582. keyword-only arguments.
  1583. * The argument order in ``element.itersiblings()`` was changed to
  1584. match the order used in all other iteration methods. The second
  1585. argument ('preceding') is now a keyword-only argument.
  1586. * The ``getiterator()`` method on Elements and ElementTrees was
  1587. reverted to return an iterator as it did in lxml 1.x. The ET API
  1588. specification allows it to return either a sequence or an iterator,
  1589. and it traditionally returned a sequence in ET and an iterator in
  1590. lxml. However, it is now deprecated in favour of the ``iter()``
  1591. method, which should be used in new code wherever possible.
  1592. * The 'pretty printed' serialisation of ElementTree objects now
  1593. inserts newlines at the root level between processing instructions,
  1594. comments and the root tag.
  1595. * A 'pretty printed' serialisation is now terminated with a newline.
  1596. * Second argument to ``lxml.etree.Extension()`` helper is no longer
  1597. required, third argument is now a keyword-only argument ``ns``.
  1598. * ``lxml.html.tostring`` takes an ``encoding`` argument.
  1599. * The module source files were renamed to "lxml.*.pyx", such as
  1600. "lxml.etree.pyx". This was changed for consistency with the way
  1601. Pyrex commonly handles package imports. The main effect is that
  1602. classes now know about their fully qualified class name, including
  1603. the package name of their module.
  1604. * Keyword-only arguments in some API functions, especially in the
  1605. parsers and serialisers.
  1606. * Tag name validation in lxml.etree (and lxml.html) now distinguishes
  1607. between HTML tags and XML tags based on the parser that was used to
  1608. parse or create them. HTML tags no longer reject any non-ASCII
  1609. characters in tag names but only spaces and the special characters
  1610. ``<>&/"'``.
  1611. * lxml.etree now emits a warning if you use XPath with libxml2 2.6.27
  1612. (which can crash on certain XPath errors)
  1613. * Type annotation in objectify now preserves the already annotated type by
  1614. default to prevent loosing type information that is already there.
  1615. * ``element.getiterator()`` returns a list, use ``element.iter()`` to retrieve
  1616. an iterator (ElementTree 1.3 compatible behaviour)
  1617. * objectify.PyType for None is now called "NoneType"
  1618. * ``el.getiterator()`` renamed to ``el.iter()``, following ElementTree 1.3 -
  1619. original name is still available as alias
  1620. * In the public C-API, ``findOrBuildNodeNs()`` was replaced by the more
  1621. generic ``findOrBuildNodeNsPrefix``
  1622. * Major refactoring in XPath/XSLT extension function code
  1623. * Network access in parsers disabled by default
  1624. 1.3.6 (2007-10-29)
  1625. ==================
  1626. Bugs fixed
  1627. ----------
  1628. * Backported decref crash fix from 2.0
  1629. * Well hidden free-while-in-use crash bug in ObjectPath
  1630. Other changes
  1631. -------------
  1632. * The test suites now run ``gc.collect()`` in the ``tearDown()``
  1633. methods. While this makes them take a lot longer to run, it also
  1634. makes it easier to link a specific test to garbage collection
  1635. problems that would otherwise appear in later tests.
  1636. 1.3.5 (2007-10-22)
  1637. ==================
  1638. Features added
  1639. --------------
  1640. Bugs fixed
  1641. ----------
  1642. * lxml.etree could crash when adding more than 10000 namespaces to a
  1643. document
  1644. * lxml failed to serialise namespace declarations of elements other
  1645. than the root node of a tree
  1646. 1.3.4 (2007-08-30)
  1647. ==================
  1648. Features added
  1649. --------------
  1650. * The ``ElementMaker`` in ``lxml.builder`` now accepts the keyword arguments
  1651. ``namespace`` and ``nsmap`` to set a namespace and nsmap for the Elements it
  1652. creates.
  1653. * The ``docinfo`` on ElementTree objects has new properties ``internalDTD``
  1654. and ``externalDTD`` that return a DTD object for the internal or external
  1655. subset of the document respectively.
  1656. * Serialising an ElementTree now includes any internal DTD subsets that are
  1657. part of the document, as well as comments and PIs that are siblings of the
  1658. root node.
  1659. Bugs fixed
  1660. ----------
  1661. * Parsing with the ``no_network`` option could fail
  1662. Other changes
  1663. -------------
  1664. * lxml now raises a TagNameWarning about tag names containing ':' instead of
  1665. an Error as 1.3.3 did. The reason is that a number of projects currently
  1666. misuse the previous lack of tag name validation to generate namespace
  1667. prefixes without declaring namespaces. Apart from the danger of generating
  1668. broken XML this way, it also breaks most of the namespace-aware tools in
  1669. XML, including XPath, XSLT and validation. lxml 1.3.x will continue to
  1670. support this bug with a Warning, while lxml 2.0 will be strict about
  1671. well-formed tag names (not only regarding ':').
  1672. * Serialising an Element no longer includes its comment and PI siblings (only
  1673. ElementTree serialisation includes them).
  1674. 1.3.3 (2007-07-26)
  1675. ==================
  1676. Features added
  1677. --------------
  1678. * ElementTree compatible parser ``ETCompatXMLParser`` strips processing
  1679. instructions and comments while parsing XML
  1680. * Parsers now support stripping PIs (keyword argument 'remove_pis')
  1681. * ``etree.fromstring()`` now supports parsing both HTML and XML, depending on
  1682. the parser you pass.
  1683. * Support ``base_url`` keyword argument in ``HTML()`` and ``XML()``
  1684. Bugs fixed
  1685. ----------
  1686. * Parsing from Python Unicode strings failed on some platforms
  1687. * ``Element()`` did not raise an exception on tag names containing ':'
  1688. * ``Element.getiterator(tag)`` did not accept ``Comment`` and
  1689. ``ProcessingInstruction`` as tags. It also accepts ``Element`` now.
  1690. 1.3.2 (2007-07-03)
  1691. ==================
  1692. Features added
  1693. --------------
  1694. Bugs fixed
  1695. ----------
  1696. * "deallocating None" crash bug
  1697. 1.3.1 (2007-07-02)
  1698. ==================
  1699. Features added
  1700. --------------
  1701. * objectify.DataElement now supports setting values from existing data
  1702. elements (not just plain Python types) and reuses defined namespaces etc.
  1703. * E-factory support for lxml.objectify (``objectify.E``)
  1704. Bugs fixed
  1705. ----------
  1706. * Better way to prevent crashes in Element proxy cleanup code
  1707. * objectify.DataElement didn't set up None value correctly
  1708. * objectify.DataElement didn't check the value against the provided type hints
  1709. * Reference-counting bug in ``Element.attrib.pop()``
  1710. 1.3 (2007-06-24)
  1711. ================
  1712. Features added
  1713. --------------
  1714. * Module ``lxml.pyclasslookup`` module implements an Element class lookup
  1715. scheme that can access the entire tree in read-only mode to help determining
  1716. a suitable Element class
  1717. * Parsers take a ``remove_comments`` keyword argument that skips over comments
  1718. * ``parse()`` function in ``objectify``, corresponding to ``XML()`` etc.
  1719. * ``Element.addnext(el)`` and ``Element.addprevious(el)`` methods to support
  1720. adding processing instructions and comments around the root node
  1721. * ``Element.attrib`` was missing ``clear()`` and ``pop()`` methods
  1722. * Extended type annotation in objectify: cleaner annotation namespace setup
  1723. plus new ``deannotate()`` function
  1724. * Support for custom Element class instantiation in lxml.sax: passing a
  1725. ``makeelement`` function to the ElementTreeContentHandler will reuse the
  1726. lookup context of that function
  1727. * '.' represents empty ObjectPath (identity)
  1728. * ``Element.values()`` to accompany the existing ``.keys()`` and ``.items()``
  1729. * ``collectAttributes()`` C-function to build a list of attribute
  1730. keys/values/items for a libxml2 node
  1731. * ``DTD`` validator class (like ``RelaxNG`` and ``XMLSchema``)
  1732. * HTML generator helpers by Fredrik Lundh in ``lxml.htmlbuilder``
  1733. * ``ElementMaker`` XML generator by Fredrik Lundh in ``lxml.builder.E``
  1734. * Support for pickeling ``objectify.ObjectifiedElement`` objects to XML
  1735. * ``update()`` method on Element.attrib
  1736. * Optimised replacement for libxml2's _xmlReconsiliateNs(). This allows lxml
  1737. a better handling of namespaces when moving elements between documents.
  1738. Bugs fixed
  1739. ----------
  1740. * Removing Elements from a tree could make them loose their namespace
  1741. declarations
  1742. * ``ElementInclude`` didn't honour base URL of original document
  1743. * Replacing the children slice of an Element would cut off the tails of the
  1744. original children
  1745. * ``Element.getiterator(tag)`` did not accept ``Comment`` and
  1746. ``ProcessingInstruction`` as tags
  1747. * API functions now check incoming strings for XML conformity. Zero bytes or
  1748. low ASCII characters are no longer accepted (AssertionError).
  1749. * XSLT parsing failed to pass resolver context on to imported documents
  1750. * passing '' as namespace prefix in nsmap could be passed through to libxml2
  1751. * Objectify couldn't handle prefixed XSD type names in ``xsi:type``
  1752. * More ET compatible behaviour when writing out XML declarations or not
  1753. * More robust error handling in ``iterparse()``
  1754. * Documents lost their top-level PIs and comments on serialisation
  1755. * lxml.sax failed on comments and PIs. Comments are now properly ignored and
  1756. PIs are copied.
  1757. * Possible memory leaks in namespace handling when moving elements between
  1758. documents
  1759. Other changes
  1760. -------------
  1761. * major restructuring in the documentation
  1762. 1.2.1 (2007-02-27)
  1763. ==================
  1764. Bugs fixed
  1765. ----------
  1766. * Build fixes for MS compiler
  1767. * Item assignments to special names like ``element["text"]`` failed
  1768. * Renamed ObjectifiedDataElement.__setText() to _setText() to make it easier
  1769. to access
  1770. * The pattern for attribute names in ObjectPath was too restrictive
  1771. 1.2 (2007-02-20)
  1772. ================
  1773. Features added
  1774. --------------
  1775. * Rich comparison of QName objects
  1776. * Support for regular expressions in benchmark selection
  1777. * get/set emulation (not .attrib!) for attributes on processing instructions
  1778. * ElementInclude Python module for ElementTree compatible XInclude processing
  1779. that honours custom resolvers registered with the source document
  1780. * ElementTree.parser property holds the parser used to parse the document
  1781. * setup.py has been refactored for greater readability and flexibility
  1782. * --rpath flag to setup.py to induce automatic linking-in of dynamic library
  1783. runtime search paths has been renamed to --auto-rpath. This makes it
  1784. possible to pass an --rpath directly to distutils; previously this was being
  1785. shadowed.
  1786. Bugs fixed
  1787. ----------
  1788. * Element instantiation now uses locks to prevent race conditions with threads
  1789. * ElementTree.write() did not raise an exception when the file was not writable
  1790. * Error handling could crash under Python <= 2.4.1 - fixed by disabling thread
  1791. support in these environments
  1792. * Element.find*() did not accept QName objects as path
  1793. Other changes
  1794. -------------
  1795. * code cleanup: redundant _NodeBase super class merged into _Element class
  1796. Note: although the impact should be zero in most cases, this change breaks
  1797. the compatibiliy of the public C-API
  1798. 1.1.2 (2006-10-30)
  1799. ==================
  1800. Features added
  1801. --------------
  1802. * Data elements in objectify support repr(), which is now used by dump()
  1803. * Source distribution now ships with a patched Pyrex
  1804. * New C-API function makeElement() to create new elements with text,
  1805. tail, attributes and namespaces
  1806. * Reuse original parser flags for XInclude
  1807. * Simplified support for handling XSLT processing instructions
  1808. Bugs fixed
  1809. ----------
  1810. * Parser resources were not freed before the next parser run
  1811. * Open files and XML strings returned by Python resolvers were not
  1812. closed/freed
  1813. * Crash in the IDDict returned by XMLDTDID
  1814. * Copying Comments and ProcessingInstructions failed
  1815. * Memory leak for external URLs in _XSLTProcessingInstruction.parseXSL()
  1816. * Memory leak when garbage collecting tailed root elements
  1817. * HTML script/style content was not propagated to .text
  1818. * Show text xincluded between text nodes correctly in .text and .tail
  1819. * 'integer * objectify.StringElement' operation was not supported
  1820. 1.1.1 (2006-09-21)
  1821. ==================
  1822. Features added
  1823. --------------
  1824. * XSLT profiling support (``profile_run`` keyword)
  1825. * countchildren() method on objectify.ObjectifiedElement
  1826. * Support custom elements for tree nodes in lxml.objectify
  1827. Bugs fixed
  1828. ----------
  1829. * lxml.objectify failed to support long data values (e.g., "123L")
  1830. * Error messages from XSLT did not reach ``XSLT.error_log``
  1831. * Factories objectify.Element() and objectify.DataElement() were missing
  1832. ``attrib`` and ``nsmap`` keyword arguments
  1833. * Changing the default parser in lxml.objectify did not update the factories
  1834. Element() and DataElement()
  1835. * Let lxml.objectify.Element() always generate tree elements (not data
  1836. elements)
  1837. * Build under Windows failed ('\0' bug in patched Pyrex version)
  1838. 1.1 (2006-09-13)
  1839. ================
  1840. Features added
  1841. --------------
  1842. * Comments and processing instructions return '<!-- coment -->' and
  1843. '<?pi-target content?>' for repr()
  1844. * Parsers are now the preferred (and default) place where element class lookup
  1845. schemes should be registered. Namespace lookup is no longer supported by
  1846. default.
  1847. * Support for Python 2.5 beta
  1848. * Unlock the GIL for deep copying documents and for XPath()
  1849. * New ``compact`` keyword argument for parsing read-only documents
  1850. * Support for parser options in iterparse()
  1851. * The ``namespace`` axis is supported in XPath and returns (prefix, URI)
  1852. tuples
  1853. * The XPath expression "/" now returns an empty list instead of raising an
  1854. exception
  1855. * XML-Object API on top of lxml (lxml.objectify)
  1856. * Customizable Element class lookup:
  1857. * different pre-implemented lookup mechanisms
  1858. * support for externally provided lookup functions
  1859. * Support for processing instructions (ET-like, not compatible)
  1860. * Public C-level API for independent extension modules
  1861. * Module level ``iterwalk()`` function as 'iterparse' for trees
  1862. * Module level ``iterparse()`` function similar to ElementTree (see
  1863. documentation for differences)
  1864. * Element.nsmap property returns a mapping of all namespace prefixes known at
  1865. the Element to their namespace URI
  1866. * Reentrant threading support in RelaxNG, XMLSchema and XSLT
  1867. * Threading support in parsers and serializers:
  1868. * All in-memory operations (tostring, parse(StringIO), etc.) free the GIL
  1869. * File operations (on file names) free the GIL
  1870. * Reading from file-like objects frees the GIL and reacquires it for reading
  1871. * Serialisation to file-like objects is single-threaded (high lock overhead)
  1872. * Element iteration over XPath axes:
  1873. * Element.iterdescendants() iterates over the descendants of an element
  1874. * Element.iterancestors() iterates over the ancestors of an element (from
  1875. parent to parent)
  1876. * Element.itersiblings() iterates over either the following or preceding
  1877. siblings of an element
  1878. * Element.iterchildren() iterates over the children of an element in either
  1879. direction
  1880. * All iterators support the ``tag`` keyword argument to restrict the
  1881. generated elements
  1882. * Element.getnext() and Element.getprevious() return the direct siblings of an
  1883. element
  1884. Bugs fixed
  1885. ----------
  1886. * filenames with local 8-bit encoding were not supported
  1887. * 1.1beta did not compile under Python 2.3
  1888. * ignore unknown 'pyval' attribute values in objectify
  1889. * objectify.ObjectifiedElement.addattr() failed to accept Elements and Lists
  1890. * objectify.ObjectPath.setattr() failed to accept Elements and Lists
  1891. * XPathSyntaxError now inherits from XPathError
  1892. * Threading race conditions in RelaxNG and XMLSchema
  1893. * Crash when mixing elements from XSLT results into other trees, concurrent
  1894. XSLT is only allowed when the stylesheet was parsed in the main thread
  1895. * The EXSLT ``regexp:match`` function now works as defined (except for some
  1896. differences in the regular expression syntax)
  1897. * Setting element.text to '' returned None on request, not the empty string
  1898. * ``iterparse()`` could crash on long XML files
  1899. * Creating documents no longer copies the parser for later URL resolving. For
  1900. performance reasons, only a reference is kept. Resolver updates on the
  1901. parser will now be reflected by documents that were parsed before the
  1902. change. Although this should rarely become visible, it is a behavioral
  1903. change from 1.0.
  1904. 1.0.4 (2006-09-09)
  1905. ==================
  1906. Features added
  1907. --------------
  1908. * List-like ``Element.extend()`` method
  1909. Bugs fixed
  1910. ----------
  1911. * Crash in tail handling in ``Element.replace()``
  1912. 1.0.3 (2006-08-08)
  1913. ==================
  1914. Features added
  1915. --------------
  1916. * Element.replace(old, new) method to replace a subelement by another one
  1917. Bugs fixed
  1918. ----------
  1919. * Crash when mixing elements from XSLT results into other trees
  1920. * Copying/deepcopying did not work for ElementTree objects
  1921. * Setting an attribute to a non-string value did not raise an exception
  1922. * Element.remove() deleted the tail text from the removed Element
  1923. 1.0.2 (2006-06-27)
  1924. ==================
  1925. Features added
  1926. --------------
  1927. * Support for setting a custom default Element class as opposed to namespace
  1928. specific classes (which still override the default class)
  1929. Bugs fixed
  1930. ----------
  1931. * Rare exceptions in Python list functions were not handled
  1932. * Parsing accepted unicode strings with XML encoding declaration in certain
  1933. cases
  1934. * Parsing 8-bit encoded strings from StringIO objects raised an exception
  1935. * Module function ``initThread()`` was removed - useless (and never worked)
  1936. * XSLT and parser exception messages include the error line number
  1937. 1.0.1 (2006-06-09)
  1938. ==================
  1939. Features added
  1940. --------------
  1941. * Repeated calls to Element.attrib now efficiently return the same instance
  1942. Bugs fixed
  1943. ----------
  1944. * Document deallocation could crash in certain garbage collection scenarios
  1945. * Extension function calls in XSLT variable declarations could break the
  1946. stylesheet and crash on repeated calls
  1947. * Deep copying Elements could loose namespaces declared in parents
  1948. * Deep copying Elements did not copy tail
  1949. * Parsing file(-like) objects failed to load external entities
  1950. * Parsing 8-bit strings from file(-like) objects raised an exception
  1951. * xsl:include failed when the stylesheet was parsed from a file-like object
  1952. * lxml.sax.ElementTreeProducer did not call startDocument() / endDocument()
  1953. * MSVC compiler complained about long strings (supports only 2048 bytes)
  1954. 1.0 (2006-06-01)
  1955. ================
  1956. Features added
  1957. --------------
  1958. * Element.getiterator() and the findall() methods support finding arbitrary
  1959. elements from a namespace (pattern ``{namespace}*``)
  1960. * Another speedup in tree iteration code
  1961. * General speedup of Python Element object creation and deallocation
  1962. * Writing C14N no longer serializes in memory (reduced memory footprint)
  1963. * PyErrorLog for error logging through the Python ``logging`` module
  1964. * ``Element.getroottree()`` returns an ElementTree for the root node of the
  1965. document that contains the element.
  1966. * ElementTree.getpath(element) returns a simple, absolute XPath expression to
  1967. find the element in the tree structure
  1968. * Error logs have a ``last_error`` attribute for convenience
  1969. * Comment texts can be changed through the API
  1970. * Formatted output via ``pretty_print`` keyword in serialization functions
  1971. * XSLT can block access to file system and network via ``XSLTAccessControl``
  1972. * ElementTree.write() no longer serializes in memory (reduced memory
  1973. footprint)
  1974. * Speedup of Element.findall(tag) and Element.getiterator(tag)
  1975. * Support for writing the XML representation of Elements and ElementTrees to
  1976. Python unicode strings via ``etree.tounicode()``
  1977. * Support for writing XSLT results to Python unicode strings via ``unicode()``
  1978. * Parsing a unicode string no longer copies the string (reduced memory
  1979. footprint)
  1980. * Parsing file-like objects reads chunks rather than the whole file (reduced
  1981. memory footprint)
  1982. * Parsing StringIO objects from the start avoids copying the string (reduced
  1983. memory footprint)
  1984. * Read-only 'docinfo' attribute in ElementTree class holds DOCTYPE
  1985. information, original encoding and XML version as seen by the parser
  1986. * etree module can be compiled without libxslt by commenting out the line
  1987. ``include "xslt.pxi"`` near the end of the etree.pyx source file
  1988. * Better error messages in parser exceptions
  1989. * Error reporting also works in XSLT
  1990. * Support for custom document loaders (URI resolvers) in parsers and XSLT,
  1991. resolvers are registered at parser level
  1992. * Implementation of exslt:regexp for XSLT based on the Python 're' module,
  1993. enabled by default, can be switched off with 'regexp=False' keyword argument
  1994. * Support for exslt extensions (libexslt) and libxslt extra functions
  1995. (node-set, document, write, output)
  1996. * Substantial speedup in XPath.evaluate()
  1997. * HTMLParser for parsing (broken) HTML
  1998. * XMLDTDID function parses XML into tuple (root node, ID dict) based on xml:id
  1999. implementation of libxml2 (as opposed to ET compatible XMLID)
  2000. Bugs fixed
  2001. ----------
  2002. * Memory leak in Element.__setitem__
  2003. * Memory leak in Element.attrib.items() and Element.attrib.values()
  2004. * Memory leak in XPath extension functions
  2005. * Memory leak in unicode related setup code
  2006. * Element now raises ValueError on empty tag names
  2007. * Namespace fixing after moving elements between documents could fail if the
  2008. source document was freed too early
  2009. * Setting namespace-less tag names on namespaced elements ('{ns}t' -> 't')
  2010. didn't reset the namespace
  2011. * Unknown constants from newer libxml2 versions could raise exceptions in the
  2012. error handlers
  2013. * lxml.etree compiles much faster
  2014. * On libxml2 <= 2.6.22, parsing strings with encoding declaration could fail
  2015. in certain cases
  2016. * Document reference in ElementTree objects was not updated when the root
  2017. element was moved to a different document
  2018. * Running absolute XPath expressions on an Element now evaluates against the
  2019. root tree
  2020. * Evaluating absolute XPath expressions (``/*``) on an ElementTree could fail
  2021. * Crashes when calling XSLT, RelaxNG, etc. with uninitialized ElementTree
  2022. objects
  2023. * Removed public function ``initThreadLogging()``, replaced by more general
  2024. ``initThread()`` which fixes a number of setup problems in threads
  2025. * Memory leak when using iconv encoders in tostring/write
  2026. * Deep copying Elements and ElementTrees maintains the document information
  2027. * Serialization functions raise LookupError for unknown encodings
  2028. * Memory deallocation crash resulting from deep copying elements
  2029. * Some ElementTree methods could crash if the root node was not initialized
  2030. (neither file nor element passed to the constructor)
  2031. * Element/SubElement failed to set attribute namespaces from passed ``attrib``
  2032. dictionary
  2033. * ``tostring()`` adds an XML declaration for non-ASCII encodings
  2034. * ``tostring()`` failed to serialize encodings that contain 0-bytes
  2035. * ElementTree.xpath() and XPathDocumentEvaluator were not using the
  2036. ElementTree root node as reference point
  2037. * Calling ``document('')`` in XSLT failed to return the stylesheet
  2038. 0.9.2 (2006-05-10)
  2039. ==================
  2040. Features added
  2041. --------------
  2042. * Speedup for Element.makeelement(): the new element reuses the original
  2043. libxml2 document instead of creating a new empty one
  2044. * Speedup for reversed() iteration over element children (Py2.4+ only)
  2045. * ElementTree compatible QName class
  2046. * RelaxNG and XMLSchema accept any Element, not only ElementTrees
  2047. Bugs fixed
  2048. ----------
  2049. * str(xslt_result) was broken for XSLT output other than UTF-8
  2050. * Memory leak if write_c14n fails to write the file after conversion
  2051. * Crash in XMLSchema and RelaxNG when passing non-schema documents
  2052. * Memory leak in RelaxNG() when RelaxNGParseError is raised
  2053. 0.9.1 (2006-03-30)
  2054. ==================
  2055. Features added
  2056. --------------
  2057. * lxml.sax.ElementTreeContentHandler checks closing elements and raises
  2058. SaxError on mismatch
  2059. * lxml.sax.ElementTreeContentHandler supports namespace-less SAX events
  2060. (startElement, endElement) and defaults to empty attributes (keyword
  2061. argument)
  2062. * Speedup for repeatedly accessing element tag names
  2063. * Minor API performance improvements
  2064. Bugs fixed
  2065. ----------
  2066. * Memory deallocation bug when using XSLT output method "html"
  2067. * sax.py was handling UTF-8 encoded tag names where it shouldn't
  2068. * lxml.tests package will no longer be installed (is still in source tar)
  2069. 0.9 (2006-03-20)
  2070. ================
  2071. Features added
  2072. --------------
  2073. * Error logging API for libxml2 error messages
  2074. * Various performance improvements
  2075. * Benchmark script for lxml, ElementTree and cElementTree
  2076. * Support for registering extension functions through new FunctionNamespace
  2077. class (see doc/extensions.txt)
  2078. * ETXPath class for XPath expressions in ElementTree notation ('//{ns}tag')
  2079. * Support for variables in XPath expressions (also in XPath class)
  2080. * XPath class for compiled XPath expressions
  2081. * XMLID module level function (ElementTree compatible)
  2082. * XMLParser API for customized libxml2 parser configuration
  2083. * Support for custom Element classes through new Namespace API (see
  2084. doc/namespace_extensions.txt)
  2085. * Common exception base class LxmlError for module exceptions
  2086. * real iterator support in iter(Element), Element.getiterator()
  2087. * XSLT objects are callable, result trees support str()
  2088. * Added MANIFEST.in for easier creation of RPM files.
  2089. * 'getparent' method on elements allows navigation to an element's
  2090. parent element.
  2091. * Python core compatible SAX tree builder and SAX event generator. See
  2092. doc/sax.txt for more information.
  2093. Bugs fixed
  2094. ----------
  2095. * Segfaults and memory leaks in various API functions of Element
  2096. * Segfault in XSLT.tostring()
  2097. * ElementTree objects no longer interfere, Elements can be root of different
  2098. ElementTrees at the same time
  2099. * document('') works in XSLT documents read from files (in-memory documents
  2100. cannot support this due to libxslt deficiencies)
  2101. 0.8 (2005-11-03)
  2102. ================
  2103. Features added
  2104. --------------
  2105. * Support for copy.deepcopy() on elements. copy.copy() works also, but
  2106. does the same thing, and does *not* create a shallow copy, as that
  2107. makes no sense in the context of libxml2 trees. This means a
  2108. potential incompatibility with ElementTree, but there's more chance
  2109. that it works than if copy.copy() isn't supported at all.
  2110. * Increased compatibility with (c)ElementTree; .parse() on ElementTree is
  2111. supported and parsing of gzipped XML files works.
  2112. * implemented index() on elements, allowing one to find the index of a
  2113. SubElement.
  2114. Bugs fixed
  2115. ----------
  2116. * Use xslt-config instead of xml2-config to find out libxml2
  2117. directories to take into account a case where libxslt is installed
  2118. in a different directory than libxslt.
  2119. * Eliminate crash condition in iteration when text nodes are changed.
  2120. * Passing 'None' to tostring() does not result in a segfault anymore,
  2121. but an AssertionError.
  2122. * Some test fixes for Windows.
  2123. * Raise XMLSyntaxError and XPathSyntaxError instead of plain python
  2124. syntax errors. This should be less confusing.
  2125. * Fixed error with uncaught exception in Pyrex code.
  2126. * Calling lxml.etree.fromstring('') throws XMLSyntaxError instead of a
  2127. segfault.
  2128. * has_key() works on attrib. 'in' tests also work correctly on attrib.
  2129. * INSTALL.txt was saying 2.2.16 instead of 2.6.16 as a supported
  2130. libxml2 version, as it should.
  2131. * Passing a UTF-8 encoded string to the XML() function would fail;
  2132. fixed.
  2133. 0.7 (2005-06-15)
  2134. ================
  2135. Features added
  2136. --------------
  2137. * parameters (XPath expressions) can be passed to XSLT using keyword
  2138. parameters.
  2139. * Simple XInclude support. Calling the xinclude() method on a tree
  2140. will process any XInclude statements in the document.
  2141. * XMLSchema support. Use the XMLSchema class or the convenience
  2142. xmlschema() method on a tree to do XML Schema (XSD) validation.
  2143. * Added convenience xslt() method on tree. This is less efficient
  2144. than the XSLT object, but makes it easier to write quick code.
  2145. * Added convenience relaxng() method on tree. This is less efficient
  2146. than the RelaxNG object, but makes it easier to write quick code.
  2147. * Make it possible to use XPathEvaluator with elements as well. The
  2148. XPathEvaluator in this case will retain the element so multiple
  2149. XPath queries can be made against one element efficiently. This
  2150. replaces the second argument to the .evaluate() method that existed
  2151. previously.
  2152. * Allow registerNamespace() to be called on an XPathEvaluator, after
  2153. creation, to add additional namespaces. Also allow registerNamespaces(),
  2154. which does the same for a namespace dictionary.
  2155. * Add 'prefix' attribute to element to be able to read prefix information.
  2156. This is entirely read-only.
  2157. * It is possible to supply an extra nsmap keyword parameter to
  2158. the Element() and SubElement() constructors, which supplies a
  2159. prefix to namespace URI mapping. This will create namespace
  2160. prefix declarations on these elements and these prefixes will show up
  2161. in XML serialization.
  2162. Bugs fixed
  2163. ----------
  2164. * Killed yet another memory management related bug: trees created
  2165. using newDoc would not get a libxml2-level dictionary, which caused
  2166. problems when deallocating these documents later if they contained a
  2167. node that came from a document with a dictionary.
  2168. * Moving namespaced elements between documents was problematic as
  2169. references to the original document would remain. This has been fixed
  2170. by applying xmlReconciliateNs() after each move operation.
  2171. * Can pass None to 'dump()' without segfaults.
  2172. * tostring() works properly for non-root elements as well.
  2173. * Cleaned out the tostring() method so it should handle encoding
  2174. correctly.
  2175. * Cleaned out the ElementTree.write() method so it should handle encoding
  2176. correctly. Writing directly to a file should also be faster, as there is no
  2177. need to go through a Python string in that case. Made sure the test cases
  2178. test both serializing to StringIO as well as serializing to a real file.
  2179. 0.6 (2005-05-14)
  2180. ================
  2181. Features added
  2182. --------------
  2183. * Changed setup.py so that library_dirs is also guessed. This should
  2184. help with compilation on the Mac OS X platform, where otherwise the
  2185. wrong library (shipping with the OS) could be picked up.
  2186. * Tweaked setup.py so that it picks up the version from version.txt.
  2187. Bugs fixed
  2188. ----------
  2189. * Do the right thing when handling namespaced attributes.
  2190. * fix bug where tostring() moved nodes into new documents. tostring()
  2191. had very nasty side-effects before this fix, sorry!
  2192. 0.5.1 (2005-04-09)
  2193. ==================
  2194. * Python 2.2 compatibility fixes.
  2195. * unicode fixes in Element() and Comment() as well as XML(); unicode
  2196. input wasn't properly being UTF-8 encoded.
  2197. 0.5 (2005-04-08)
  2198. ================
  2199. Initial public release.