Releases: meltano/sdk
Releases · meltano/sdk
v0.42.1
v0.42.1 (2024-11-11)
🐛 Fixes
- #2756 Safely compare UUID replication keys with state bookmarks -- Thanks @nikzavada!
Full Changelog: v0.42.0...v0.42.1
v0.42.0
v0.42.0 (2024-11-11)
Highlights
- For SQL target developers, there is now a public and official API for overriding how JSON schema types are mapped into SQL types. Let us know if there's any improvements we can make to it to better suit your use case!
- The name of the stream is now available in stream maps as
__stream_name__
, including in the context of__alias__
expressions. - This is last minor version to support Python 3.8, which reached its EOL on 2024-10-07, the next release will only support Python 3.9+.
✨ New
- #2742 Update dependencies in templates
- #2732 SQL target developers can now more easily override the mapping from JSON schema to SQL column type
- #2730 Added
SQLConnector.prepare_primary_key
for target to implement for custom table primary key adaptation - #2488 Nested schema properties can now be defined as nullable
- #2518 Python 3.13 is officially supported
- #2637 Environment variables are now parsed for boolean, integer, array and object setting values
- #2699 Stream name can now be accessed in stream maps -- Thanks @holly-evans!
- #2712 JSON schema
title
is now supported in configuration and stream properties - #2707 Bumped simpleeval to 1.0
- #2701 Stream name can now be accessed in
__alias__
context of stream maps -- Thanks @holly-evans!
🐛 Fixes
- #2741
datetime.datetime
instances in stream maps are now correctly mapped todate-time
JSON schema strings - #2727 Object and array JSON types are now handled before primitive types when converting them to SQL types
- #2723 JSON schema union types are no longer conformed into boolean values
⚙️ Under the Hood
- #2743 Deprecate passing file paths to plugin and stream initialization
📚 Documentation Improvements
📦 Packaging changes
v0.41.0
v0.41.0 (2024-10-02)
Highlights
- It's easier now for SQL tap developers to customize the mapping from SQL column types to JSON schema. See the guide for details.
✨ New
- #2667 Support stream aliasing of
BATCH
messages via stream maps -- Thanks @ReubenFrankel! - #2651 SQL taps now emit schemas with
maxLength
when applicable - #2618 Developers can now more easily override the mapping from SQL column type to JSON schema
🐛 Fixes
- #2697 All HTTP timeout exceptions are now retried in REST and GraphQL streams
- #2683 A clear error message is now emitted when flattening is enabled but
flattening_max_depth
is not set - #2665 Mapped datetime values are now typed as
date-time
strings in the schema message -- Thanks @gregkoutsimp! - #2663 Properties dropped using
None
or__NULL__
in stream maps are now also removed from the schemarequired
array
⚙️ Under the Hood
- #2696 Use tox without installing Poetry explicitly in workflows
- #2654 Added a generic
FileStream
(still in active development!) - #2695 Update dependencies in templates
- #2661 Drop support for Python 3.8 in templates
- #2670 Deprecated
Faker
class in stream maps - #2666 Remove non-functional
record-flattening
capability -- Thanks @ReubenFrankel! - #2652 Renamed
SQLConnector.type_mapping
toSQLConnector.sql_to_jsonschema
- #2647 Use future
warnings.deprecated
decorator
📚 Documentation Improvements
- #2658 Added more versions when stuff changed or was added
📦 Packaging changes
v0.40.0
v0.40.0 (2024-09-02)
Highlights
- Targets now emit basic metrics. There's nothing to do on your end, they're enabled by default!
- The
Faker
class is available in stream maps context. Note that like thefaker
instance added in v0.35.0, this requires installing thefaker
library in the tap/target environment. For example, withtap-example[faker]
.
✨ New
- #2486 Emit target metrics
- #2567 A new
schema_is_valid
built-in tap test validates stream schemas against the JSON Schema specification - #2598 Stream map expressions now have access to the
Faker
class, rather than just a faker instance - #2549 Added a default user agent for REST and GraphQL taps
🐛 Fixes
- #2613 Mismatch between timezone-aware and naive datetimes in start date and bookmarks is now correctly handled
⚙️ Under the Hood
- #2628 Use context manager to read gzip batch files
- #2619 Default to UTC when parsing dates without a known timezone
- #2603 Backwards-compatible identifier quoting in fully qualified names
- #2601 Improved SQL identifier (de)normalization
- #2599 Remove
pytest-durations
dependency fromtesting
and use native pytest option--durations
- #2597 Mark pagination classes with
@override
decorator - #2596 Made
auth_headers
andauth_params
ofAPIAuthenticatorBase
simple instance attributes instead of decorated properties
📚 Documentation Improvements
- #2639 Documented versions where
fake
andFaker
objects were added to the stream maps context - #2629 Reference
get_starting_timestamp
in incremental replication guide - #2604 Update project sample links
- #2595 Documented examples of stream glob expressions and property aliasing
📦 Packaging changes
- #2640 Remove upper constraint on
faker
extra
v0.39.1
v0.39.1 (2024-08-07)
🐛 Fixes
- #2589 Make sink assertion compatible with stream maps -- Thanks @JCotton1123!
- #2592 Fixed typos in
--about
plain text output - #2580 Date fields are now properly serialized as ISO dates, i.e. "YYYY-MM-DD"
- #2583 Quote add-column-ddl with column starting with
_
(underscore) based on engine -- Thanks @haleemur! - #2582 DDL for adding a column now uses a SQLAlchemy-compiled clause to apply proper quoting -- Thanks @haleemur!
- #2418 Check replication method instead of key to determine if a SQL stream is sorted
⚙️ Under the Hood
- #2520 Remove unused dependencies
pendulum
andpython-dateutil
📚 Documentation Improvements
- #2579 Documented support for
packaging
semantic type in contributing guide
v0.39.0
v0.39.0 (2024-07-27)
Highlights
-
The
json
module can now be used within stream mapsstream_maps: animals: id: id data: "json.dumps({'description': description, 'verified': verified, 'views': views, 'created_at': created_at})" __else__: null
-
The crypto dependencies
PyJWT
andcryptography
are now optional and can be installed by requesting thejwt
extra, i.e.singer-sdk[jwt]
. These are only currently required for JWT authentication, but if your package depends on any of these, make sure the dependency is explicit. -
The
pendulum
andpython-dateutil
dependencies are no longer used by this library and will be removed in a future release. If your package relies on any of them, make sure the dependency is explicit. -
We're working on supporting
msgspec
for more performant IO, so keep an eye out for that 😉.
✨ New
- #2432 Developers can now customize the default logging configuration for their taps/targets by adding
default_logging.yml
to their package - #2531 The
json
module is now avaiable to stream maps -- Thanks @grigi! - #2529 Stream sync context is now available to all instances methods as a
Stream.context
attribute
🐛 Fixes
- #2554 Use mapped stream aliases when handling
ACTIVATE_VERSION
messages in the base target class - #2526 Moved up the supported Python versions in the Markdown output of
--about
⚙️ Under the Hood
- #2564 Make
SQLSink
a generic with aSQLConnector
type parameter - #2540 Implement abstract
serialize_message
for Singer writers - #2259 Centralize JSON SerDe into helper functions -- Thanks @BuzzCutNorman!
- #2525 Make
PyJWT
andcryptography
dependencies optional - #2528 Moved class-level attributes to the top in REST tap template
- #2132 Limit internal usage of pendulum
📚 Documentation Improvements
- #2557 Document that
get_starting_timestamp
requires setting a non-null replication_key - #2556 Reference state partitioning in stream partitioning page
- #2536 Prepare for RTD addons migration
- #2535 Added more intersphinx links to Python and Faker docs
- #2530 Explained how the request URL is generated from
url_base
,path
and the sync context - #2527 Updated the footer
- #2506 Fixed a typo in the stream maps docs
v0.38.0
v0.38.0 (2024-06-17)
✨ New
- #2433 Tap developers can now disable HTTP redirects
- #2426 Added an optional GitHub workflow to publish to PyPI with trusted publishers
🐛 Fixes
- #2438 Null replication values are now handled when incrementing bookmarks
- #2431 Updated cookiecutter VSCode
launch.json
to usedebugpy
- #2421 An error message is now logged every time schema validation fails for any record
⚙️ Under the Hood
- #2455 Use parent
datetime.datetime
class in type conforming checks - #2453 Change to return type of
utc_now
frompendulum.DateTime
todatetime.datetime
📚 Documentation Improvements
v0.37.0
v0.37.0 (2024-04-29)
Highlights
-
You can reference your streams with glob patters in stream map configuration:
stream_maps: # This will affect all streams with names starting with 'my_prefix_' "my_prefix_*": id: id first_name: first_name email: # drop the PII field from RECORD and SCHEMA messages email_domain: email.split('@')[-1] email_hash: md5(config['hash_seed'] + email) __else__: null
✨ New
- #2389 JSON schema keyword
allOf
is now supported - #1888 Added support for glob patterns in source stream names -- Thanks @DouweM!
- #2345
PropertiesList
can now behave as an iterable -- Thanks @ReubenFrankel!
🐛 Fixes
- #2352 Removed unnecessary and problematic column caching -- Thanks @raulbonet!
- #2375 Added
sensitive: true
to password settings in templates - #2301 Unmapped sub-fields in object-type fields are now no longer dropped when the field declares
additionalProperties
- #2348 Added a condition to the
No schema for record field
warning -- Thanks @tobiascadee! - #2342 Avoid failing if VSCode IDE config is not requested for target and mapper cookiecutter templates -- Thanks @ReubenFrankel!
- #2331 Allow
importlib-resources
>=6.3.2
⚙️ Under the Hood
- #2205 Added a
jwt
package extra, but thecryptography
andjwt
dependencies are still installed by default for now
📚 Documentation Improvements
- #2326 Documented
BATCH
as a default plugin capability -- Thanks @ReubenFrankel!
v0.36.1
v0.36.1 (2024-03-13)
🐛 Fixes
- #2310 Limited
importlib-resources
to < 6.2 due to breaking changes - #2288 Bumped min joblib dependency to
>=1.3.0
and replaced deprecatedparallel_backend
withparallel_config
-- Thanks @BuzzCutNorman! - #2281 The
state_partition_context
dictionary is now correctly interpolated in the error message when duplicate partitions/contexts are detected in the input state - #2274 Test workflow now fails for any Python matrix job failure in cookiecutter template -- Thanks @ReubenFrankel!
v0.36.0
v0.36.0 (2024-02-26)
✨ New
- #2241 JSON schema keywords such as
maxLength
are now supported inStringType
,IntegerType
andNumberType
JSON schema helpers - #2263 Nested settings are now documented in the output of
--about --format=markdown
- #2248 Targets now accept a
batch_size_rows
setting to configure how many rows are loaded in each record batch -- Thanks @BuzzCutNorman!
🐛 Fixes
- #2258 Database disconnects are now handled via SQLAlchemy
pool_pre_ping
parameter
⚙️ Under the Hood
- #2220 Deprecated
singer_sdk.authenticators.BasicAuthenticator
in favor ofrequests.auth.HTTPBasicAuth