Skip to content

Latest commit

 

History

History
937 lines (529 loc) · 37.7 KB

CHANGELOG.md

File metadata and controls

937 lines (529 loc) · 37.7 KB

2.1.8 (2024-11-13)

Bug Fixes

  • Prevent process recordings from clobbering one another (0347af1)

2.1.7 (2024-08-15)

Bug Fixes

  • cache Env.root_dir, is_appmap_repo (5122d76)
  • disable parameter rendering by default (91f1364)

2.1.6 (2024-08-13)

Bug Fixes

  • generate AppMap data from django tests (ea0918c)
  • make wrapt function objects pickleable (3561e3b)

2.1.5 (2024-08-05)

Bug Fixes

  • reenable instrumentation of properties (7b3119a)

2.1.4 (2024-07-26)

Bug Fixes

  • disable property instrumentation by default (a280300)

2.1.3 (2024-07-26)

Bug Fixes

  • add APPMAP_INSTRUMENT_PROPERTIES (11b6307)
  • add ruff (ac94204)
  • improve property handling (5cce0f0)
  • show config packages on startup (feec761)
  • try to avoid recording tests (1847b0e)

2.1.2 (2024-07-16)

Bug Fixes

  • catch BaseException from instrumented code (c927f9c)

2.1.1 (2024-07-15)

Bug Fixes

  • Flask events are ordered correctly (f970fb7)
  • only instrument property functions once (23b52b5)

2.1.0 (2024-07-03)

Features

2.0.10 (2024-06-21)

Bug Fixes

  • request recording in unittest setUp method (1ee69cb)

2.0.9 (2024-06-20)

Bug Fixes

  • appmap breaks vscode python extension starting a REPL (c179b86)

2.0.8 (2024-06-05)

Bug Fixes

  • move reduce_ex up to ObjectProxy (f4618b6)
  • optionally disable schema render (4e29c13)
  • support APPMAP_MAX_TIME (d60c528)

2.0.7 (2024-06-05)

Bug Fixes

  • max recursion depth exceeded (4223079)

2.0.6 (2024-05-31)

Bug Fixes

  • use an RLock in SharedRecorder._add_event (ec1f95d)

2.0.5 (2024-05-30)

Bug Fixes

  • appmap.Recording is available even when APPMAP=[secure] (6bb7687)

2.0.4 (2024-05-29)

Bug Fixes

  • optionally limit number of events collected (7c17a38)

2.0.3 (2024-05-28)

Bug Fixes

  • ask pytest not to rewrite our modules (aae5dea)

2.0.2 (2024-05-27)

Bug Fixes

  • expect a missing config file (9cb20a4)

2.0.1 (2024-05-23)

Bug Fixes

  • completely disable record-by-default (27e1bb4)
  • handle non json serializable types (b4fedc6)

2.0.0 (2024-05-23)

Bug Fixes

  • combine testing-related env vars (500fe55)
  • enabling process recording disables others (74b2ee1)
  • honor APPMAP_RECORD_REQUESTS when testing (2df0f37)

Features

  • disable record by default (57b3910)

BREAKING CHANGES

  • disable record by default

1.24.1 (2024-05-20)

Bug Fixes

  • find a config in the repo root (b9ecced)

1.24.0 (2024-05-17)

Bug Fixes

  • improve handling of unset APPMAP (bbeee65)

Features

  • append to a single log file (cacc62f)

1.23.0 (2024-05-16)

Features

  • check malformed path entries (f7937ee)

1.22.0 (2024-05-15)

Features

1.21.0 (2024-04-29)

Features

  • add runner, get ready for v2 (670660f)

1.20.1 (2024-04-10)

Bug Fixes

  • don't create a log file by default (1fac839)

1.20.0 (2024-03-15)

Bug Fixes

  • log to a file by default (3da004f)

Features

1.19.1 (2024-02-29)

Bug Fixes

  • add TRACE log level (778c6e3)
  • drop Flask 1 (5a28dc7)
  • drop python 3.7 support (99d33c9)
  • Flask integration should record exceptions (2e89cfa)

