-
Notifications
You must be signed in to change notification settings - Fork 36
Comparing changes
Open a pull request
base repository: optimizely/python-sdk
base: v5.4.0
head repository: optimizely/python-sdk
compare: master
- 12 commits
- 31 files changed
- 7 contributors
Commits on Jan 2, 2026
-
[FSSDK-12035] Update: Exclude CMAB from UserProfileService (#474)
* Python: Exclude CMAB experiments from user profile updates and add related tests * linting fix * chore: trigger tests * Python: Exclude CMAB experiments from user profile updates and update related tests * Python: Exclude CMAB experiments from user profile storage in decision service * Python: Remove test for CMAB experiments with IGNORE_USER_PROFILE_SERVICE option
Configuration menu - View commit details
-
Copy full SHA for eadf141 - Browse repository at this point
Copy the full SHA eadf141View commit details
Commits on Jan 13, 2026
-
Configuration menu - View commit details
-
Copy full SHA for f98886a - Browse repository at this point
Copy the full SHA f98886aView commit details
Commits on Feb 10, 2026
-
[FSSDK-12276] update: replace flake8 with ruff (#492)
* Add Ruff configuration file * Update target version in Ruff configuration to Python 3.9 * Replace Flake8 with Ruff for linting in CI and update contribution guidelines * Remove Flake8 configuration file as part of replacing Flake8 with Ruff * ruff autofix * testing ruff fail in ci * Fix formatting in ruff.toml by ensuring newline at end of file * Update .github/workflows/python.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ruff fix --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Configuration menu - View commit details
-
Copy full SHA for 494e18b - Browse repository at this point
Copy the full SHA 494e18bView commit details
Commits on Feb 23, 2026
-
[FSSDK-12320] bugfix: PollingConfigManager rejects valid URL-only con…
…figuration (#497) * fix: update PollingConfigManager initialization requirements and enhance tests for url handling * fix: clarify initialization requirements for PollingConfigManager
Configuration menu - View commit details
-
Copy full SHA for da4caeb - Browse repository at this point
Copy the full SHA da4caebView commit details
Commits on Feb 26, 2026
-
[FSSDK-12317] update: clear arnica risks (#498)
* chore: remove outdated source clear GitHub Actions workflow * chore: add persist-credentials option to checkout steps in workflows
Configuration menu - View commit details
-
Copy full SHA for d651911 - Browse repository at this point
Copy the full SHA d651911View commit details
Commits on Mar 30, 2026
-
[AI-FSSDK] [FSSDK-12337] Add Feature Rollout support (#499)
* [AI-FSSDK] [FSSDK-12337] Add Feature Rollout support to project config parsing * [AI-FSSDK] [FSSDK-12337] Fix test structure, mypy and ruff compliance - Move feature rollout tests from standalone test_feature_rollout.py into test_config.py following module-level testing convention - Use base.BaseTest instead of unittest.TestCase for consistency - Fix mypy strict type errors in Variation construction using cast - All checks pass: ruff, mypy --strict, pytest (941/941) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI-FSSDK] [FSSDK-12337] Simplify feature rollout config parsing - Inline _get_everyone_else_variation logic, remove unnecessary static method - Use get_rollout_from_id() to match TDD pseudocode - Remove isinstance check (rollout experiments are always dicts) - Remove 3 unit tests for deleted helper method (edge cases already covered by integration-level tests) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [AI-FSSDK] [FSSDK-12337] Restore _get_everyone_else_variation as method - Restore as instance method matching TDD pseudocode structure - Takes flag (FeatureFlag) param, calls get_rollout_from_id internally - Caller simplified to: everyone_else_variation = self._get_everyone_else_variation(flag) * [AI-FSSDK] [FSSDK-12337] Add ExperimentTypes constants for type field - Add ExperimentTypes enum in helpers/enums.py with AB, MAB, CMAB, FEATURE_ROLLOUT - Use ExperimentTypes.FEATURE_ROLLOUT constant in config parsing instead of raw string * [AI-FSSDK] [FSSDK-12337] Type-restrict Experiment.type to ExperimentType - Add ExperimentType Literal type in helpers/types.py: 'a/b', 'mab', 'cmab', 'feature_rollout' - Change Experiment.type from Optional[str] to Optional[ExperimentType] * [AI-FSSDK] [FSSDK-12337] Remove ExperimentTypes class, simplify type check - Remove redundant ExperimentTypes class from enums.py (ExperimentType Literal suffices) - Simplify getattr(experiment, 'type', None) to experiment.type * [AI-FSSDK] [FSSDK-12337] Return Variation entity from _get_everyone_else_variation - Build Variation entity once in helper, derive dict from it in caller - Addresses PR review comment from jaeopt * [AI-FSSDK] [FSSDK-12337] Remove redundant tests, keep 6 essential ones Removed 7 tests that were covered by other tests: - test_experiment_type_field_parsed (covered by injection test) - test_feature_rollout_with_empty_rollout_experiments (similar to no_rollout) - test_feature_rollout_multiple_experiments_mixed_types (covered by injection + unchanged) - test_feature_rollout_flag_variations_map_includes_injected (subset of maps test) - test_experiment_type_ab (just string assignment) - test_feature_rollout_with_variables_on_everyone_else (edge case) - test_existing_datafile_not_broken (covered by none_when_missing + unchanged) * [AI-FSSDK] [FSSDK-12337] Add ExperimentTypes constant and targeted_delivery type - Add ExperimentTypes class in enums.py with ab, mab, cmab, td, fr - Add 'targeted_delivery' to ExperimentType Literal in types.py - Use enums.ExperimentTypes.fr constant in injection check - Add test for type field parsing from datafile * [AI-FSSDK] [FSSDK-12337] Remove test not in ticket spec Remove test_feature_rollout_everyone_else_is_last_rollout_rule to match updated Jira ticket test requirements. * [FSSDK-12337] Fix experiment type values to match backend Update ExperimentTypes and ExperimentType Literal to use actual backend values: 'multi_armed_bandit' and 'contextual_multi_armed_bandit' instead of shorthand 'mab' and 'cmab'. * Format ExperimentType definition for ruff check * [AI-FSSDK] [FSSDK-12337] Update experiment type values to short-form abbreviations * [AI-FSSDK] [FSSDK-12337] Add validation for experiment type field * trigger CI --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 55924e5 - Browse repository at this point
Copy the full SHA 55924e5View commit details
Commits on Apr 8, 2026
-
Configuration menu - View commit details
-
Copy full SHA for 54ae4c6 - Browse repository at this point
Copy the full SHA 54ae4c6View commit details
Commits on Apr 17, 2026
-
[FSSDK-12497] Fix return in finally block silently swallowing excepti…
…ons (#505) Move error-handling logic out of finally block into normal control flow and change bare except to except Exception. Per Python docs, a return in finally suppresses any in-flight exception, which silently swallows errors raised inside except blocks. Fixes #439 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for f02b3ce - Browse repository at this point
Copy the full SHA f02b3ceView commit details
Commits on Apr 24, 2026
-
[AI-FSSDK] [FSSDK-12368] Cleanup flag base setup (local holdouts) (#507)
* [FSSDK-12368] Remove legacy flag-level holdout fields Remove deprecated flag-level holdout functionality as cleanup after local holdouts (FSSDK-12369) implementation. Changes: - Removed includedFlags and excludedFlags from Holdout entity - Removed includedFlags and excludedFlags from HoldoutDict type - Removed get_holdouts_for_flag() method from ProjectConfig - Removed flag-level holdout infrastructure: - global_holdouts list - included_holdouts dict - excluded_holdouts dict - flag_holdouts_map dict - Flag-level population logic in ProjectConfig.__init__ - Removed flag-level holdout checking from DecisionService.get_variation_for_feature() - Removed 10 test methods testing removed functionality - Removed includedFlags/excludedFlags from all test fixtures Impact: 7 files modified, 310 lines deleted, 5 lines added (net: -305 lines) Verification: - grep for "includedFlags", "excludedFlags", "getHoldoutsForFlag" returns zero results - grep for "global_holdouts", "included_holdouts", "excluded_holdouts", "flag_holdouts_map" returns zero results Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * [FSSDK-12368] Restore holdout evaluation in decide flow, remove only flag-level include/exclude fields The previous cleanup removed the entire holdout evaluation from the decide flow. This restores holdout checking while keeping the removal of legacy includedFlags/excludedFlags fields — all running holdouts now apply to all flags uniformly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: Farhan Anjum <Farhan.Anjum@optimizely.com>
Configuration menu - View commit details
-
Copy full SHA for c05c09b - Browse repository at this point
Copy the full SHA c05c09bView commit details
Commits on Apr 30, 2026
-
[FSSDK-12521] chore: preparing for release v5.5.0 (#508)
* [FSSDK-12521] chore: preparing for release v5.5.0 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: remove internal tooling entries from changelog Removed ruff linter migration and Arnica code risk warning entries from the v5.5.0 changelog as they are internal CI/tooling changes not relevant to SDK users. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Update CHANGELOG.md Co-authored-by: Muzahidul Islam <129880873+muzahidul-opti@users.noreply.github.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Muzahidul Islam <129880873+muzahidul-opti@users.noreply.github.com>
Configuration menu - View commit details
-
Copy full SHA for 807d75b - Browse repository at this point
Copy the full SHA 807d75bView commit details
Commits on Jun 1, 2026
-
[AI-FSSDK] [FSSDK-12369] Add local holdouts support to Python SDK (#512)
* [AI-FSSDK] [FSSDK-12369] Add local holdouts support to Python SDK * [FSSDK-12369] Fix copyright year from 2025 to 2026 in new test files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * [FSSDK-12369] Add mandatory forced-decision-beats-local-holdout enforcement test * trigger CI * trigger CI Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Farhan Anjum <Farhan.Anjum@optimizely.com>
Configuration menu - View commit details
-
Copy full SHA for 013ddf0 - Browse repository at this point
Copy the full SHA 013ddf0View commit details
Commits on Jun 3, 2026
-
[AI-FSSDK] [FSSDK-12670] Block ODP identify event for single identifi…
…er (#513) * [AI-FSSDK] [FSSDK-12670] Block ODP identify event for single identifier * [FSSDK-12670] Address review feedback: fix log message * [FSSDK-12670] Retrigger CI * [FSSDK-12670] Add comment explaining the < 2 identifiers guard Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * [FSSDK-12670] retrigger CI --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Farhan Anjum <Farhan.Anjum@optimizely.com>
Configuration menu - View commit details
-
Copy full SHA for 9bf1c31 - Browse repository at this point
Copy the full SHA 9bf1c31View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v5.4.0...master