Dlt

Latest version: v1.4.0

Safety actively analyzes 681844 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 15

0.5.3

Core Library
* Add support for continuously starting load jobs as slots free up in the loader. This will significantly speed up loading packages with many files. by sh-rp in https://github.com/dlt-hub/dlt/pull/1494
* Add `get_delta_tables` helper function to optimize and vacuum tables by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1664
* Raise/warn on incomplete columns in normalize by steinitzu in https://github.com/dlt-hub/dlt/pull/1504
* Add enable_dataset_name_normalization option by VioletM in https://github.com/dlt-hub/dlt/pull/1676
* updates duckdb/motherduck load job to match parquet by column names by rudolfix in https://github.com/dlt-hub/dlt/pull/1674
* updates duckdb/motherduck load job to fully allow jsonl file format by rudolfix in https://github.com/dlt-hub/dlt/pull/1674
* removes internal locks when loading parquet from multiple threads (duckdb got fixed) https://github.com/dlt-hub/dlt/pull/1674
* enables multi transactions statements for Motherduck https://github.com/dlt-hub/dlt/pull/1674
* fixes dbt logs line endings

Docs
* Updated config and credentials docs by VioletM in https://github.com/dlt-hub/dlt/pull/1508
* Update salesforce.md by makies in https://github.com/dlt-hub/dlt/pull/1665

Verified Sources
* Column selector added to `sql_database` steinitzu

New Contributors
* makies made their first contribution in https://github.com/dlt-hub/dlt/pull/1665

**Full Changelog**: https://github.com/dlt-hub/dlt/compare/0.5.2...0.5.3

0.5.2

Core Library
* Add `upsert` merge strategy for Postgres and Snowflake, by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1466
* Add basic `upsert` support for `delta` table format in `filesystem` destination by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1600
* query tagging for snowflake by rudolfix in https://github.com/dlt-hub/dlt/pull/1582
* Support Open Source ClickHouse Deployments (MergeTree engine and more) by Pipboyguy in https://github.com/dlt-hub/dlt/pull/1496
* allows nested types in BigQuery via native `autodetect_schema` by rudolfix in https://github.com/dlt-hub/dlt/pull/1591
* Enable `upsert` merge strategy for more SQL destinations (Athena, BigQuery, Databricks, mssql) by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1628
* Fix/1512 fixes `current.pipeline()` access by rudolfix in https://github.com/dlt-hub/dlt/pull/1581
* feat: add config dataset_name_prefix to set custom staging dataset name by donotpush in https://github.com/dlt-hub/dlt/pull/1563
* fix: add airflow db reset for all tests by donotpush in https://github.com/dlt-hub/dlt/pull/1559
* Enable S3 compatible storage for `delta` table format by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1586
* feat/1495 rest_client: renames JSONResponsePaginator to JSONLinkPaginator by willi-mueller in https://github.com/dlt-hub/dlt/pull/1558
* Feat/1596 adds custom config providers + example of yaml config provider supporting profiles and jinja placeholders by rudolfix in https://github.com/dlt-hub/dlt/pull/1642
* Feat/1583 rest client session timeout configuration by willi-mueller in https://github.com/dlt-hub/dlt/pull/1590
* Add clarification for add_limit by VioletM in https://github.com/dlt-hub/dlt/pull/1594
* Fix/1606 fixes validator incremental step order to keep it always last in the pipe by rudolfix in https://github.com/dlt-hub/dlt/pull/1641
* Feat/1593 rest_client: allow setting of request kwargs by willi-mueller in https://github.com/dlt-hub/dlt/pull/1609
* prevent accidental wrapping of sources in resources when using adapters by sh-rp in https://github.com/dlt-hub/dlt/pull/1645
* Add empty source handling for `delta` table format on `filesystem` destination by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1617
* Surface original err msg from pydantic as extended_info on DataValidationError by codingcyclist in https://github.com/dlt-hub/dlt/pull/1569
* fix(dockerfile): remove extra spaces around equals sign in LABEL inst… by thisisdope in https://github.com/dlt-hub/dlt/pull/1573
* Qdrant uncommitted state restore and test by steinitzu in https://github.com/dlt-hub/dlt/pull/1545
* fix: suppress alembic logs for tests by donotpush in https://github.com/dlt-hub/dlt/pull/1578