1.19.0 (2024-02-13)

Bug Fixes

  • get rid of unused metadata fields (87efc91)

Features

1.18.4 (2024-02-10)

Bug Fixes

  • replace logging.info with logger in env.py (68b6bca)

1.18.3 (2024-02-05)

Bug Fixes

1.18.2 (2024-01-22)

Bug Fixes

1.18.1 (2023-11-05)

Bug Fixes

  • move source_location property to metadata (7ac2aa0)

1.18.0 (2023-11-04)

Features

1.17.1 (2023-10-27)

Bug Fixes

  • make sure functions can be excluded (d7518ee)

1.17.0 (2023-07-11)

Features

  • Report test_failure when a test fails (d5757f4), closes #248

1.16.0 (2023-05-25)

Bug Fixes

  • handle 3.11 find_spec implementation (c62e64e)
  • relax restriction on packaging to >=19.0 (affdbda)
  • update unittest integration for python 3.11 (bd9598b)

Features

1.15.2 (2023-05-23)

Bug Fixes

  • Don't record requests in test cases (114038c), closes #234

1.15.1 (2023-05-10)

Bug Fixes

1.15.0 (2023-03-13)

Features

  • add schema to event parameters (838f2de)

1.14.2 (2023-03-08)

Bug Fixes

  • bump version of "packaging" (3224bf6)

1.14.1 (2023-02-23)

Bug Fixes

  • improve Django path normalization (f536bd3)

1.14.0 (2023-02-09)

Bug Fixes

  • Recorder._start_recording uses logger.debug (6c9b5cc)

Features

1.13.3 (2023-02-09)

Bug Fixes

  • don't instrument extra class members (68ff82e)

1.13.2 (2023-01-19)

Bug Fixes

  • enable logging from _appmap module (f00fd2d)
  • instrument functions based on label config (4f491cc)

1.13.1 (2023-01-11)

Bug Fixes

  • improve handling of application/json requests (7f4dc2d)

1.13.0 (2023-01-04)

Features

  • record unittest testcases by default (f40434d)

1.12.8 (2022-12-12)

Bug Fixes

  • don't fail on unittest subtests (4832377)

1.12.7 (2022-12-09)

Bug Fixes

  • set appmap_dir, language in default config (7383c18)

1.12.6 (2022-12-07)

Bug Fixes

  • allow instrumented functions to be pickled (1c04dc0)

1.12.5 (2022-12-04)

Bug Fixes

  • log at warning by default (450c3b9)

1.12.4 (2022-11-21)

Bug Fixes

  • allow scripts to be run with -m (dc75658)

1.12.3 (2022-11-08)

Bug Fixes

  • handle a tuple value for settings.MIDDLEWARE (672e078)

1.12.2 (2022-11-08)

Bug Fixes

  • allow concurrent remote and request recording (65f106b)
  • use log level INFO by default (6604dd4)

1.12.1 (2022-11-04)

Bug Fixes

  • Avoid calling class when describing values (91be26e)

1.12.0 (2022-10-25)

Bug Fixes

  • improve Flask normalized-path parsing (712dbd5)
  • inject Django middleware automatically (f15e591)

Features

1.11.0 (2022-10-25)

Features

  • Don't show noise in the console. (f763eb6)

1.10.4 (2022-10-23)

Bug Fixes

  • remove try ... except from appmap.pth (4710280)

1.10.3 (2022-10-20)

Bug Fixes

  • use default values when config is incomplete (8a307a2)

1.10.2 (2022-10-19)

Bug Fixes

  • capture events for app code once again (5fd3797)

1.10.1 (2022-10-13)

Bug Fixes

  • Require PyYAML >=5.3.0 rather than ^5.3.0 because some packages that use appmap-python ask for PyYAML==6.0 (abfa874)

1.10.0 (2022-10-12)

