New features
============
This is mostly a bugfix release, with a few changes in the generated
Javascript code.

Implementation
==============
- improve reporting of errors in attribute setting
- report errors for setters in Brython classes inherited from a Javascript
  "class" (related to issue #2548)
- change initialization of EXTRA in generated parser. Suggested by Denis
  Migdal in #2554
- in py_utils.js, only delete frame[1].$current_exception if is exists (makes
  a significant improvement in function call performance)
- fix error message for list assignment index out of range; when assigning
  invalid attribute to a string
- improve error reporting for invalid assignment to an attribute or a
  subscript
- add setup/requirements.txt
- if option --no-demo is passed to "brython-cli install", files index.html,
  demo.html and README.txt are not installed. Related to issue #2564.
- remove old-style commands for brython-cli (eg "brython-cli --install"
  instead of "brython-cli install), deprecated for a long time
- change NameError to UnboundLocalError when deleting a local name. Related to
  issue #2578
- improve error reporting for "with X: ..." if X does not support the context
  manager protocol (write the "with" block in the error trace)
- for performance, make $B.unpack_mapping a function instead of a generator
- rewrite generation of code for calls, using the Javascript spread syntax
  f(...args)
- remove useless calls to encode_position() in ast_to_js.js
- change storage of code positions to reduce size of generated code: if the
  AST node is on a single line, store [lineno, col_offset,
  end_col_offset - col_offset]
- remove generation of Travis CI config file
- raise AttributeError when getting the attribute "text" on a request object
  if method is "json"

Internal tools
==============

Bug fixes
=========
- fix bug in browser.ajax.patch() that used wrong HTTP method (PUT instead of
  PATCH). Same as PR #2556
- fix setting of line numbers (for calls to frame.f_trace) in "for" loops.
- fix make_package ignoring --src-dir (by CookiePLMonster)
- fix bug in time.time_ns() - related to issue #2569
- fix bug with command-line argument "brython-cli install --no-demo" (related
  to issue #2567)
- fix code for "with" statement. Replace "exit = type(mgr).__exit__" as
  specified in PEP 343 by "exit = mgr.__exit__". In issue #2580, if we replace
  the "with" block by its PEP 343 equivalent, the code breaks
- fix bug when running eval(obj) when obj is a result of compile()

Issues
- #2541 : very obscure edge case with __debug__
- #2542 : Calling a JS function with a dict in Brython 3.13 doesn't work
- #2547 : update http.cookies
- #2551 : configparser seems broken
- #2555 : reassigning a method does not work
- #2561 : issue with nonlocal variables defined in conditions
- #2562 : bytes literal b'"\'' is wrong
- #2563 : typo in zlib
- #2564 : consider adding an option to brython-cli to skip installing example
          files
- #2566 : imports via importlib do not work as expected if the module is
          fetched via GET request
- #2568 : JavaScript Exception without useful traceback
- #2569 : import logging fails
- #2573 : debug=0 option, and documentation issues
- #2577 : apparent bug in datetime.strptime with timezone offset
- #2578 : bug in del with globals
- #2579 : JavascriptError: RangeError generated when using base64.b64encode on
          large string
- #2580 : patching builtins.open with mock_open raises AttributeError: Mock
          object has no attribute '__enter__':
            1. if __getattr__ raises another exception than "AttributeError",
               raise it instead of returning the default value if provided
            2. add __bases__ to TextIOWrapper
            3. rewrite __iter__ / __next__ for file reader
- #2581 : float("invalid") should raise ValueError instead of TypeError
- #2582 : minor inconsistency with CPython in KeyError message
- #2583 : remove console.log() call in str.isalpha, str.isalnum
- #2584 : immutable DOMNode
- #2585 : datetime.strptime(None, "%Y-%m-%d") raises JavascriptError instead
          of TypeError
- #2590 : unnecessary call to '__bool__' method in an ‘if’ condition
- #2591 : bad syntax error reporting

Brython site
============
- move Travis tests to the built-in test suite (by Austin Schick)

Github site
===========


Demos
=====


Standard distribution
=====================
- allow os.PathLike[str] (by Niklas / YtvwlD)
- add module rlcompleter.py

Documentation
=============
- remove 'onload="brython(1)"' from documentation pages
- added note to docs about NOT committing auto-generated files (by cjlee112)