Docs
* Document sql source reflection level and type adapter by steinitzu in https://github.com/dlt-hub/dlt/pull/1467
* Add to docs docs configuring file format options by VioletM in https://github.com/dlt-hub/dlt/pull/1543
* Added how dlt uses arrow by jorrit by dat-a-man in https://github.com/dlt-hub/dlt/pull/1577
* docs/514 rest_api: docs on pluggable paginators by willi-mueller in https://github.com/dlt-hub/dlt/pull/1557
* docs: documents new `convert` parameter in rest_api source incremental config by willi-mueller in https://github.com/dlt-hub/dlt/pull/1649
* Docs/1571 docs on handling NULL values at incremental cursor path by willi-mueller in https://github.com/dlt-hub/dlt/pull/1650
* Add note that pg_replication doesn't support scd2 by akelad in https://github.com/dlt-hub/dlt/pull/1608
* docs/505 updates documentation on custom hooks in response_actions by willi-mueller in https://github.com/dlt-hub/dlt/pull/1524

New Contributors
* donotpush made their first contribution in https://github.com/dlt-hub/dlt/pull/1559
* thisisdope made their first contribution in https://github.com/dlt-hub/dlt/pull/1573
* akelad made their first contribution in https://github.com/dlt-hub/dlt/pull/1608

**Full Changelog**: https://github.com/dlt-hub/dlt/compare/0.5.1...0.5.2

0.5.1

