Metricflow

Latest version: v0.207.1

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

Scan your dependencies

Page 1 of 4

0.207.0

Breaking Changes

- Changes MetricFlowQueryRequest.where_constraint to where_constraints and now accepts a list ([1431](https://github.com/dbt-labs/metricflow/issues/1431))
- Require Python `>=3.9` ([1470](https://github.com/dbt-labs/metricflow/issues/1470))

Features

- Enable predicate pushdown for categorical dimensions ([1011](https://github.com/dbt-labs/metricflow/issues/1011))
- Support sub-daily granularity options in SQL rendering for all supported SQL engines. ([1258](https://github.com/dbt-labs/metricflow/issues/1258))
- Adds a new dataflow plan node to re-aggregate metrics using window functions. Needed to calculate cumulative metrics at non-default granularities. ([1274](https://github.com/dbt-labs/metricflow/issues/1274))
- Build dataflow plan for cumulative metrics queried with non-default granularity. ([1281](https://github.com/dbt-labs/metricflow/issues/1281))
- Remove restriction on querying non-default granularities with cumulative metrics. ([1282](https://github.com/dbt-labs/metricflow/issues/1282))
- Enable predicate pushdown optimization by default for all callers ([1011](https://github.com/dbt-labs/metricflow/issues/1011))
- Use Metric.time_granularity to resolve metric_time. ([1310](https://github.com/dbt-labs/metricflow/issues/1310))
- Support multiple time spines with different granularities. ([1348](https://github.com/dbt-labs/metricflow/issues/1348))
- Enable sub-daily queries without metrics. ([1359](https://github.com/dbt-labs/metricflow/issues/1359))
- Enable sub-daily time constraints. ([1367](https://github.com/dbt-labs/metricflow/issues/1367))
- Support combining AggregateMeasuresNodes where metric input measures have aliases, so long as there are no duplicates. ([1375](https://github.com/dbt-labs/metricflow/issues/1375))
- Handle custom granularities in DataflowPlan. ([1382](https://github.com/dbt-labs/metricflow/issues/1382))
- Support custom granularities in query parsing. ([1413](https://github.com/dbt-labs/metricflow/issues/1413))
- Support conversion metrics queried with custom granularities. ([1475](https://github.com/dbt-labs/metricflow/issues/1475))
- Basic support for join_to_timespine metrics with custom grain in the group by. ([1505](https://github.com/dbt-labs/metricflow/issues/1505))
- Use CTEs instead of sub-queries in generated SQL. ([1040](https://github.com/dbt-labs/metricflow/issues/1040))
- Add meta to dimensions, entities, and measures
- Adds tags to SavedQueries
- Allow setting aliases for queried metrics ([1573](https://github.com/dbt-labs/metricflow/issues/1573))

Fixes

- When querying multiple agg time or metric time dimensions with a cumulative metric, select all of them from the time spine table. ([1271](https://github.com/dbt-labs/metricflow/issues/1271))
- Remove extraneous where filter subqueries added by predicate pushdown ([1011](https://github.com/dbt-labs/metricflow/issues/1011))
- Add Column header to the exported CSV from query command
- Allow metrics with matching input measures where one is cumulative and one is not. ([1374](https://github.com/dbt-labs/metricflow/issues/1374))
- Fixes bug where conversion metric query fails when filter with base semantic model's dimension is provided ([1210](https://github.com/dbt-labs/metricflow/issues/1210))
- Bug fix: ensure that granularity requested for non-additive dimension is respected. ([1383](https://github.com/dbt-labs/metricflow/issues/1383))
- Bug fix: when querying a join_to_timespine metric with a metric_time filter that is not included in the group by, unexpected output rows were included. ([1450](https://github.com/dbt-labs/metricflow/issues/1450))
- Remove unnecessary group bys that make queries less efficient. ([1453](https://github.com/dbt-labs/metricflow/issues/1453))
- Add new validation that checks for SCDs in the join path to make grouping by `metric_time` required in this case. ([1451](https://github.com/dbt-labs/metricflow/issues/1451))
- Make ID generation thread-safe ([1473](https://github.com/dbt-labs/metricflow/issues/1473))
- Prevent SourceScanOptimizer from combining nodes that use the same input metric alias in different derived metrics ([1494](https://github.com/dbt-labs/metricflow/issues/1494))
- Always treat metric_time and the agg_time_dimension the same in the JoinToTimeSpineNode. ([1541](https://github.com/dbt-labs/metricflow/issues/1541))
- Apply time constraints after time offsets to avoid filtering out values that will change later in the query. ([1544](https://github.com/dbt-labs/metricflow/issues/1544))

Under the Hood

- Add test coverage for more filter + join interactions ([1240](https://github.com/dbt-labs/metricflow/issues/1240))
- Add dataflow plan optimizer to replace build-time predicate pushdown ([1011](https://github.com/dbt-labs/metricflow/issues/1011))
- Added filtering for DWH validation tasks and saved query support ([1271](https://github.com/dbt-labs/metricflow/issues/1271))
- Refine subquery ID generation. This may result in changing subquery ids for rendered SQL. ([1280](https://github.com/dbt-labs/metricflow/issues/1280))
- Move categorical dimension predicate pushdown to DataflowPlanOptimizer ([1011](https://github.com/dbt-labs/metricflow/issues/1011))
- Consume cumulative-specific metric type params from new cumulative_type_params field. ([1293](https://github.com/dbt-labs/metricflow/issues/1293))

Dependencies

- Allow pydantic 2.x installations ([1299](https://github.com/dbt-labs/metricflow/issues/1299))

Contributors
- [DevonFulcher](https://github.com/DevonFulcher)
- [WilliamDee](https://github.com/WilliamDee) ([#1210](https://github.com/dbt-labs/metricflow/issues/1210), [#1271](https://github.com/dbt-labs/metricflow/issues/1271))
- [WilliamDee,courtneyholcomb](https://github.com/WilliamDee,courtneyholcomb) ([#1431](https://github.com/dbt-labs/metricflow/issues/1431))
- [courtneyholcomb](https://github.com/courtneyholcomb) ([#1258](https://github.com/dbt-labs/metricflow/issues/1258), [#1274](https://github.com/dbt-labs/metricflow/issues/1274), [#1281](https://github.com/dbt-labs/metricflow/issues/1281), [#1282](https://github.com/dbt-labs/metricflow/issues/1282), [#1310](https://github.com/dbt-labs/metricflow/issues/1310), [#1348](https://github.com/dbt-labs/metricflow/issues/1348), [#1359](https://github.com/dbt-labs/metricflow/issues/1359), [#1367](https://github.com/dbt-labs/metricflow/issues/1367), [#1375](https://github.com/dbt-labs/metricflow/issues/1375), [#1382](https://github.com/dbt-labs/metricflow/issues/1382), [#1413](https://github.com/dbt-labs/metricflow/issues/1413), [#1475](https://github.com/dbt-labs/metricflow/issues/1475), [#1505](https://github.com/dbt-labs/metricflow/issues/1505), [#1271](https://github.com/dbt-labs/metricflow/issues/1271), [#1374](https://github.com/dbt-labs/metricflow/issues/1374), [#1383](https://github.com/dbt-labs/metricflow/issues/1383), [#1450](https://github.com/dbt-labs/metricflow/issues/1450), [#1453](https://github.com/dbt-labs/metricflow/issues/1453), [#1541](https://github.com/dbt-labs/metricflow/issues/1541), [#1544](https://github.com/dbt-labs/metricflow/issues/1544), [#1293](https://github.com/dbt-labs/metricflow/issues/1293))
- [plypaul](https://github.com/plypaul) ([#1470](https://github.com/dbt-labs/metricflow/issues/1470), [#1040](https://github.com/dbt-labs/metricflow/issues/1040), [#1473](https://github.com/dbt-labs/metricflow/issues/1473))
- [saurabh0402](https://github.com/saurabh0402)
- [serramatutu](https://github.com/serramatutu) ([#1573](https://github.com/dbt-labs/metricflow/issues/1573), [#1451](https://github.com/dbt-labs/metricflow/issues/1451), [#1494](https://github.com/dbt-labs/metricflow/issues/1494))
- [theyostalservice](https://github.com/theyostalservice)
- [tlento](https://github.com/tlento) ([#1011](https://github.com/dbt-labs/metricflow/issues/1011), [#1011](https://github.com/dbt-labs/metricflow/issues/1011), [#1011](https://github.com/dbt-labs/metricflow/issues/1011), [#1240](https://github.com/dbt-labs/metricflow/issues/1240), [#1011](https://github.com/dbt-labs/metricflow/issues/1011), [#1280](https://github.com/dbt-labs/metricflow/issues/1280), [#1011](https://github.com/dbt-labs/metricflow/issues/1011), [#1299](https://github.com/dbt-labs/metricflow/issues/1299))

0.206.0

Breaking Changes

- Remove unsupported legacy MetricFlowClient APIs ([1094](https://github.com/dbt-labs/metricflow/issues/1094))
- Move MetricFlow CLI to dbt-metricflow package ([1090](https://github.com/dbt-labs/metricflow/issues/1090))

Features

- Allow metrics in filters for metrics and metric queries. ([740](https://github.com/dbt-labs/metricflow/issues/740))
- Enable metric filters for distinct values queries. ([1107](https://github.com/dbt-labs/metricflow/issues/1107))
- List all dimensions for the semantic manifest. ([1142](https://github.com/dbt-labs/metricflow/issues/1142))
- Add a Dependency Resolver for Saved Queries ([1155](https://github.com/dbt-labs/metricflow/issues/1155))
- Add support for Python 3.12 ([1065](https://github.com/dbt-labs/metricflow/issues/1065))
- Update `dbt-metricflow` dependencies to use `dbt*` 1.8 packages ([1243](https://github.com/dbt-labs/metricflow/issues/1243))

Fixes

- Enable filtering by metrics in the same semantic model as queried metrics. ([1115](https://github.com/dbt-labs/metricflow/issues/1115))
- Improve error messages for dataflow plan failures. ([1118](https://github.com/dbt-labs/metricflow/issues/1118))
- Remove redundant entity names like 'listing__listing' from suggested group bys. ([1130](https://github.com/dbt-labs/metricflow/issues/1130))
- For metrics that join to time spine, apply post-join filters only for specs that are in the group by. ([1119](https://github.com/dbt-labs/metricflow/issues/1119))

Under the Hood

- Clean up files included in MetricFlow package distribution ([1092](https://github.com/dbt-labs/metricflow/issues/1092))
- Move MetricFlow tests to repository root ([1088](https://github.com/dbt-labs/metricflow/issues/1088))
- Create `metricflow-semantics` package. ([1150](https://github.com/dbt-labs/metricflow/issues/1150))
- Make source semantic models available from DataflowPlanNode instances ([1218](https://github.com/dbt-labs/metricflow/issues/1218))
- Cache functions related to parsing group by options in order to improve query performance. ([1229](https://github.com/dbt-labs/metricflow/issues/1229))

Dependencies

- Update Ruff to 0.3.3 ([769](https://github.com/dbt-labs/metricflow/issues/769))
- Update dbt-semantic-interfaces minimum version to 0.5.1 ([1104](https://github.com/dbt-labs/metricflow/issues/1104))

Contributors
- [courtneyholcomb](https://github.com/courtneyholcomb) ([#740](https://github.com/dbt-labs/metricflow/issues/740), [#1107](https://github.com/dbt-labs/metricflow/issues/1107), [#1142](https://github.com/dbt-labs/metricflow/issues/1142), [#1115](https://github.com/dbt-labs/metricflow/issues/1115), [#1118](https://github.com/dbt-labs/metricflow/issues/1118), [#1130](https://github.com/dbt-labs/metricflow/issues/1130), [#1119](https://github.com/dbt-labs/metricflow/issues/1119), [#1229](https://github.com/dbt-labs/metricflow/issues/1229))
- [plypaul](https://github.com/plypaul) ([#1155](https://github.com/dbt-labs/metricflow/issues/1155), [#1065](https://github.com/dbt-labs/metricflow/issues/1065), [#1243](https://github.com/dbt-labs/metricflow/issues/1243), [#1150](https://github.com/dbt-labs/metricflow/issues/1150))
- [tlento](https://github.com/tlento) ([#1094](https://github.com/dbt-labs/metricflow/issues/1094), [#1090](https://github.com/dbt-labs/metricflow/issues/1090), [#1092](https://github.com/dbt-labs/metricflow/issues/1092), [#1088](https://github.com/dbt-labs/metricflow/issues/1088), [#1218](https://github.com/dbt-labs/metricflow/issues/1218), [#769](https://github.com/dbt-labs/metricflow/issues/769), [#1104](https://github.com/dbt-labs/metricflow/issues/1104))

0.205.0

Breaking Changes

- Remove SQL-Comment-Based Tags ([1034](https://github.com/dbt-labs/metricflow/issues/1034))

Features

- Enable querying metric_time without metrics. ([928](https://github.com/dbt-labs/metricflow/issues/928))
- Enable querying cumulative metrics with their agg_time_dimension. ([1000](https://github.com/dbt-labs/metricflow/issues/1000))
- Enable offset metrics to be queried with agg_time_dimension. ([1006](https://github.com/dbt-labs/metricflow/issues/1006))
- Add Support for Consistent SQL Query Generation ([1020](https://github.com/dbt-labs/metricflow/issues/1020))

Fixes

- Validate that there are metrics or group by items in each query. ([1002](https://github.com/dbt-labs/metricflow/issues/1002))
- For measures that join to time spine, allow joining when agg_time_dimension is queried. ([1009](https://github.com/dbt-labs/metricflow/issues/1009))
- Join to time spine if requested for conversion metric input measures. ([1048](https://github.com/dbt-labs/metricflow/issues/1048))
- Enable querying offset metric with multiple agg_time_dimensions at once. Also fixes a bug when filtering by a different grain than the group by grain. ([1052](https://github.com/dbt-labs/metricflow/issues/1052), [#1053](https://github.com/dbt-labs/metricflow/issues/1053))
- Bug fix: if measure joins to time spine, apply filters again after that join. ([1039](https://github.com/dbt-labs/metricflow/issues/1039))
- Improve error message for metrics/queries with missing inputs ([1051](https://github.com/dbt-labs/metricflow/issues/1051))

Docs

- change group-bys to group-by in the tutorial message

Under the Hood

- Add test for nested derived metric filter rendering bug fixed in 0.204.0 ([920](https://github.com/dbt-labs/metricflow/issues/920))

Dependencies

- Remove unused numpy dependency ([984](https://github.com/dbt-labs/metricflow/issues/984))
- Update Jinja2 past 3.1.3 to resolve CVE-2024-22195 ([1049](https://github.com/dbt-labs/metricflow/issues/1049))

Contributors
- [batou9150](https://github.com/batou9150)
- [courtneyholcomb](https://github.com/courtneyholcomb) ([#928](https://github.com/dbt-labs/metricflow/issues/928), [#1000](https://github.com/dbt-labs/metricflow/issues/1000), [#1006](https://github.com/dbt-labs/metricflow/issues/1006), [#1002](https://github.com/dbt-labs/metricflow/issues/1002), [#1009](https://github.com/dbt-labs/metricflow/issues/1009), [#1048](https://github.com/dbt-labs/metricflow/issues/1048), [#1052](https://github.com/dbt-labs/metricflow/issues/1052), [#1053](https://github.com/dbt-labs/metricflow/issues/1053), [#1039](https://github.com/dbt-labs/metricflow/issues/1039))
- [plypaul](https://github.com/plypaul) ([#1034](https://github.com/dbt-labs/metricflow/issues/1034), [#1020](https://github.com/dbt-labs/metricflow/issues/1020))
- [tlento](https://github.com/tlento) ([#1051](https://github.com/dbt-labs/metricflow/issues/1051), [#920](https://github.com/dbt-labs/metricflow/issues/920), [#984](https://github.com/dbt-labs/metricflow/issues/984), [#1049](https://github.com/dbt-labs/metricflow/issues/1049))

0.204.0

Features

- Add Trino support to the MetricFlow. ([207](https://github.com/dbt-labs/metricflow/issues/207))
- Implemented date_part in where filter. ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Resolve Ambiguous Group-By-Items ([887](https://github.com/dbt-labs/metricflow/issues/887))
- Support for Conversion Metrics ([252](https://github.com/dbt-labs/metricflow/issues/252))
- Add a Query Validation Rule for Repeated Metrics in a Query ([943](https://github.com/dbt-labs/metricflow/issues/943))
- Expose label on Metric & Dimension for use in APIs. ([956](https://github.com/dbt-labs/metricflow/issues/956))

Fixes

- Apply time offset for nested dervied & ratio metrics ([882](https://github.com/dbt-labs/metricflow/issues/882))
- Fix Incorrect SQL Column Name Rendering for WhereConstraintNode ([908](https://github.com/dbt-labs/metricflow/issues/908))
- `Unable To Satisfy Query Error` with Cumulative Metrics in Saved Queries ([917](https://github.com/dbt-labs/metricflow/issues/917))
- Fixes a bug in dimension-only queries where the filter column is removed before the filter has been applied. ([923](https://github.com/dbt-labs/metricflow/issues/923))
- Bug fix: Keep where constraint column until used for nested derived offset metric queries. ([930](https://github.com/dbt-labs/metricflow/issues/930))
- Fixes incorrect time constraint applied to derived offset metrics. ([925](https://github.com/dbt-labs/metricflow/issues/925))
- Remove default time constraint for queries with cumulative metrics. ([917](https://github.com/dbt-labs/metricflow/issues/917))
- Return exit code 1 for failed validations ([867](https://github.com/dbt-labs/metricflow/issues/867))
- Optimizer Does Not Deduplicate Common Metrics ([941](https://github.com/dbt-labs/metricflow/issues/941))
- Duplicate input measures after combiner optimizer ([969](https://github.com/dbt-labs/metricflow/issues/969))

Under the Hood

- Test to ensure Dimension and TimeDimension syntax are identical in the case of time dimensions
- Fixed typo in error message

Dependencies

- Remove unnecessary MarkupSafe dependency ([950](https://github.com/dbt-labs/metricflow/pull/950))

Contributors
- [DevonFulcher](https://github.com/DevonFulcher)
- [WilliamDee](https://github.com/WilliamDee) ([#252](https://github.com/dbt-labs/metricflow/issues/252), [#867](https://github.com/dbt-labs/metricflow/issues/867), [#969](https://github.com/dbt-labs/metricflow/issues/969))
- [courtneyholcomb](https://github.com/courtneyholcomb) ([#956](https://github.com/dbt-labs/metricflow/issues/956), [#882](https://github.com/dbt-labs/metricflow/issues/882), [#923](https://github.com/dbt-labs/metricflow/issues/923), [#930](https://github.com/dbt-labs/metricflow/issues/930), [#925](https://github.com/dbt-labs/metricflow/issues/925))
- [plypaul](https://github.com/plypaul) ([#887](https://github.com/dbt-labs/metricflow/issues/887), [#943](https://github.com/dbt-labs/metricflow/issues/943), [#908](https://github.com/dbt-labs/metricflow/issues/908), [#917](https://github.com/dbt-labs/metricflow/issues/917), [#917](https://github.com/dbt-labs/metricflow/issues/917), [#941](https://github.com/dbt-labs/metricflow/issues/941))
- [sarbmeetka](https://github.com/sarbmeetka) ([#207](https://github.com/dbt-labs/metricflow/issues/207))
- [tlento](https://github.com/tlento) ([#950](https://github.com/dbt-labs/metricflow/pull/950))

0.203.1

Fixes

- Fix error in cumulative metric output when start-time and end-time are specified ([869](https://github.com/dbt-labs/metricflow/issues/869))

Dependencies

- Remove Rudderstack client and associated dependencies ([866](https://github.com/dbt-labs/metricflow/pull/866))
- Relax version pin on typing extensions to allow >=4.4, <5 ([875](https://github.com/dbt-labs/metricflow/pull/875))

Contributors
- [tlento](https://github.com/tlento) ([#869](https://github.com/dbt-labs/metricflow/issues/869), [#866](https://github.com/dbt-labs/metricflow/pull/866), [#875](https://github.com/dbt-labs/metricflow/pull/875))

0.203.0

Breaking Changes

- Use FULL OUTER JOIN to combine input metrics for derived metrics. This is a change from using INNER JOIN and may result in changes in output. ([842](https://github.com/dbt-labs/metricflow/issues/842))
- Update Dependencies to Use `dbt-semantic-interfaces~=0.4.0` ([846](https://github.com/dbt-labs/metricflow/issues/846))

Features

- Enable DATE PART aggregation for time dimensions ([770](https://github.com/dbt-labs/metricflow/issues/770))
- Support Saved Queries in MetricFlow ([765](https://github.com/dbt-labs/metricflow/issues/765))
- Support for sort order in query interface ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Support for the Dimension(...).grain(...) syntax for the where parameter ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Support querying dimensions without metrics. ([804](https://github.com/dbt-labs/metricflow/issues/804))
- Join to time spine and fill nulls when requested on metric input measures. ([759](https://github.com/dbt-labs/metricflow/issues/759))
- Fill nulls for multi-metric queries ([850](https://github.com/dbt-labs/metricflow/issues/850))

Fixes

- Removing methods and reordering parameters for Query Interface. ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Coerce time granularity to configured value to prevent finer-grained timestamps from causing unexpected query behavior ([714](https://github.com/dbt-labs/metricflow/issues/714))
- Prioritize source nodes based on correct cost ([801](https://github.com/dbt-labs/metricflow/issues/801))
- Enables case insensitivity for various query params. ([802](https://github.com/dbt-labs/metricflow/issues/802))
- Ensure extract calls return consistent results across engines ([792](https://github.com/dbt-labs/metricflow/issues/792))
- The --order param was being dropped from CLI saved queries. ([835](https://github.com/dbt-labs/metricflow/issues/835))
- Fix query validation for metric_time requirements ([825](https://github.com/dbt-labs/metricflow/issues/825))
- Use FULL OUTER JOIN for dimension-only queries. ([863](https://github.com/dbt-labs/metricflow/issues/863))

Under the Hood

- A simple update to make the where filter query parameter objects more accurate ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Expose underlying where clause error message ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Remove query interface and depend on DSI protocol instead ([None](https://github.com/dbt-labs/metricflow/issues/None))
- re-categorize `TypeErrors` that arise from `create_from_where_filter` into `InvalidQueryException` ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Add the ability to use distinct select in sql nodes ([None](https://github.com/dbt-labs/metricflow/issues/None))
- Removed DatePart Enum and change imports to depend on DSI version instead. ([None](https://github.com/dbt-labs/metricflow/issues/None))

Dependencies

- Update to dbt-semantic-interfaces~=0.3.0. ([809](https://github.com/dbt-labs/metricflow/pull/809))
- Update typing-extensions minimum version to 4.4 ([823](https://github.com/dbt-labs/metricflow/pull/823))
- Update dbt dependencies to ~=1.7.0 ([860](https://github.com/dbt-labs/metricflow/pull/860))

Contributors
- [DevonFulcher](https://github.com/DevonFulcher) (closed issue list unavailable)
- [WilliamDee](https://github.com/WilliamDee) (closed issue list unavailable)
- [courtneyholcomb](https://github.com/courtneyholcomb) ([#842](https://github.com/dbt-labs/metricflow/issues/842), [#770](https://github.com/dbt-labs/metricflow/issues/770), [#804](https://github.com/dbt-labs/metricflow/issues/804), [#759](https://github.com/dbt-labs/metricflow/issues/759), [#850](https://github.com/dbt-labs/metricflow/issues/850), [#801](https://github.com/dbt-labs/metricflow/issues/801), [#802](https://github.com/dbt-labs/metricflow/issues/802), [#835](https://github.com/dbt-labs/metricflow/issues/835), [#863](https://github.com/dbt-labs/metricflow/issues/863))
- [plypaul](https://github.com/plypaul) ([#846](https://github.com/dbt-labs/metricflow/issues/846), [#765](https://github.com/dbt-labs/metricflow/issues/765), [#809](https://github.com/dbt-labs/metricflow/pull/809))
- [tlento](https://github.com/tlento) ([#714](https://github.com/dbt-labs/metricflow/issues/714), [#792](https://github.com/dbt-labs/metricflow/issues/792), [#825](https://github.com/dbt-labs/metricflow/issues/825), [#823](https://github.com/dbt-labs/metricflow/pull/823), [#860](https://github.com/dbt-labs/metricflow/pull/860))

Page 1 of 4

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.