Commit Graph

88 Commits

Author SHA1 Message Date
Robert Raposa
fe9395bd7a Merge pull request #25538 from regisb/regisb/improve-waffle-tests
[BD-21] Improve waffle_utils tests to not rely on internal API
2020-11-06 08:58:18 -05:00
Régis Behmo
19ff82a3da Improve waffle_utils tests to not rely on internal API
This is required for a smooth upgrade of edx-toggles.
2020-11-06 12:11:52 +01:00
Robert Raposa
061d5d8fc5 Merge pull request #25529 from regisb/regisb/better-waffle-deprecation-monitoring
[BD-21] Improve monitoring of waffle deprecation with custom attributes
2020-11-05 15:09:54 -05:00
Régis Behmo
b32fc50947 Improve monitoring of waffle deprecation with custom attributes
We observe a lot of deprecation warnings using the
"deprecated_waffle_utils" custom attribute. To make it easier to track
these items, we add the waffle flag/namespace name to the custom
attribute.
2020-11-05 08:36:03 +01:00
Nizar Mahmoud
3a46e7c5f5 Squashes waffle_utils.WaffleFlag deprecation warning 2020-11-05 02:00:33 +03:00
Régis Behmo
da0623107c Expose SettingToggle and SettingDictToggle objects in the API
Note that settings for which a corresponding SettingToggle or
SettingDictToggle exists are no longer exposed in the "django_settings"
list of the API.
2020-11-04 15:53:48 +01:00
Régis Behmo
c9c1136459 Re-introduce waffle classes (with deprecation warnings)
This is for backward compatibility.
2020-11-03 19:25:37 +01:00
Régis Behmo
b70042435a Deprecate waffle_utils.testutils.override* functions
These functions should from now on be imported from
edx_toggles.toggles.testutils.
2020-11-03 19:25:37 +01:00
Régis Behmo
4586002956 Import waffle classes from edx_toggles instead of waffle_utils
Those classes were ported to edx_toggles. The imports remain in
waffle_utils.__init__ for backward compatibility.
2020-11-03 19:25:37 +01:00
Régis Behmo
3b127f8c92 Deprecate WaffleSwitch.override* methods
This allows us to get rid of the custom WaffleSwitch and
WaffleSwitchNamespace classes from waffle_utils in favour of
edx_toggles.toggles classes.
2020-11-03 19:25:37 +01:00
Régis Behmo
2307dff4c9 Deprecate WaffleFlag.override method
This allows us to get rid of waffle_utils' custom WaffleFlag method.
2020-11-03 19:25:37 +01:00
Robert Raposa
39a7c6498c remove internal references to edx_django_utils
Tests were referring to internal implementation
details of edx-django-utils. This comment removes
those references to free the library up to be
refactored.

