migraf/fhir-kindling

View on GitHub
CHANGELOG.md

Summary

Maintainability
Test Coverage
# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## [1.0.3] - 2023-09-13

Re-enable authentification against a server using OpenID Connect. Remove authlib dependency in favor of a simple custom OpenID connect implementation.
You can now authenticate against a server by providing a client id and secret and a token endpoint. The library will then fetch an access token and use it for all requests.

### Added
- OpenID Connect with client credentials auth flow for authenticating against the server


## [1.0.2] - 2023-08-12

### Changed
Removed pendulum dependency and replaced it with datetime. This should make the library more compatible with other libraries


## [1.0.0] - 2023-07-09
Improve packaging with poetry to slim down library size with optional extras for datascience features. Record linkage
for transfer functionality. Add support for Python 3.9+. Code base cleanup and refactoring.
Big upgrades to the [documentation](https://migraf.github.io/fhir-kindling/) 👀.


### Changed
- **Breaking:** Renamed `FHIRQuery` classes to `FhirQuerySync` and `FhirQueryAsync` for naming consistency.
- **Breaking:** Renamed `FHIRQueryParameters` class to `FhirQueryParameters` for naming consistency.
- **Breaking:** Query response `.save()` method now only supports saving as XML or JSON file. To serialize resources and bundles use
    the `flatten` function from the `serde` package. Requires installation of the `ds` extra.
- **Breaking:** Moved `ServerSummary` and summary functionality into separate module.
- **Breaking:** Unified `has()` and `where()` parameter args into a single argument that accepts either a dict or a 
    parameter object. Removed `_dict` arguments.
- Improve packaging with poetry and optional extras for datascience features and web app.
- Optional dependencies for [`ds`, `app`] can be installed using `pip install fhir_kindling[{extra}]`.
- Split batch transactions into separate module to slim down `FhirServer` class.
- Split `transfer` functionality into separate module to slim down `FhirServer` class.

### Added
- Optional progress bar for `summary`, `get_many`, `add_all` and `transfer` methods.
- Additional property `resource_list` on `FhirQueryResponse` to get a list of all resources (even included ones) from the response.
- `summary_async()` method for asynchronous server summary.
- `total` property on `QueryResponse` to get the total number of resources returned by the query.
- `record_linkage` functionality for `transfer()` method and split transfer functionality into separate module.
- Retry functionality for the `FhirServer` class. Allowing for retrying failed requests based on the configured status codes and methods. Configurable with backoff and jitter.
- Benchmark functionality for FhirServers that run a comprehensive set of tests against the server and measure the time it takes to complete them. Available only when the `ds` extra is installed.


### Removed
- Removed `to_dfs()` method on query response object. Use `flatten` function from the `serde` package instead.
    Requires installation of the `ds` extra.
- Removed `requests-oauthlib` in favor of `authlib`.


## [0.9.0] - 2022-07-21
Asynchronous API for CRUD operations against fhir servers.

### Changed
- Switched http client library from requests [httpx](https://www.python-httpx.org/)
- removed requests-oauthlib in favor of authlib for oauth2 authentication flow
- `FHIRQuery` class renamed to `FhirQuerySync` to allow for sync and async version
- moved resolving response pagination from `QueryReponse` to the sync and async query classes
- getting multiple resources via `server.get_many()` now uses proper batch requests

### Added
- `FhirQueryAsync` class for async queries against a server
- asynchronous counterparts for CRUD operations in the `FHIRServer` class using the same API:
  - `query_async()`
  - `raw_query_async()`
  - `get_async()`
  - `get_many_async()`
  - `add_async()`
  - `add_all_async()`
  - `add_bundle_async()`
  - `update_async()`
  - `delete_async()`


## [0.8.0] - 2022-03-18
Resource transfer between servers and querying resources by reference.  
`get`, `get_many` for querying resource by reference
`server.transfer(other_server, query_result)` for transferring resources

### Changed
- `FhirServer` constructor now accepts two additional optional parameters, `auth` and `headers` that will be used for the
  instance's `requests` session.

### Added
 - [x] `server.get(reference)` get a single resource from the server, based on relative path/reference.
 - [x] `server.get_many(references)` get multiple resources from the server, based on relative path/reference.
 - [x] `server.transfer(other_server, query)` transfer resources matching the query from one server to another. Also requests
   resources referenced by the resources matching to maintain referential integrity on the new server.
 - [x] `query.all(page_callback=callback, count=50)` callback functions and count for pagination resolving in query responses.

## [0.7.0] - 2022-01-31
Update a list of resources on the server. CSV/Pandas serialization of resources and query responses.

### Added
 - [x] `server.update(resources)` which updates a list of resources stored on the server
 - [x] Recursive resource flattening for csv/tabular serialization
 - [x] `query_response.save(path, format="csv)` to save the results of a query to csv

### Changed
- `server.query(params)` the query method now directly accepts query parameters


## [0.6.0] - 2022-01-19
Query Response with included resources. Reworked Generators

### Added
 - [x] Query response now stores and parses included resources
 - [x] Generator parameters for Resources and Fields
 - [x] Field generators for generating resource fields based on probabilistic choices or a generator function
 - [x] Resource generator field values based on static value or list
 - [x] Patient based data set generator 

### Changed
- Query interface `where, include, has` now can add query parameters based on method arguments or parameter objects.




## [0.5.0] - 2021-11-12

Query Parameters, include/revinclude, reverse chaining.  

### Added
 - [x] Query Parameters classes, for regular queries, including resources and reverse chaining
 - [x] Support for `_include` and `_revinclude` via `query.include()`
 - [x] Reverse chaining support via `query.has()`
 - [x] Parsing parameters from given URL/ coverting parameters to query url

### Changed
- Query interface `where, include, has` now can add query parameters based on method arguments or parameter objects.




## [0.4.0] - 2021-11-12

Server summary, deleting resources, removed initial CLI.

### Added

- [x] Getting a list of all resources on the server based on capabilities
- [x] Plots for server and resource summary
- [x] `server.delete()` method to delete resources based on ids

## [0.3.0] - 2021-10-30

Response classes, reference parsing and basic xml support

### Added

XML output format and resolving xml pagination. Response objects containig resources and references

### Changed

Outsourced resolving of response pagination into response classes

### Fixed

## [0.2.0] - 2021-09-18

FHIR server and query API

### Added

Classes for fhir servers and queries. Oauth2/OIDC support.

### Changed

Moved location of cli

### Fixed

## [0.1.0] - 2021-08-24

Initial cli

### Added

### Changed

### Fixed

Hashing order guarantees the right index of the query.json file in the hash