2.1.8 (2024-11-13)
- Prevent process recordings from clobbering one another (0347af1)
2.1.7 (2024-08-15)
2.1.6 (2024-08-13)
2.1.5 (2024-08-05)
- reenable instrumentation of properties (7b3119a)
2.1.4 (2024-07-26)
- disable property instrumentation by default (a280300)
2.1.3 (2024-07-26)
- 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)
- catch BaseException from instrumented code (c927f9c)
2.1.1 (2024-07-15)
2.1.0 (2024-07-03)
- instrument properties (d69b6e1)
2.0.10 (2024-06-21)
- request recording in unittest setUp method (1ee69cb)
2.0.9 (2024-06-20)
- appmap breaks vscode python extension starting a REPL (c179b86)
2.0.8 (2024-06-05)
- move reduce_ex up to ObjectProxy (f4618b6)
- optionally disable schema render (4e29c13)
- support APPMAP_MAX_TIME (d60c528)
2.0.7 (2024-06-05)
- max recursion depth exceeded (4223079)
2.0.6 (2024-05-31)
- use an RLock in SharedRecorder._add_event (ec1f95d)
2.0.5 (2024-05-30)
- appmap.Recording is available even when APPMAP=[secure] (6bb7687)
2.0.4 (2024-05-29)
- optionally limit number of events collected (7c17a38)
2.0.3 (2024-05-28)
- ask pytest not to rewrite our modules (aae5dea)
2.0.2 (2024-05-27)
- expect a missing config file (9cb20a4)
2.0.1 (2024-05-23)
2.0.0 (2024-05-23)
- combine testing-related env vars (500fe55)
- enabling process recording disables others (74b2ee1)
- honor APPMAP_RECORD_REQUESTS when testing (2df0f37)
- disable record by default (57b3910)
- disable record by default
1.24.1 (2024-05-20)
- find a config in the repo root (b9ecced)
1.24.0 (2024-05-17)
- improve handling of unset APPMAP (bbeee65)
- append to a single log file (cacc62f)
1.23.0 (2024-05-16)
- check malformed path entries (f7937ee)
1.22.0 (2024-05-15)
- search for config file (4555c82)
1.21.0 (2024-04-29)
- add runner, get ready for v2 (670660f)
1.20.1 (2024-04-10)
- don't create a log file by default (1fac839)
1.20.0 (2024-03-15)
- log to a file by default (3da004f)
- FastAPI support (3dba2a2)
1.19.1 (2024-02-29)
- 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)
- get rid of unused metadata fields (87efc91)
- add process recording (81e5226)
1.18.4 (2024-02-10)
- replace logging.info with logger in env.py (68b6bca)
1.18.3 (2024-02-05)
- support python 3.12 (136b47b)
1.18.2 (2024-01-22)
1.18.1 (2023-11-05)
- move source_location property to metadata (7ac2aa0)
1.18.0 (2023-11-04)
- add noappmap decorator (d8aa5d9)
1.17.1 (2023-10-27)
- make sure functions can be excluded (d7518ee)
1.17.0 (2023-07-11)
1.16.0 (2023-05-25)
- handle 3.11 find_spec implementation (c62e64e)
- relax restriction on packaging to >=19.0 (affdbda)
- update unittest integration for python 3.11 (bd9598b)
- support python 3.11 (15b0ddc)
1.15.2 (2023-05-23)
1.15.1 (2023-05-10)
1.15.0 (2023-03-13)
- add schema to event parameters (838f2de)
1.14.2 (2023-03-08)
- bump version of "packaging" (3224bf6)
1.14.1 (2023-02-23)
- improve Django path normalization (f536bd3)
1.14.0 (2023-02-09)
- Recorder._start_recording uses logger.debug (6c9b5cc)
- Add label definitions (d53f3f4)
1.13.3 (2023-02-09)
- don't instrument extra class members (68ff82e)
1.13.2 (2023-01-19)
1.13.1 (2023-01-11)
- improve handling of application/json requests (7f4dc2d)
1.13.0 (2023-01-04)
- record unittest testcases by default (f40434d)
1.12.8 (2022-12-12)
- don't fail on unittest subtests (4832377)
1.12.7 (2022-12-09)
- set appmap_dir, language in default config (7383c18)
1.12.6 (2022-12-07)
- allow instrumented functions to be pickled (1c04dc0)
1.12.5 (2022-12-04)
- log at warning by default (450c3b9)
1.12.4 (2022-11-21)
- allow scripts to be run with -m (dc75658)
1.12.3 (2022-11-08)
- handle a tuple value for settings.MIDDLEWARE (672e078)
1.12.2 (2022-11-08)
1.12.1 (2022-11-04)
- Avoid calling class when describing values (91be26e)
1.12.0 (2022-10-25)
- support Flask 2 (26cde29)
1.11.0 (2022-10-25)
- Don't show noise in the console. (f763eb6)
1.10.4 (2022-10-23)
- remove try ... except from appmap.pth (4710280)
1.10.3 (2022-10-20)
- use default values when config is incomplete (8a307a2)
1.10.2 (2022-10-19)
- capture events for app code once again (5fd3797)
1.10.1 (2022-10-13)
- 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)
- 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)
- record by default (209f118)
1.9.1 (2022-10-11)
- make sure event ids aren't duplicated (4404fb0)
1.9.0 (2022-10-03)
- 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)
- when APPMAP_RECORD_REQUESTS is set record each request in a separate file (cd2ef5c)
1.8.4 (2022-10-03)
- set global python version for builds (be59666)
1.8.3 (2022-10-03)
- update Travis config to use 3.9 (505f9fa)
1.8.2 (2022-10-03)
- remove some debugging (6e03c7e)
1.8.1 (2022-10-03)
- 3.10 support, wrap exec_module properly (f50007b)
1.8.0 (2022-09-27)
- automatically create appmap.yml (1b935f5)
1.7.0 (2022-09-27)
- update to v1.9.0 of appmap spec (b95c260)
1.6.0 (2022-09-26)
- Allow per-thread recording (e1bfd94)
1.5.3 (2022-09-22)
- Instrumented functions can now be deepcopy'ed (3bc9da6)
1.5.2 (2022-09-16)
- Avoid querying database version when executing client queries (51ffd44), closes #158
- drop python 3.6 (d9c70a3)
1.5.1 (2022-02-02)
- Don't hook unittest tests when disabled (b6feab6)
- Handle finder that's a functools.partial (913c7a9)
1.5.0 (2021-12-16)
- Swap label declarations in the config file (2214599)
- Preset labels for known library functions (3b49925)
1.4.0 (2021-12-07)
- Don't duplicate class name in fully qualified name (d7f4bd3)
- Don't include function labels in call events (6f00a24)
- Allow specifying function labels in the config file (3ae44f4)
1.3.2 (2021-11-09)
- Honor APPMAP env var when config is present (45cac9d)
1.3.1 (2021-10-25)
- Loosen version for some dependencies (1159985)
1.3.0 (2021-09-26)
- appmap-agent-init excludes more directories (3691fb1)
- Add appmap-agent-validate (9f8da52)
1.2.1 - 2021-09-24
- The
appmap-agent-init
andappmap-agent-status
internal commands are now available for the code-editor extensions.
- [#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.
- Pulled
1.1.0 - 2021-06-08
- [#55] Informative message is displayed when appmap.yml is missing.
- [#119] Record template rendering in Django and flask.
- [#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.
- Update tox config to test Django 2.2
- [#122] Path normalization for Django requests works in the presence of included URLconfs.
1.0.0 - 2021-05-27
- [#105] django integration now captures
normalized_path_info
forhttp_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.
- 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
- [#90] Capture HTTP response headers in django and flask.
- Headers such as Host, User-Agent, Authorization and Content-Type are no longer
filtered out in HTTP event
headers
field.
- When using
pytest
as the test driver, make sure the test case decorator returns the correct value.
0.9.0 - 2021-05-03
- Attempting to start recording while recording is in progress will now raise a RuntimeError.
- [#77] Have the Django integration capture parameters of
http_server_request
s, recording them in themessage
attribute of thecall
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.
- When using
pytest
to rununittest
test cases, start recording by hooking the test case functions, rather than relying on ourunittest
integration. - [#94] Drop support for python 3.5.
- Initialize settings controlled by environment variables on startup.
- Use repr() instead of str() for object stringification.
unittest
test cases run by theunittest
test loader (e.g. by runningpython -m unittest
) are now recorded correctly.setUp
andteardown
ofunittest
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
- [#74] pytest integration works again
- [#72] Multiple calls into a shallow-tracked package are now recorded.
0.8.0.dev2 - 2021-03-26
- [#68] Support
APPMAP_DISPLAY_PARAMS
.
- [#69] django integration handles responses with missing
Content-Type
.
0.8.0.dev1 - 2021-03-25
- [#66] Path and line number of test function is now included in AppMap metadata, as
metadata.recording.source_location
.
- [#65] Wrapped functions with mismatched signatures no longer cause mapping failures.
0.7.0 - 2021-03-15
- [#2] [#28] Add flask integration
0.6.0 - 2021-03-10
- The
appmap.labels
decorator can now be applied to a function to specify labels that should appear in the AppMap.
- [#61] Don't modify an instrumented function's parameters when rendering them.
- Correct the structure of the
return_value
object in areturn
event.
0.5.0 - 2021-03-08
- 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 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
- [#29]
call
events now show the parameters the function was called with. return
events show the function's return value.- The
exceptions
attribute of areturn
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 onPATH
.
0.1.0.dev11 - 2021-02-28
- [#5] unittest integration.
- [#50] Make sure we protect against rewrapping a metapath finder's exec_module function.
0.1.0.dev10 - 2021-02-24
- Choose the output directory on startup, make sure it's an absolute path.
## 0.1.0.dev9 - 2021-02-23
- Use tox for testing multiple versions of Python.
- Relax the python version requirement to 3.5.
- Fix handling of builtin functions assigned as attributes of a class. They look like
static methods, (i.e.
isinstance(m, (staticmethod, types.BuiltinMethodType))
isTrue
), 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
- [#26] Capturing SQL queries when testing Django apps.
0.1.0.dev6 - 2021-02-16
- [#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 totmp/appmap
.
-
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.
-
Fix classmap
function
entriesEntries 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
- 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
- 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 inappmap.yml
is something other than an array.
- Avoid recursion when inspecting a call's receiver.
To generate a call event,
str()
andrepr()
are used to create thereceiver
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.
- 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
- 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
, andclassMap
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