ARCHBOM-1584
2020-11-02 16:46:11 -05:00
Régis Behmo
312f0cd749 Fix error in toggle state endpoint in the absence of module_name
When module_name is None, the call to edx-django-utils'
get_code_owner_from_module crashes. So we avoid making that call when
the module_name is None, which sometimes happens (for good reasons or
not, but it's valid behaviour).
2020-10-29 22:59:53 +01:00
Régis Behmo
a27499830c Add deprecation warning comments to waffle_utils code 2020-10-29 22:59:53 +01:00
Régis Behmo
98ffa347d5 Fix waffle_utils unit tests 2020-10-29 22:59:53 +01:00
Régis Behmo
e5500b34a0 Backport override features from edx-toggles to waffle_utils
Note that those features are destined to be deprecated, eventually.
2020-10-29 22:59:52 +01:00
Régis Behmo
db5feec4cf Move waffle_utils/testutils.py to edx-toggles 2020-10-29 22:59:52 +01:00
Régis Behmo
58043727d5 [BD-21] Migrate waffle flag classes to edx-toggles
The same API is preserved, internally, to avoid many changes across the
edx-platform codebase (for now).
2020-10-29 22:59:52 +01:00
Régis Behmo
474da0c5a5 Refactor WaffleFlag and WaffleFlagNamespace internal API
This simplifies the internals of the waffle flag classes in order to
better move them to edx-toggles later.
2020-10-29 22:59:52 +01:00
Régis Behmo
24cf0543f3 [BD-21] Migrate WaffleSwitch to edx-toggles
This makes this class reusable by other IDAs.
2020-10-29 22:59:52 +01:00
Tim McCormack
5b331b2d4d Merge branch 'master' into timmc/misc-metric-attribute
# Conflicts:
#	cms/envs/common.py
#	lms/envs/common.py
2020-09-28 13:56:08 +00:00
Tim McCormack
f29e418264 Revert "Revert "ARCHBOM-1494: Refer to custom attributes, not metrics, especially with edx-django-utils (#25010)" (#25025)" (#25055)
This reverts commit 986a448d9e.
2020-09-28 13:53:57 +00:00
Robert Raposa
1cc4ae2080 ARCHBOM-1339: add ADRs for extracting waffle_utils (#24798)
- Add ADR for the extraction of waffle_utils to
edx-toggles to reuse across IDAs.
- Add ADR for temporarily leaving CourseWaffleFlag
in edx-platform in order to simplify extraction.
- Add ADR for simplifying the interface for
WaffleFlag and WaffleSwitch by removing the
Namespace classes.

ARCHBOM-1339

Co-authored-by: Feanil Patel <feanil@edx.org>
2020-09-25 15:02:46 -04:00
Tim McCormack
89032577ae Fix existing typo in line I touched 2020-09-23 13:18:20 +00:00
Tim McCormack
c71c9d4984 Replace s/metric/attribute/g in waffle_utils and in caller
This changes:

- `WAFFLE_FLAG_CUSTOM_METRICS`
- `WaffleFlagNamespace._set_waffle_flag_metric`
- `_get_waffle_flag_custom_metrics_set` and some other unreferenced
  internals
2020-09-22 23:19:23 +00:00
Ahtisham Shahid
986a448d9e Revert "ARCHBOM-1494: Refer to custom attributes, not metrics, especially with edx-django-utils (#25010)" (#25025)
This reverts commit ba9ee4e151.

Fixed Style lint issue
2020-09-21 13:48:00 +05:00
Tim McCormack
ba9ee4e151 ARCHBOM-1494: Refer to custom attributes, not metrics, especially with edx-django-utils (#25010)
This uses the new names introduced in edx-django-utils
3.8.0 (edx/edx-django-utils#59), which we're already using, as
well as updating a few other locations where we incorrectly refer
to New Relic custom metrics instead of custom attributes.

Includes a couple of unrelated lint fixes in a file I modified.
2020-09-18 13:33:50 +00:00
Régis Behmo
a4ba4ae45e Clarify many feature toggle annotations across all applications 2020-09-16 15:20:43 +02:00
Régis Behmo
e4fc7e86b5 Fix indentation of waffle flag annotation 2020-09-16 15:19:16 +02:00
Régis Behmo
7d93715880 Rename toggle_expiration_date to toggle_target_removal_date
This is part of the changes brought by code-annotations==0.7.0
2020-09-16 15:19:16 +02:00
Régis Behmo
98a13d6a7e Remove deprecated toggle_status annotation
This annotation is deprecated since code-annotations==0.7.0
2020-09-16 15:19:15 +02:00
Régis Behmo
ab0e21455a Get rid of the toggle_category annotation, now deprecated
Since code-annotations==0.7.0, this annotation is not used anymore.
2020-09-16 15:16:13 +02:00
Régis Behmo
7dc460d50a Wrap toggle annotation lines with multiline comments
This takes advantage of the new multiline annotation format with
single-line comment prefix, from code-annotations.
2020-09-16 15:16:12 +02:00
Régis Behmo
307457a255 Simplify hack to obtain waffle module names
Instead of going up the stacktrace to find the module names of waffle
flags and switches, we manually pass the module __name__ whenever the
flag is created. This is similar to `logging.getLogger(__name__)`
standard behaviour.

As the waffle classes are used outside of edx-platform, we make the new
module_name argument an optional keyword argument. This will change once
we pull waffle_utils outside of edx-platform.

Note that the module name is normally only required to view the list of
existing waffle flags and switches. The module name should not be
necessary to verify if a flag is enabled. Thus, maybe it would make
sense to create a `add` class methor similar to:

    class WaffleFlag:
        @classmethod
        def add(cls, namespace, flag, module):
            instance = cls(namespace, flag)
            cls._class_instances.add((instance, module))
2020-09-14 09:30:24 +02:00
Robert Raposa
a8c3413a32 fix waffle instance module name
Fixes the computation of the WaffleFlag and
WaffleSwitch instance module name. This in
turn fixes the code_owner as well.

ARCHBOM-1420
2020-08-15 15:49:11 -04:00
Robert Raposa
60827a6f73 add code_owner for flags and switches
Enhances the toggle state endpoint with
code_owner, module, and class for WaffleFlag
and WaffleSwitch.

ARCHBOM-1420
2020-08-14 16:47:49 -04:00
Diana Huang
6a84710cf7 Add django settings toggles to toggles endpoint. 2020-08-14 13:19:28 -04:00
Robert Raposa
20e5a3247b add course overrides and computed_status
Adds the following additions to the toggle state endpoint:

- course override data from CourseWaffleFlag.
- computed_status for waffle flags (accounting for
course overrides when applicable), and waffle switches.

Note: the waffle switch computed_status will make more
sense when we include WaffleSwitch instances that don't
have any data in the database.

ARCHBOM-1429
ARCHBOM-1366
2020-08-14 10:16:19 -04:00
Robert Raposa
c7fb891600 add flags and switches to toggle state
Adds basic waffle flag and waffle switch data
to the toggle state endpoint.

ARCHBOM-1427
2020-08-13 12:02:51 -04:00
Robert Raposa
eb0f62ee16 add tests for toggle state view
ARCHBOM-1427
2020-08-12 17:18:16 -04:00
Diana Huang
0827a3749d Add barebones toggles endpoint for development. 2020-08-12 12:47:38 -04:00
Kyle McCormick
662388c7db Allow omission of course_key in call to CourseWaffleFlag.is_enabled
This effectively evaluates the flag outside of the context of a course.
This was previously available through `.is_enabled_without_course_context`,
which has been removed in favor of simply `is_enabled()`.

This was done to make the CourseWaffleFlag interface more uniform with
that of WaffleFlag and ExperimentWaffleFlag and eliminate unecessary
branching when handling CourseWaffleFlags.
2020-08-10 11:57:02 -04:00
Kyle McCormick
b05948153a Add course-unawareness option to ExperimentWaffleFlag
For the Courseware MFE rollout experiment, we want users'
default buckets to be consistent across course runs.

ExperimentWaffleFlag advised that this could be done
by calling `.is_enabled(...)` without a course_key argument;
however, doing so breaks when uing the main_flag.BUCKET_NUM
scheme to apply bucket rules for a specific set of users
or courses.

This commit explicitly adds course-unaware-bucketing via
a new kwarg to ExperimentWaffleFlag.__init__ method.

Furthermore, it fixes ExperimentWaffleFlag.is_enabled(course_key=None)
to work as advertised, by means of calling
.is_enabled_without_course_context on its subordinate flags.

TNL-7405
2020-08-10 11:57:02 -04:00
Robert Raposa
77e490f057 ARCHBOM-1305: remove deprecated flag_undefined_default (#24426)
This is the final step in removing the deprecated
flag_undefined_default as explained by the following ADR:
https://github.com/edx/edx-platform/blob/master/openedx/core/djangoapps/waffle_utils/docs/decisions/0001-refactor-waffle-flag-default.rst

Notes:

* All uses of flag_undefined_default=False were always
  supposed to have been no-ops.
* All uses of flag_undefined_default=True that are removed
  in this PR have been replaced by migrations in past PRs.
* The temporary metric temp_flag_default_used id no longer
  reporting any data.

ARCHBOM-1305
2020-07-09 09:31:31 -04:00
Robert Raposa
371f89838b use flag's everyone setting when no request (#24416)
This is Phase 2 if a rollout started here:
https://github.com/edx/edx-platform/pull/24392

When a flag is being used without a request, we will
return True if the flag's everyone status is set to
True.

The current implementation is to use flag_undefined_default,
which is deprecated and we are trying to remove it.

ARCHBOM-1331
2020-07-08 11:12:56 -04:00
Robert Raposa
081a751d2c fix temp_flag_no_request_default_match (#24409)
Fix bug in metric temp_flag_no_request_default_match.
Metric renamed to temp_flag_no_request_default_match_2
to ensure we are looking at the right data.

This extends Phase 1 of the rollout, as documented in:
https://github.com/edx/edx-platform/pull/24392

ARCHBOM-1331
2020-07-07 16:32:11 -04:00
Robert Raposa
9b9259c160 phase 1: update waffle no request default (#24392)
This is Phase 1 of a 2 part rollout.

Here, we want to ensure that checking if the waffle flag
is set to active for everyone would provide the same value
as the current implementation for calls that have no request.
The current implementation is to use flag_undefined_default,
which is deprecated and we are trying to remove.

We are adding a custom metric to see if they match in
Production. If all goes well, in Phase 2 we will switch to
this new approach.

ARCHBOM-1331
2020-07-07 12:01:08 -04:00
Robert Raposa
7f22041fc1 ARCHBOM-1316: always enable some course_experience flags (#24322)
In order to remove the deprecated flag_undefined_default=True
argument, this commit updates the following flags to always be
enabled using a new temporary class:

- course_experience.course_outline_page
- course_experience.unified_course_tab

Adds a temporary setting `USE_DEFAULT_TRUE_NAMESPACE`,
to enable a monitored rollout of this change.

TNL-7061 is the ticket where these flags will actually be
removed. This requires more careful work including removing
all dead code, and potentially refactoring tests that were
testing shared functionality, but only when the flag was
False.

ARCHBOM-1316
2020-07-02 12:00:23 -04:00
Nimisha Asthagiri
a219381361 Update 0001-refactor-waffle-flag-default.rst (#24308) 2020-06-23 21:03:06 -04:00
Robert Raposa
f060872878 update waffle flag and docs (#24299)
- update ADR to provide more alternatives for updating
the default value of a flag.
- add a `flag_` prefix to the flag metrics
- add module-level note about flag metrics
- add NewRelic query example and warning
- fix typo in toggle annotation

ARCHBOM-1302
2020-06-23 13:55:06 -04:00