kameleoon-client-python 3.8.0__tar.gz → 3.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/PKG-INFO +1 -1
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/data_file.py +20 -1
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/feature_flag.py +3 -1
- kameleoon-client-python-3.9.0/kameleoon/configuration/me_group.py +24 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/exceptions.py +1 -1
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/hasher.py +5 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/kameleoon_client.py +39 -12
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/sdk_version.py +1 -1
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon_client_python.egg-info/PKG-INFO +1 -1
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon_client_python.egg-info/SOURCES.txt +1 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/MANIFEST.in +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/README.md +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/client_readiness/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/client_readiness/async_readiness.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/client_readiness/threading_readiness.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/custom_data_info.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/experiment.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/rule.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/rule_type.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/settings.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/variable.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/variation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/variation_by_exposition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/browser.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/conversion.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/cookie.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/custom_data.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/data.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/device.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/geolocation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/kcs_heat.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/assigned_variation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/forced_experiment_variation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/forced_feature_variation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/forced_variation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/page_view_visit.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/visitor.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/visitor_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/visitor_slot.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/mapping_identifier.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/operating_system.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/page_view.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/unique_identifier.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/user_agent.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/visitor_visits.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/defaults.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/domain.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/functions.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/logger.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/multi_threading.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/nonce.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/repeat_timer.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/scheduler.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/string_utils.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/visitor_code.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/hybrid/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/hybrid/hybrid_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/hybrid/hybrid_manager_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/kameleoon_client_config.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/kameleoon_client_factory.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/logging/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/logging/kameleoon_logger.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/logging/log_level.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/logging/logger.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/asyncexec/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/asyncexec/async_executor.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/data/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/data/data_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/evaluation/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/evaluation/evaluated_experiment.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/remote_data/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/remote_data/remote_data_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/remote_data/remote_visitor_data.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/tracking/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/tracking/tracking_builder.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/tracking/tracking_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/tracking/visitor_tracking_registry.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/warehouse/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/warehouse/warehouse_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/middleware.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/access_token_source.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/access_token_source_factory.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/activity_event.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/cookie/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/cookie/cookie_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/net_provider.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/net_provider_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/network_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/network_manager_factory.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/network_manager_factory_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/network_manager_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/query_builder.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/query_encodable.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/sendable.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/service_initialize_context.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/service_initialize_context_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/automation_service.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/automation_service_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/configuration_service.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/configuration_service_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/data_service.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/data_service_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/service.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/services/service_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/uri_helper.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/url_provider.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/real_time/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/real_time/real_time_configuration_service.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/real_time/real_time_event.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/cache.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/cache_factory.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/cache_factory_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/cache_impl.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/browser_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/constants.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/conversion_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/cookie_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/custom_datum.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/device_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/exclusive_feature_flag_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/geolocation_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/kcs_heat_range_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/number_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/operating_system_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/page_title_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/page_url_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/page_view_number_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/previous_page_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/sdk_language_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/segment_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/string_value_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/target_feature_flag_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/targeting_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/time_elapsed_since_visit_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/unknown_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/visit_number_today_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/visit_number_total_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/visitor_code_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/conditions/visitor_new_return_condition.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/models.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/targeting_manager.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/tree_builder.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/tree_condition_factory.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/types/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/types/remote_visitor_data_filter.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/types/variable.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/types/variation.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon_client_python.egg-info/dependency_links.txt +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon_client_python.egg-info/requires.txt +14 -14
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon_client_python.egg-info/top_level.txt +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/setup.cfg +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/setup.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/admin.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/apps.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/migrations/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/models.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/tests.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/kameleoon_app/views.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/manage.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/__init__.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/asgi.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/settings.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/urls.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/wsgi.py +0 -0
- {kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/resources/config.yml +0 -0
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/data_file.py
RENAMED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"""Kameleoon Configuration"""
|
|
2
2
|
|
|
3
|
-
from typing import Any, Dict, Optional, Set
|
|
3
|
+
from typing import Any, Dict, Iterable, List, Optional, Set
|
|
4
4
|
from kameleoon.configuration import Variable
|
|
5
5
|
from kameleoon.configuration.custom_data_info import CustomDataInfo
|
|
6
6
|
from kameleoon.configuration.experiment import Experiment
|
|
7
7
|
from kameleoon.configuration.feature_flag import FeatureFlag
|
|
8
|
+
from kameleoon.configuration.me_group import MEGroup
|
|
8
9
|
from kameleoon.configuration.rule import Rule
|
|
9
10
|
from kameleoon.configuration.settings import Settings
|
|
10
11
|
from kameleoon.configuration.variation_by_exposition import VariationByExposition
|
|
@@ -52,6 +53,7 @@ class DataFile:
|
|
|
52
53
|
self.__environment = environment # pylint: disable=W0238
|
|
53
54
|
self.__settings = settings
|
|
54
55
|
self.__feature_flags: Dict[str, FeatureFlag] = feature_flags
|
|
56
|
+
self.__me_groups = self.__make_me_groups(feature_flags.values())
|
|
55
57
|
self.__has_any_targeted_delivery_rule = any(
|
|
56
58
|
rule.is_targeted_delivery
|
|
57
59
|
for ff in self.__feature_flags.values()
|
|
@@ -81,6 +83,11 @@ class DataFile:
|
|
|
81
83
|
"""Returns dictionary of all feature flags stored by feature keys"""
|
|
82
84
|
return self.__feature_flags
|
|
83
85
|
|
|
86
|
+
@property
|
|
87
|
+
def me_groups(self) -> Dict[str, MEGroup]:
|
|
88
|
+
"""Returns the mutually exclusive groups by their names"""
|
|
89
|
+
return self.__me_groups
|
|
90
|
+
|
|
84
91
|
@property
|
|
85
92
|
def feature_flag_by_id(self) -> Dict[int, FeatureFlag]:
|
|
86
93
|
"""Returns dictionary of all feature flags stored by id"""
|
|
@@ -146,6 +153,18 @@ class DataFile:
|
|
|
146
153
|
if variation.variation_id is not None:
|
|
147
154
|
self.__variation_by_id[variation.variation_id] = variation
|
|
148
155
|
|
|
156
|
+
@staticmethod
|
|
157
|
+
def __make_me_groups(feature_flags: Iterable[FeatureFlag]) -> Dict[str, MEGroup]:
|
|
158
|
+
me_group_lists: Dict[str, List[FeatureFlag]] = {}
|
|
159
|
+
for feature_flag in feature_flags:
|
|
160
|
+
if feature_flag.me_group_name:
|
|
161
|
+
me_group_list = me_group_lists.get(feature_flag.me_group_name)
|
|
162
|
+
if me_group_list:
|
|
163
|
+
me_group_list.append(feature_flag)
|
|
164
|
+
else:
|
|
165
|
+
me_group_lists[feature_flag.me_group_name] = [feature_flag]
|
|
166
|
+
return {me_group_name: MEGroup(me_group_list) for me_group_name, me_group_list in me_group_lists.items()}
|
|
167
|
+
|
|
149
168
|
@staticmethod
|
|
150
169
|
def __has_feature_flag_variable_js_css(feature_flag: FeatureFlag) -> bool:
|
|
151
170
|
variations = feature_flag.variations
|
|
@@ -17,10 +17,11 @@ class FeatureFlag:
|
|
|
17
17
|
"""Create a list of FeatureFlags from the json array"""
|
|
18
18
|
return [FeatureFlag(item) for item in array]
|
|
19
19
|
|
|
20
|
-
def __init__(self, dict_json: Dict[str, Any]):
|
|
20
|
+
def __init__(self, dict_json: Dict[str, Any]) -> None:
|
|
21
21
|
self.id_: int = dict_json.get("id", 0)
|
|
22
22
|
self.feature_key: str = dict_json.get("featureKey", "")
|
|
23
23
|
self.default_variation_key: str = dict_json.get("defaultVariationKey", "")
|
|
24
|
+
self.me_group_name: Optional[str] = dict_json.get("mutuallyExclusiveGroup")
|
|
24
25
|
self.variations: List[Variation] = Variation.from_array(
|
|
25
26
|
dict_json.get("variations", [])
|
|
26
27
|
)
|
|
@@ -39,6 +40,7 @@ class FeatureFlag:
|
|
|
39
40
|
f"environment_enabled:{self.environment_enabled},"
|
|
40
41
|
f"variations:{StringUtils.object_to_string(self.variations)},"
|
|
41
42
|
f"default_variation_key:'{self.default_variation_key}',"
|
|
43
|
+
f"me_group_name:'{self.me_group_name}',"
|
|
42
44
|
f"rules:{len(self.rules)}"
|
|
43
45
|
f"}}"
|
|
44
46
|
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Kameleoon Configuration"""
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
from kameleoon.configuration.feature_flag import FeatureFlag
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class MEGroup:
|
|
8
|
+
"""Represents a mutually exclusive group"""
|
|
9
|
+
|
|
10
|
+
def __init__(self, feature_flags: List[FeatureFlag]) -> None:
|
|
11
|
+
feature_flags.sort(key=lambda ff: ff.id_)
|
|
12
|
+
self.__feature_flags = feature_flags
|
|
13
|
+
|
|
14
|
+
@property
|
|
15
|
+
def feature_flags(self) -> List[FeatureFlag]:
|
|
16
|
+
"""Returns the feature flags"""
|
|
17
|
+
return self.__feature_flags
|
|
18
|
+
|
|
19
|
+
def get_feature_flag_by_hash(self, hash_double: float) -> FeatureFlag:
|
|
20
|
+
"""Finds a feature flag by the given hash"""
|
|
21
|
+
idx = int(hash_double * len(self.__feature_flags))
|
|
22
|
+
if idx >= len(self.__feature_flags):
|
|
23
|
+
idx = len(self.__feature_flags) - 1
|
|
24
|
+
return self.__feature_flags[idx]
|
|
@@ -70,7 +70,7 @@ class FeatureNotFound(NotFoundError):
|
|
|
70
70
|
super().__init__(self.message)
|
|
71
71
|
|
|
72
72
|
|
|
73
|
-
class FeatureExperimentNotFound(NotFoundError):
|
|
73
|
+
class FeatureExperimentNotFound(NotFoundError):
|
|
74
74
|
"""Exception indicating that the requested experiment has not been found.
|
|
75
75
|
Check that the experiment's ID matches the provided one."""
|
|
76
76
|
|
|
@@ -19,6 +19,11 @@ class Hasher:
|
|
|
19
19
|
identifier += str(respool_time)
|
|
20
20
|
return Hasher._calculate(identifier)
|
|
21
21
|
|
|
22
|
+
@staticmethod
|
|
23
|
+
def obtain_hash_for_me_group(visitor_code: str, me_group_name: str) -> float:
|
|
24
|
+
"""Calculate the hash value for a mutually exclusive group for a given visitor code"""
|
|
25
|
+
return Hasher._calculate(visitor_code + me_group_name)
|
|
26
|
+
|
|
22
27
|
@staticmethod
|
|
23
28
|
def _calculate(str_to_hash: str) -> float:
|
|
24
29
|
return int(hashlib.sha256(str_to_hash.encode("UTF-8")).hexdigest(), 16) / math.pow(2, 256)
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/kameleoon_client.py
RENAMED
|
@@ -612,7 +612,8 @@ class KameleoonClient:
|
|
|
612
612
|
forced_variation = visitor.get_forced_feature_variation(feature_flag.feature_key) if visitor else None
|
|
613
613
|
if forced_variation:
|
|
614
614
|
eval_exp = EvaluatedExperiment.from_forced_variation(forced_variation)
|
|
615
|
-
elif self.__is_visitor_not_in_holdout(visitor, visitor_code, track, save)
|
|
615
|
+
elif self.__is_visitor_not_in_holdout(visitor, visitor_code, track, save) and \
|
|
616
|
+
self.__is_ff_unrestricted_by_me_group(visitor, visitor_code, feature_flag):
|
|
616
617
|
eval_exp = self.__calculate_variation_rule_for_feature(visitor_code, feature_flag)
|
|
617
618
|
if save and not (forced_variation and forced_variation.simulated):
|
|
618
619
|
self.__save_variation(visitor_code, eval_exp, track)
|
|
@@ -622,26 +623,52 @@ class KameleoonClient:
|
|
|
622
623
|
)
|
|
623
624
|
return eval_exp
|
|
624
625
|
|
|
626
|
+
def __is_ff_unrestricted_by_me_group(
|
|
627
|
+
self, visitor: Optional[Visitor], visitor_code: str, feature_flag: FeatureFlag
|
|
628
|
+
) -> bool:
|
|
629
|
+
if feature_flag.me_group_name is None:
|
|
630
|
+
return True
|
|
631
|
+
KameleoonLogger.debug(
|
|
632
|
+
"CALL: KameleoonClient.__is_ff_unrestricted_by_me_group(visitor, visitor_code: %s, feature_flag: %s)",
|
|
633
|
+
visitor_code, feature_flag
|
|
634
|
+
)
|
|
635
|
+
unrestricted = True
|
|
636
|
+
me_group = self._data_manager.data_file.me_groups.get(feature_flag.me_group_name)
|
|
637
|
+
if me_group:
|
|
638
|
+
code_for_hash = self.__get_code_for_hash(visitor, visitor_code)
|
|
639
|
+
me_group_hash = Hasher.obtain_hash_for_me_group(code_for_hash, feature_flag.me_group_name)
|
|
640
|
+
KameleoonLogger.debug(
|
|
641
|
+
"Calculated ME group hash %s for code: %s, meGroup: %s",
|
|
642
|
+
me_group_hash, code_for_hash, feature_flag.me_group_name
|
|
643
|
+
)
|
|
644
|
+
unrestricted = me_group.get_feature_flag_by_hash(me_group_hash) == feature_flag
|
|
645
|
+
KameleoonLogger.debug(
|
|
646
|
+
"RETURN: KameleoonClient.__is_ff_unrestricted_by_me_group(visitor, visitor_code: %s, feature_flag: %s)"
|
|
647
|
+
" -> (unrestricted: %s)", visitor_code, feature_flag, unrestricted
|
|
648
|
+
)
|
|
649
|
+
return unrestricted
|
|
650
|
+
|
|
625
651
|
def __is_visitor_not_in_holdout(
|
|
626
652
|
self, visitor: Optional[Visitor], visitor_code: str, track: bool, save: bool
|
|
627
653
|
) -> bool:
|
|
654
|
+
holdout = self._data_manager.data_file.holdout
|
|
655
|
+
if holdout is None:
|
|
656
|
+
return True
|
|
628
657
|
in_holdout_variation_key = 'in-holdout'
|
|
629
658
|
KameleoonLogger.debug(
|
|
630
659
|
"CALL: KameleoonClient.__is_visitor_not_in_holdout(visitor, visitor_code: %s, track: %s, save: %s)",
|
|
631
660
|
visitor_code, track, save
|
|
632
661
|
)
|
|
633
|
-
holdout = self._data_manager.data_file.holdout
|
|
634
662
|
is_not_in_holdout = True
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
self.__save_variation(visitor_code, eval_exp)
|
|
663
|
+
code_for_hash = self.__get_code_for_hash(visitor, visitor_code)
|
|
664
|
+
variation_hash = Hasher.obtain(code_for_hash, holdout.id_)
|
|
665
|
+
KameleoonLogger.debug("Calculated holdout hash %s for code %s", variation_hash, code_for_hash)
|
|
666
|
+
var_by_exp = holdout.get_variation(variation_hash)
|
|
667
|
+
if var_by_exp:
|
|
668
|
+
is_not_in_holdout = var_by_exp.variation_key != in_holdout_variation_key
|
|
669
|
+
if save:
|
|
670
|
+
eval_exp = EvaluatedExperiment(var_by_exp, holdout, RuleType.EXPERIMENTATION)
|
|
671
|
+
self.__save_variation(visitor_code, eval_exp)
|
|
645
672
|
KameleoonLogger.debug(
|
|
646
673
|
"RETURN: KameleoonClient.__is_visitor_not_in_holdout(visitor, visitor_code: %s, track: %s, save: %s)"
|
|
647
674
|
" -> (is_not_in_holdout: %s)",
|
|
@@ -18,6 +18,7 @@ kameleoon/configuration/custom_data_info.py
|
|
|
18
18
|
kameleoon/configuration/data_file.py
|
|
19
19
|
kameleoon/configuration/experiment.py
|
|
20
20
|
kameleoon/configuration/feature_flag.py
|
|
21
|
+
kameleoon/configuration/me_group.py
|
|
21
22
|
kameleoon/configuration/rule.py
|
|
22
23
|
kameleoon/configuration/rule_type.py
|
|
23
24
|
kameleoon/configuration/settings.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/rule.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/rule_type.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/settings.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/variable.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/configuration/variation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/conversion.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/custom_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/geolocation.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/manager/visitor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/mapping_identifier.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/operating_system.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/unique_identifier.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/user_agent.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/data/visitor_visits.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/multi_threading.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/repeat_timer.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/scheduler.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/string_utils.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/helpers/visitor_code.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/hybrid/__init__.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/hybrid/hybrid_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/kameleoon_client_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/logging/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/logging/log_level.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/managers/data/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/activity_event.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/cookie/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/net_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/network_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/query_builder.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/query_encodable.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/sendable.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/uri_helper.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/network/url_provider.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/real_time/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/cache_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/storage/cache_impl.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/models.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/targeting/tree_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/kameleoon/types/variation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -4,24 +4,24 @@ sseclient-py<1.9.0,>=1.7.0
|
|
|
4
4
|
aiohttp<4.0.0,>=3.8.0
|
|
5
5
|
|
|
6
6
|
[test]
|
|
7
|
-
requests<3.0.0,>=2.25
|
|
8
|
-
pytest-ordering==0.6
|
|
9
|
-
types-python-dateutil==2.8.2
|
|
10
|
-
flake8==4.0.1
|
|
11
|
-
twine==3.4.1
|
|
12
|
-
pylint==2.12.*
|
|
13
7
|
pytest-asyncio==0.21.*
|
|
8
|
+
pytest-ordering==0.6
|
|
9
|
+
aiohttp<4.0.0,>=3.8.0
|
|
14
10
|
wheel==0.36.2
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
mypy==0.991
|
|
12
|
+
pytest-pythonpath==0.7.3
|
|
13
|
+
requests<3.0.0,>=2.25
|
|
14
|
+
types-PyYAML==5.4.3
|
|
15
|
+
types-requests==2.25.0
|
|
17
16
|
freezegun==1.1.0
|
|
18
|
-
aioresponses==0.7.*
|
|
19
|
-
aiohttp<4.0.0,>=3.8.0
|
|
20
17
|
pytest-django==4.4.0
|
|
18
|
+
flake8==4.0.1
|
|
19
|
+
Django==3.2.4
|
|
21
20
|
pytest-cov==2.12.1
|
|
22
|
-
|
|
23
|
-
types-
|
|
24
|
-
|
|
21
|
+
twine==3.4.1
|
|
22
|
+
types-python-dateutil==2.8.2
|
|
23
|
+
pylint==2.12.*
|
|
25
24
|
Werkzeug==2.0.1
|
|
26
25
|
sseclient-py<1.9.0,>=1.7.0
|
|
27
|
-
|
|
26
|
+
pyyaml<6.1.0,>=5.4.0
|
|
27
|
+
aioresponses==0.7.*
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/manage.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/asgi.py
RENAMED
|
File without changes
|
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/urls.py
RENAMED
|
File without changes
|
{kameleoon-client-python-3.8.0 → kameleoon-client-python-3.9.0}/tests/integration/proj/proj/wsgi.py
RENAMED
|
File without changes
|
|
File without changes
|