Bug Fixes

  • For Flask always set a before_request and an after_request handler (fb73d80)
  • Remove a testcase for Flask and a testcase for Django because it's not possible to test for appmap_not_enabled_requests_enabled_and_remote: when APPMAP=false the routes for remote recording are disabled (5817b6e)
  • The remote recording routes for Flask are enabled only if APPMAP=true (45a297b)

Features

1.9.1 (2022-10-11)

Bug Fixes

  • make sure event ids aren't duplicated (4404fb0)

1.9.0 (2022-10-03)

Bug Fixes

  • Create requests appmap filename in the same format as appmap-ruby. (22df520)
  • skip the test_record_request testcases until _EventIds stops producing duplicate ids. (5a8b461)

Features

  • when APPMAP_RECORD_REQUESTS is set record each request in a separate file (cd2ef5c)

1.8.4 (2022-10-03)

Bug Fixes

  • set global python version for builds (be59666)

1.8.3 (2022-10-03)

Bug Fixes

  • update Travis config to use 3.9 (505f9fa)

1.8.2 (2022-10-03)

Bug Fixes

1.8.1 (2022-10-03)

Bug Fixes

  • 3.10 support, wrap exec_module properly (f50007b)

1.8.0 (2022-09-27)

Features

  • automatically create appmap.yml (1b935f5)

1.7.0 (2022-09-27)

Features

  • update to v1.9.0 of appmap spec (b95c260)

1.6.0 (2022-09-26)

Features

  • Allow per-thread recording (e1bfd94)

1.5.3 (2022-09-22)

Bug Fixes

  • Instrumented functions can now be deepcopy'ed (3bc9da6)

1.5.2 (2022-09-16)

Bug Fixes

  • Avoid querying database version when executing client queries (51ffd44), closes #158
  • drop python 3.6 (d9c70a3)

1.5.1 (2022-02-02)

Bug Fixes

  • Don't hook unittest tests when disabled (b6feab6)
  • Handle finder that's a functools.partial (913c7a9)

1.5.0 (2021-12-16)

Bug Fixes

  • Swap label declarations in the config file (2214599)

Features

  • Preset labels for known library functions (3b49925)

1.4.0 (2021-12-07)

Bug Fixes

  • Don't duplicate class name in fully qualified name (d7f4bd3)
  • Don't include function labels in call events (6f00a24)

Features

  • Allow specifying function labels in the config file (3ae44f4)

1.3.2 (2021-11-09)

Bug Fixes

  • Honor APPMAP env var when config is present (45cac9d)

1.3.1 (2021-10-25)

Bug Fixes

  • Loosen version for some dependencies (1159985)

1.3.0 (2021-09-26)

Bug Fixes

  • appmap-agent-init excludes more directories (3691fb1)

Features

  • Add appmap-agent-validate (9f8da52)

1.2.1 - 2021-09-24

Added

  • The appmap-agent-init and appmap-agent-status internal commands are now available for the code-editor extensions.