This is a major release (0.4 -> 0.5) in our [versioning scheme](https://github.com/dlt-hub/dlt?tab=readme-ov-file#adding-as-dependency) so please review the breaking changes below. Most of them are relevant only for platform builders that use `dlt` internals. Some of the long-deprecated components were removed as well

Breaking Changes
* `PageNumberPaginator` takes `base_page` and `page` arguments instead of `initial_page`. This allows to paginate APIs that number pages ie. from 0 or from 1. 1509
* deprecated `credentials` argument was removed from `dlt.pipeline`. 1537 Please use destination factories to instantiate destinations with explicit credentials. (https://dlthub.com/devel/general-usage/destination#pass-explicit-credentials)

Breaking Changes (internals)
* if `dlt.source` or `dlt.resource` decorated function is passed a `None` in a default argument during a function call, it will be handled exactly like in regular Python function call. Previously such `None` would request argument injection from configuration. Please read more here: (https://github.com/dlt-hub/dlt/pull/1430)
* `dlt.config.value` and `dlt.secrets.value` were evaluating to `None` at runtime. Now they will evaluate to a sentinel value. All the existing code should be backward compatible. (https://github.com/dlt-hub/dlt/pull/1430)
* `full_refresh` flag of `dlt.pipeline` will be deprecated and replaced with `dev_mode`. (https://github.com/dlt-hub/dlt/pull/1063) and (https://dlthub.com/devel/general-usage/pipeline#do-experiments-with-dev-mode)
* the default resource extraction sequence has changed to `round_robin` from `fifo` as a default setting. You can switch back to the previous behavior and learn more about what this means here: (https://dlthub.com/docs/reference/performance#resources-extraction-fifo-vs-round-robin)
* if you create an instance of a SPEC (ie. `SnowflakeCredentials`) it will not be marked as resolved even if all required fields are provided. previously some were resolving and some were not. https://github.com/dlt-hub/dlt/pull/1489
* `parse_native_representation` never marks config as resolved. previously some were resolving and some were not. https://github.com/dlt-hub/dlt/pull/1489


Core Library
* support `delta` tables with `delta-rs` on top of `filesystem` destination. (https://github.com/dlt-hub/dlt/pull/1382)
* `LanceDB` destination and examples (https://github.com/dlt-hub/dlt/pull/1375)
* external files may be imported and loaded without extraction and normalization (https://dlthub.com/devel/general-usage/resource#import-external-files) - includes jsonl, csv, and parquet
* pick the loader file format for particular resource (https://dlthub.com/devel/general-usage/resource#pick-loader-file-format-for-a-particular-resource)
* extended support for various csv formats (https://dlthub.com/devel/dlt-ecosystem/file-formats/csv#change-settings)
* csv support for snowflake (1470 https://dlthub.com/devel/dlt-ecosystem/destinations/snowflake#custom-csv-formats)
* support case sensitive and insensitive modes for our destinations ie. snowflake, redshift, bigquery, mssql etc. may work in both modes (https://github.com/dlt-hub/dlt/pull/998 https://dlthub.com/devel/general-usage/naming-convention)
* you'll be able to fully change naming convention ie. to have LATIN-1 character set or create collision-free names (https://dlthub.com/devel/general-usage/naming-convention#write-your-own-naming-convention)
* two new naming conventions: `sql_cs_v1` (case sensitive) and `sql_ci_v1` (case insensitive) to create SQL safe identifiers without snake case transformation (https://dlthub.com/devel/general-usage/naming-convention#available-naming-conventions)
* you'll be able to modify destination capabilities via destination factories (https://dlthub.com/devel/general-usage/destination#inspect-destination-capabilities)
* schemas will be reflected with a single SQL statement which will make schema migrations faster
* loader can handle many more jobs (files) than before. we tested with 30k jobs and it looks fine
* we are adding `refresh` modes to `pipeline.run` that allow to drop and recreate tables - with different granularity. (https://dlthub.com/devel/general-usage/pipeline#refresh-pipeline-data-and-state)
* when generating fingerprint for `filesystem` destination only the bucket component is taken into account 1516
* 1272 Support ClickHouse GCS S3 compatibility mode in filesystem destination by Pipboyguy in https://github.com/dlt-hub/dlt/pull/1423
* Ensure arrow field's nullable flag matches the schema column by steinitzu in https://github.com/dlt-hub/dlt/pull/1429
* Fix streamlit bug on chess example by sh-rp in https://github.com/dlt-hub/dlt/pull/1425
* Fix databricks pandas error by steinitzu in https://github.com/dlt-hub/dlt/pull/1443
* Extend orjson dependency allowed range with excluded versions by steinitzu in https://github.com/dlt-hub/dlt/pull/1501
* Fix/1465 fixes snowflake auth credentials by rudolfix in https://github.com/dlt-hub/dlt/pull/1489
* skips non resolvable fields from appearing in sample secrets.toml by rudolfix in https://github.com/dlt-hub/dlt/pull/1432
* RESTClient: pass environment settings to `requests.Session.send` by burnash in https://github.com/dlt-hub/dlt/pull/1452
* fix: service principal auth support for synapse copy job by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1472
* docs: Fixed markdown issue in duckdb.md by PabloCastellano in https://github.com/dlt-hub/dlt/pull/1528
* Loader parallelism strategies (destination can request the loading strategy ie. sequential or parallel) by sh-rp in https://github.com/dlt-hub/dlt/pull/1457
* Migrate to sentry sdk 2.0 by sh-rp in https://github.com/dlt-hub/dlt/pull/1477
* fix: allow loggeradapter in addition to logger in logcollector by matsmhans1 in https://github.com/dlt-hub/dlt/pull/1483
* Add load_id to arrow tables in extract step instead of normalize by steinitzu in https://github.com/dlt-hub/dlt/pull/1449
* 1356 implements OAuth2 Client Credentials flow by willi-mueller in https://github.com/dlt-hub/dlt/pull/1357
* Add LanceDB custom destination example code by Pipboyguy in https://github.com/dlt-hub/dlt/pull/1323
* fix(incremental): don't filter Arrow tables with empty filters by IlyaFaer in https://github.com/dlt-hub/dlt/pull/1480
* fix: `Pipeline.sql_client` credentials forwarding by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1499
* RESTClient: fix duplicate params in URL in JSONResponsePaginator by burnash in https://github.com/dlt-hub/dlt/pull/1515
* Update default log output to not have padding on log level by sh-rp in https://github.com/dlt-hub/dlt/pull/1517
* fix: remove obsolete `dremio` destination capabilities by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1527
* feat(filesystem): use only netloc and scheme for fingerprint by IlyaFaer in https://github.com/dlt-hub/dlt/pull/1516
* removes deprecated credentials argument from Pipeline by rudolfix in https://github.com/dlt-hub/dlt/pull/1537
* improves collision detection when naming convention changes by rudolfix in https://github.com/dlt-hub/dlt/pull/1536
* Fix/1542 rest client: makes request parameters optional by willi-mueller in https://github.com/dlt-hub/dlt/pull/1544
* RESTClient: add integrations tests for paginators by burnash in https://github.com/dlt-hub/dlt/pull/1509
* selects all tables from info schema if number of tables > threshold by rudolfix in https://github.com/dlt-hub/dlt/pull/1547
* configurable staging dataset name by rudolfix in https://github.com/dlt-hub/dlt/pull/1555

Docs
* naming conventions documentation (https://dlthub.com/docs/general-usage/naming-convention)
* methods to manipulate schema settings (https://dlthub.com/docs/general-usage/schema#schema-settings)
* rest_api: add troubleshooting section by burnash in https://github.com/dlt-hub/dlt/pull/1371
* RESTClient: add docs for `init_request` by burnash in https://github.com/dlt-hub/dlt/pull/1442
* Example: fast postgres to postgres by AstrakhantsevaAA in https://github.com/dlt-hub/dlt/pull/1428
* Docs: Updated filesystem docs with explanations for bucket URLs by dat-a-man in https://github.com/dlt-hub/dlt/pull/1435
* docs for loading with contracts to existing tables by sh-rp in https://github.com/dlt-hub/dlt/pull/1441
* Add troubleshooting to incremental docs by burnash in https://github.com/dlt-hub/dlt/pull/1458
* Docs: cover custom authentication, rework paginators section by burnash in https://github.com/dlt-hub/dlt/pull/1493
* rest_api: add an example to the incremental load section by burnash in https://github.com/dlt-hub/dlt/pull/1502
* rest_api: add a quick example to rest_api docs by burnash in https://github.com/dlt-hub/dlt/pull/1531
* Update grouping-resources.md docs by axellpadilla in https://github.com/dlt-hub/dlt/pull/1538
* adds examples and step by step explanation for refresh modes by rudolfix in https://github.com/dlt-hub/dlt/pull/1560

Verified Sources
We worked intensively on `rest_api` and `sql_database`:
* Add fallback value for tz in row_tuples_to_arrow (sql_database helpers) khoadaniel https://github.com/dlt-hub/verified-sources/pull/493
* allows SqlAlchemy engine to be passed to sql_table by rudolfix https://github.com/dlt-hub/verified-sources/pull/498
* Feat/505 rest api hooks in response actions willi-mueller https://github.com/dlt-hub/verified-sources/pull/512
* Feat/507 transformation function for incremental cursor willi-mueller https://github.com/dlt-hub/verified-sources/pull/515
* Allows incremental loading to be configured per resource in `sql_database` rudolfix https://github.com/dlt-hub/verified-sources/pull/478
* Allows to set the reflection level for tables: **minimal** (names/nullability), **full** (data types) and **full_with_precision** (with ie. varchar length). steinitzu https://github.com/dlt-hub/verified-sources/pull/478
* Enables data type discovery from arrow data. Fixes a bug that was preventing pyarrow/pandas backend to be used if data type could not be inferred steinitzu https://github.com/dlt-hub/verified-sources/pull/478
* Allows to define type adapters: callback function that allow handling custom database types steinitzu https://github.com/dlt-hub/verified-sources/pull/478
* stargazers graphQL query for github https://github.com/dlt-hub/verified-sources/pull/483 by cybermaxs

New Contributors
* matsmhans1 made their first contribution in https://github.com/dlt-hub/dlt/pull/1483
* PabloCastellano made their first contribution in https://github.com/dlt-hub/dlt/pull/1528
* axellpadilla made their first contribution in https://github.com/dlt-hub/dlt/pull/1538

**Full Changelog**: https://github.com/dlt-hub/dlt/compare/0.4.12...0.5.1

0.4.12

Core Library
* feat(pipeline): add an ability to auto truncate staging dataset by IlyaFaer in https://github.com/dlt-hub/dlt/pull/1292
* Feat/1406 bumps duckdb 0.10 + dbt to <=1.8.x by rudolfix in https://github.com/dlt-hub/dlt/pull/1407
* Azure service principal credentials support by steinitzu in https://github.com/dlt-hub/dlt/pull/1377
* Support partitioning hints for athena iceberg by steinitzu in https://github.com/dlt-hub/dlt/pull/1403
* Add recommended_file_size cap to limit data writer file size and cap BigQuery to 4gb by steinitzu in https://github.com/dlt-hub/dlt/pull/1368
* limits mssql query size to fit network buffer to prevent errors on large inserts by rudolfix in https://github.com/dlt-hub/dlt/pull/1372
* allows to bubble up exceptions when standalone resource returns by rudolfix in https://github.com/dlt-hub/dlt/pull/1374
* Fix: use .get on column in mssql destination for cases where the yaml… by Daniel-Vetter-Coverwhale in https://github.com/dlt-hub/dlt/pull/1380
* Make path tests Windows compatible by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1384
* RESTClient: Added "values" to the data pattern of the rest_api helper by francescomucio in https://github.com/dlt-hub/dlt/pull/1399
* corrects single entity path detection by rudolfix in https://github.com/dlt-hub/dlt/pull/1394
* RESTClient: implement AuthConfigBase.__bool__ + update docs by burnash in https://github.com/dlt-hub/dlt/pull/1413
* Fix: ensure custom session can be provided to rest client by z3z1ma in https://github.com/dlt-hub/dlt/pull/1396

Docs
* RESTClient: add an example for creating a custom POST paginator by burnash in https://github.com/dlt-hub/dlt/pull/1358
* Add rest_api verified source documentation by burnash in https://github.com/dlt-hub/dlt/pull/1308
* Fix typo in Slack Docs by cybermaxs in https://github.com/dlt-hub/dlt/pull/1369
* RESTClient: docs: add the troubleshooting section by burnash in https://github.com/dlt-hub/dlt/pull/1367
* Replace weather api example with github in create a pipeline walkthrough by sultaniman in https://github.com/dlt-hub/dlt/pull/1351
* RESTClient: docs: Fixed snippet definition by burnash in https://github.com/dlt-hub/dlt/pull/1373
* docs: destination tables: elaborate on example code by burnash in https://github.com/dlt-hub/dlt/pull/1386
* add naming rules to contributing by sh-rp in https://github.com/dlt-hub/dlt/pull/1291
* Added info about how to reorder the columns to adjust a schema by dat-a-man in https://github.com/dlt-hub/dlt/pull/1364
* rest_api: add response_actions documentation by burnash in https://github.com/dlt-hub/dlt/pull/1362
* Update the tutorial to use `rest_client.paginate` for pagination by burnash in https://github.com/dlt-hub/dlt/pull/1287
* fix command to install dlt by Benjamin0313 in https://github.com/dlt-hub/dlt/pull/1404
* improves sql database docs by rudolfix in https://github.com/dlt-hub/dlt/pull/1383
* add typing classifier and update maintainers in pyproject by sh-rp in https://github.com/dlt-hub/dlt/pull/1391
* Updated installation command in destination docs and a few others by dat-a-man in https://github.com/dlt-hub/dlt/pull/1410
* Update filesystem docs with auto mkdir config by VioletM in https://github.com/dlt-hub/dlt/pull/1416
* add page to docs for openapi generator by sh-rp in https://github.com/dlt-hub/dlt/pull/1417

New Contributors
* cybermaxs made their first contribution in https://github.com/dlt-hub/dlt/pull/1369
* Daniel-Vetter-Coverwhale made their first contribution in https://github.com/dlt-hub/dlt/pull/1380
* francescomucio made their first contribution in https://github.com/dlt-hub/dlt/pull/1399
* Benjamin0313 made their first contribution in https://github.com/dlt-hub/dlt/pull/1404

**Full Changelog**: https://github.com/dlt-hub/dlt/compare/0.4.11...0.4.12

0.4.11

Core Library
* RESTClient: building blocks (auths, paginators, response extractors etc.) to write REST API pipelines by burnash
* Enable `merge` write disposition for `athena` Iceberg by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1315
* adds std pipe iterator for stdout and stderr by rudolfix in https://github.com/dlt-hub/dlt/pull/1321
* adds _impl_cls to dlt.resource and dynamic config section to standalone resources with dynamic names by rudolfix in https://github.com/dlt-hub/dlt/pull/1324
* Accept :memory: mode for credentials parameter in duckdb factory by sultaniman in https://github.com/dlt-hub/dlt/pull/1297
* allows windows native, UNC and extended paths in filesystem source and destination by rudolfix in https://github.com/dlt-hub/dlt/pull/1335
* improves union validation: user friendly exceptions by rudolfix in https://github.com/dlt-hub/dlt/pull/1327
* improves instantiation and shutdown of thread pools for telemetry trackers by rudolfix in https://github.com/dlt-hub/dlt/pull/1340
* feat(airflow): pass data sources as callables and additional initializers for delayed source evaluation by IlyaFaer in https://github.com/dlt-hub/dlt/pull/1318
* Fix: ignores table options on ALTER TABLE in BigQuery by rudolfix in https://github.com/dlt-hub/dlt/pull/1306
* Fix: use correct check for column prop in column schema by z3z1ma in https://github.com/dlt-hub/dlt/pull/1347
* Streamlit caching and session state store fixes by sultaniman in https://github.com/dlt-hub/dlt/pull/1326
* implements method to merge columns in two table schemas by rudolfix in https://github.com/dlt-hub/dlt/pull/1348
* Extend motherduck client configuration to pass custom user agent by sultaniman in https://github.com/dlt-hub/dlt/pull/1284
* allows fsspec until 2023.1.0 by rudolfix in https://github.com/dlt-hub/dlt/pull/1305

Docs
* REST Client documentation by burnash https://dlthub.com/docs/general-usage/http/rest-client
* REST API verified source documentation by burnash willi-mueller francescomucio https://dlthub.com/docs/dlt-ecosystem/verified-sources/rest_api
* Docs/google ads by dat-a-man in https://github.com/dlt-hub/dlt/pull/1313
* Docs: Freshdesk documentation by dat-a-man in https://github.com/dlt-hub/dlt/pull/1228
* Add instruction on installing dlt via pixi and conda by sultaniman in https://github.com/dlt-hub/dlt/pull/1332

Verified Sources
* rest_api verified source: quickly declare REST API endpoints and convert it into regular dlt source by burnash willi-mueller francescomucio
* rest_api launch blog by adrianbr in https://github.com/dlt-hub/dlt/pull/1355

**Full Changelog**: https://github.com/dlt-hub/dlt/compare/0.4.10...0.4.11

0.4.10

Core Library
* Clickhouse destination by Pipboyguy in https://github.com/dlt-hub/dlt/pull/1097
* fix(filesystem): UNC paths are supported on filesystem source and destination by IlyaFaer in https://github.com/dlt-hub/dlt/pull/1209
* `scd2` extension: pick your active record literal, defaults to NULL by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1275
* make missing keys warning conditional on merge strategy by jorritsandbrink in https://github.com/dlt-hub/dlt/pull/1290
* Fix filesystem layout timestamps with milliseconds by sultaniman in https://github.com/dlt-hub/dlt/pull/1286
* fallbacks to copy on any OSError when doing hardlink by rudolfix in https://github.com/dlt-hub/dlt/pull/1302
* configurable anonymous telemetry tracker by rudolfix in https://github.com/dlt-hub/dlt/pull/1301
* fix athena edge case and adds layout tests for athena by sh-rp in https://github.com/dlt-hub/dlt/pull/1289
* Streamlit app: do not show a notice if there is no resource state for schema by sultaniman in https://github.com/dlt-hub/dlt/pull/1300

Docs
* Docs: Google Ads documentation. by dat-a-man in https://github.com/dlt-hub/dlt/pull/1224
* explains how to pass explicit credentials + few mssql cases by rudolfix in https://github.com/dlt-hub/dlt/pull/1299

**Full Changelog**: https://github.com/dlt-hub/dlt/compare/0.4.9...0.4.10

Page 2 of 15

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.