Fixed

  • [#141] Ensure appmap.django.Middleware is always in the middleware stack.
  • [#138] Path normalization for django requests is now more robust.
  • [#128] The error message for a missing config file now shows the full path where the file was expected to be found.

1.2.0 - 2021-09-24

  • Pulled

1.1.0 - 2021-06-08

Added

  • [#55] Informative message is displayed when appmap.yml is missing.
  • [#119] Record template rendering in Django and flask.

Fixed

  • [#70] Django integration now records an ExceptionEvent when an unhandled exception is raised within Django itself while processing a request.
  • When an argument to a method is missing, don't raise an exception in the appmap code. Instead omit the missing parameter and allow the original function call to raise ArgumentError if appropriate.
  • Handle the case when a method is called with self=None.
  • Function signature reflection now follows wrappers. This allows eg. functions decorated with functools.lru_cache to have their parameters captured.

Changed

  • Update tox config to test Django 2.2

Fixed

  • [#122] Path normalization for Django requests works in the presence of included URLconfs.

1.0.0 - 2021-05-27

Added

  • [#105] django integration now captures normalized_path_info for http_server_request events.
  • [#102] Function comments now appear in the classMap.
  • [#3] Allow remote recording django apps.
  • [#99] A recording is now created atomically. It is first written to a temp file, which is then renamed to the final file.
  • Capture HTTP client request and response.
  • [#101] Record test status (failed or succeeded) in test appmap metadata.
  • [#108] Capture message parameters in Flask.
  • Flask, Django and SQLAlchemy versions are now recorded in the metadata.

Fixed

  • When using pytest as the test driver, failed unittest cases appmaps are now recorded.
  • [#91] Limit appmap file name length to 255 characters.
  • [#104] The flask integration now formats parameters in normalized_path_info to match the appmap spec.
  • Git metadata is now cached, preventing running git several times per test case.
  • Fix a problem with Django JSON parameter capture preventing the application from accessing the request body.

0.10.0 - 2021-05-07

Added

  • [#90] Capture HTTP response headers in django and flask.

Changed

  • Headers such as Host, User-Agent, Authorization and Content-Type are no longer filtered out in HTTP event headers field.

Fixed

  • When using pytest as the test driver, make sure the test case decorator returns the correct value.

0.9.0 - 2021-05-03

Added

  • Attempting to start recording while recording is in progress will now raise a RuntimeError.
  • [#77] Have the Django integration capture parameters of http_server_requests, recording them in the message attribute of the call event.
  • [#83] Capture HTTP request headers in django and flask.
  • [#53] Module-scoped functions are now recorded.
  • [#64] Capture SQL queries in SQLAlchemy.
  • [#58] Capture database type and version in Django and SQLAlchemy.

Changed

  • When using pytest to run unittest test cases, start recording by hooking the test case functions, rather than relying on our unittest integration.
  • [#94] Drop support for python 3.5.
  • Initialize settings controlled by environment variables on startup.
  • Use repr() instead of str() for object stringification.

Fixed

  • unittest test cases run by the unittest test loader (e.g. by running python -m unittest) are now recorded correctly.
  • setUp and teardown of unittest test cases are no longer captured.
  • Fixed a crash when HTTP request doesn't match any route in Flask.
  • Avoid capturing SQL queries run when fetching object representation in Django.

0.8.0 - 2021-04-04

Fixed

  • [#74] pytest integration works again
  • [#72] Multiple calls into a shallow-tracked package are now recorded.

0.8.0.dev2 - 2021-03-26

Added

  • [#68] Support APPMAP_DISPLAY_PARAMS.

Fixed

  • [#69] django integration handles responses with missing Content-Type.

0.8.0.dev1 - 2021-03-25

Added

  • [#66] Path and line number of test function is now included in AppMap metadata, as metadata.recording.source_location.

Fixed

  • [#65] Wrapped functions with mismatched signatures no longer cause mapping failures.

0.7.0 - 2021-03-15

Added

  • [#2] [#28] Add flask integration

0.6.0 - 2021-03-10

Added

  • The appmap.labels decorator can now be applied to a function to specify labels that should appear in the AppMap.

Fixed

  • [#61] Don't modify an instrumented function's parameters when rendering them.
  • Correct the structure of the return_value object in a return event.

0.5.0 - 2021-03-08

Added

  • Packages in config file can now be set for 'shallow' tracking. This eliminates most of the intrapackage execution flow from tracking and produces lighter appmaps where we're only interested in surface interaction with a third-party piece of code.
  • [#48] Allow specifying distributions (aka. packages) as filters in appmap.yml.

Fixed

  • Fixed a problem where some entry points were missed in shallowly traced packages.
  • Subsequent Recording()s now don't contain previously recorded events.

0.1.0.dev12 - 2021-03-05

Fixed

  • [#29] call events now show the parameters the function was called with.
  • return events show the function's return value.
  • The exceptions attribute of a return event now has the correct structure.
  • [#46] Source file locations in an AppMap are now relative to the starting directory.
  • [#54] Write metadata even if git can't be found on PATH.

0.1.0.dev11 - 2021-02-28

Added

  • [#5] unittest integration.

Fixed

  • [#50] Make sure we protect against rewrapping a metapath finder's exec_module function.

0.1.0.dev10 - 2021-02-24

Fixed

  • Choose the output directory on startup, make sure it's an absolute path.

## 0.1.0.dev9 - 2021-02-23

Added

  • Use tox for testing multiple versions of Python.

Changed

  • Relax the python version requirement to 3.5.

Fixed

  • Fix handling of builtin functions assigned as attributes of a class. They look like static methods, (i.e. isinstance(m, (staticmethod, types.BuiltinMethodType)) is True), but they don't have a __func__ attribute.

0.1.0.dev8 - 2021-02-22

  • [#27] Capturing HTTP requests and responses when testing Django apps.

0.1.0.dev7 - 2021-02-18

Added

  • [#26] Capturing SQL queries when testing Django apps.

0.1.0.dev6 - 2021-02-16

Added

  • [#17] Add elapsed attribute to ReturnEvent
  • [#8] Add git to metadata
  • pytest integration
  • Support APPMAP_OUTPUT_DIR environment variable. If set, specifies the root directory for writing AppMaps. If not set, defaults to tmp/appmap.

Changed

  • Added About section to the README

  • Python 3.9.0 is now the minimum supported version.

  • Use repr() instead of str() for receiver

    Use repr() instead of str() to get a string representation of an event's receiver. This works properly for flaskbb, and seems more correct in general.

    Also, add Event.repr.

  • Simplify (and fix) logging configuration

    The code that configured logging was overly complex, and also buggy. These changes simplify it, keep duplicate messages from being emitted, and properly allow per-module configuration of log level.

  • Don't use inspect.isclass

    When testing to see if an object is a class, use type() instead of inpect.isclass. See the comment on appmap._implementation.recording.is_class for details. Also, make sure ConfigFilter.wrap doesn't call the next filter for a function that it finds has already been wrapped.

Fixed

  • Fix classmap function entries

    Entries of type function in the classmap must have an attribute called "location", not "path" and "lineno" attributes. Now they do.

  • Fix support for function exclusions specified in the config.

0.1.0.dev4 - 2021-01-11

Added

  • Add a deploy stage to the build With these changes, tagged versions will now be deployed to PyPI.
  • Set the version from the git tag Before pushing a release, set the version based on the tag for the current build.

0.1.0.dev3 - 2021-01-09

Added

  • Configure stream for logging Allow the user to specify which stream (stdout, stderr) to use for logging. Also, raise a RuntimeError if an excludes attribute in appmap.yml is something other than an array.

Changed

  • Avoid recursion when inspecting a call's receiver. To generate a call event, str() and repr() are used to create the receiver attribute. These methods may have been instrumented, or may call instrumented methods. These changes add protection to make sure we avoid infinite recursion.
  • Simplify classmap classes ClassMapDict now just subclasses dict, and ClassMapEntry and its subclasses are all dataclasses. Also fix a couple of minor issues identified during review. Thanks @virajkanwade for the suggestions.

Fixed

  • Handle missing source info Make sure we can generate CallEvents even if inspect can't find the source or line number information.
  • Reinitialize implementation before each test Make sure appmap._implementation.initialize gets called before each test, to start with a clean slate. To make this easier, package the tests in classes that inherit from a base class that implements setup_method.
  • Fix handling of sys.meta_path The elements of sys.meta_path can be either classes or objects. These changes ensure that instances are handled correctly. When an instance is encountered, its find_spec method will be wrapped. Additionally, it will be marked to ensure that it won't be wrapped again if it's revisited.

v0.1.0.dev1 - 2021-01-08

Added

  • Add package mgmt, linting, and testing. Use poetry to manage dependencies, pylint for linting, and pytest for testing. Also adds a Travis config to run them all.
  • Completely rework recording. Generates AppMaps with metadata, event, and classMap sections. Currently missing significant parts of each, but they're complete enough to upload to https://app.land.
  • Add contributor documentation
  • Deploy release to PyPI