Esempio n. 1
0
 def get_toggle(self):
     if not self.static_toggle:
         raise Http404()
     try:
         return Toggle.get(self.toggle_slug)
     except ResourceNotFound:
         return Toggle(slug=self.toggle_slug)
Esempio n. 2
0
    def _get_mocked_toggles(self):
        from toggle.models import generate_toggle_id
        from toggle.models import Toggle
        from toggle.shortcuts import namespaced_item

        mocked_toggles = {
            toggle.slug: Toggle(_id=generate_toggle_id(toggle.slug),
                                slug=toggle.slug)
            for toggle in random.sample(all_toggles(), 3)
        }
        toggles = mocked_toggles.values()
        domain_item = namespaced_item(self.domain_name, NAMESPACE_DOMAIN)
        toggles[0].enabled_users = [domain_item]
        toggles[1].enabled_users = ['user1', 'other-user', 'user2']
        toggles[2].enabled_users = [
            'user1', domain_item,
            namespaced_item('other_domain', NAMESPACE_DOMAIN)
        ]

        expected_items = {
            toggles[0].slug: [domain_item],
            toggles[1].slug: ['user1', 'user2'],
            toggles[2].slug: ['user1', domain_item],
        }

        return mocked_toggles, expected_items
Esempio n. 3
0
    def test_load_toggles(self):
        from toggle.models import Toggle
        mocked_toggles, expected_items = self._get_mocked_toggles()

        dumped_data = [
            json.dumps(Toggle(slug=slug, enabled_users=items).to_json())
            for slug, items in expected_items.items()
        ]

        existing_toggle_docs = []
        for toggle in mocked_toggles.values():
            doc_dict = toggle.to_json()
            expected = expected_items[toggle.slug]
            # leave only items that aren't in the dump
            doc_dict['enabled_users'] = [
                item for item in doc_dict['enabled_users']
                if item not in expected
            ]
            existing_toggle_docs.append(doc_dict)

        with mock_out_couch(docs=existing_toggle_docs):
            ToggleLoader().load_objects(dumped_data)

            for mocked_toggle in mocked_toggles.values():
                loaded_toggle = Toggle.get(mocked_toggle.slug)
                self.assertItemsEqual(mocked_toggle.enabled_users,
                                      loaded_toggle.enabled_users)
Esempio n. 4
0
 def get_toggle(self):
     if not self.toggle_slug in [t.slug for t in self.all_toggles()]:
         raise Http404()
     try:
         return Toggle.get(self.toggle_slug)
     except ResourceNotFound:
         return Toggle(slug=self.toggle_slug)
Esempio n. 5
0
 def get_toggle(self, slug):
     if slug not in [f.slug for f, _ in self.features()]:
         raise Http404()
     try:
         return Toggle.get(slug)
     except ResourceNotFound:
         return Toggle(slug=slug)
Esempio n. 6
0
    def _get_toggles_to_migrate(self):
        from corehq.toggles import all_toggles, NAMESPACE_DOMAIN
        from toggle.models import Toggle
        from toggle.shortcuts import namespaced_item

        all_user_ids = self._user_ids_in_domain()

        toggles_to_migrate = []
        domain_item = namespaced_item(self.domain, NAMESPACE_DOMAIN)

        for toggle in all_toggles() + all_previews():
            try:
                current_toggle = Toggle.get(toggle.slug)
            except ResourceNotFound:
                continue

            enabled_for = set(current_toggle.enabled_users)

            new_toggle = Toggle(slug=toggle.slug, enabled_users=[])
            if domain_item in enabled_for:
                new_toggle.enabled_users.append(domain_item)

            enabled_users = enabled_for & all_user_ids
            new_toggle.enabled_users.extend(list(enabled_users))

            if new_toggle.enabled_users:
                toggles_to_migrate.append(new_toggle.to_json())

        return toggles_to_migrate
Esempio n. 7
0
def _get_toggles_to_migrate(domain):
    from corehq.toggles import all_toggles, NAMESPACE_DOMAIN
    from toggle.models import Toggle
    from toggle.shortcuts import namespaced_item

    domain_item = namespaced_item(domain, NAMESPACE_DOMAIN)
    usernames = set(get_all_usernames_by_domain(domain))

    for toggle in all_toggles() + all_previews():
        try:
            current_toggle = Toggle.get(toggle.slug)
        except ResourceNotFound:
            continue

        enabled_for = set(current_toggle.enabled_users)

        new_toggle = Toggle(slug=toggle.slug, enabled_users=[])
        if domain_item in enabled_for:
            new_toggle.enabled_users.append(domain_item)

        enabled_users = enabled_for & usernames
        new_toggle.enabled_users.extend(list(enabled_users))

        if new_toggle.enabled_users:
            yield new_toggle.to_json()
Esempio n. 8
0
 def setUpClass(cls):
     super(TestFormsExpressionSpecWithFilterEsVersion, cls).setUpClass()
     # enable toggle to 100%
     db_toggle = Toggle(slug=ICDS_UCR_ELASTICSEARCH_DOC_LOADING.slug)
     setattr(db_toggle, DynamicallyPredictablyRandomToggle.RANDOMNESS_KEY, 1)
     db_toggle.save()
     assert ICDS_UCR_ELASTICSEARCH_DOC_LOADING.enabled(uuid.uuid4().hex, NAMESPACE_OTHER)
    def handle(self, *args, **options):
        dry_run = options.get('dry_run', False)

        if dry_run:
            print("\n-------- DRY RUN --------\n")

        slug = CALLCENTER.slug
        try:
            toggle = Toggle.get(slug)
        except ResourceNotFound:
            toggle = Toggle(slug=slug)
        print("Current domains in toggle: {}".format(toggle.enabled_users))

        domains = get_call_center_domains()
        print("Active call center domains: {}".format(domains))

        items = [
            namespaced_item(domain, NAMESPACE_DOMAIN) for domain in domains
        ]
        missing = set(items) - set(toggle.enabled_users)
        print("Domains missing from toggle: {}".format(missing))

        toggle.enabled_users = items

        if not dry_run:
            toggle.save()

            for item in items:
                update_toggle_cache(slug, item, True)
Esempio n. 10
0
 def test_move_nonexistent_source(self):
     dsa = uuid.uuid4().hex
     try:
         Toggle(slug=dsa, enabled_users=['kieran']).save()
         move_toggles('missing-src', dsa)
         self.assertEqual(['kieran'], Toggle.get(dsa).enabled_users)
     finally:
         MigrationHelperTest._delete_toggles(dsa)
Esempio n. 11
0
 def test_move(self):
     moz, dsa = [uuid.uuid4().hex for i in range(2)]
     try:
         moz_users = ['marco', 'lauren', 'claire']
         dsa_users = ['kieran', 'jolani', 'claire']
         Toggle(slug=moz, enabled_users=moz_users).save()
         Toggle(slug=dsa, enabled_users=dsa_users).save()
         move_toggles(moz, dsa)
         # ensure original is delted
         with self.assertRaises(ResourceNotFound):
             Toggle.get(moz)
         dsa_toggle = Toggle.get(dsa)
         expected_users = set(moz_users) | set(dsa_users)
         self.assertEqual(len(expected_users), len(dsa_toggle.enabled_users))
         self.assertEqual(expected_users, set(dsa_toggle.enabled_users))
     finally:
         MigrationHelperTest._delete_toggles(moz, dsa)
Esempio n. 12
0
 def test_move_nonexistent_destination(self):
     moz, dsa = [uuid.uuid4().hex for i in range(2)]
     try:
         Toggle(slug=moz, enabled_users=['claire']).save()
         move_toggles(moz, dsa)
         dsa_toggle = Toggle.get(dsa)
         self.assertEqual(['claire'], dsa_toggle.enabled_users)
         with self.assertRaises(ResourceNotFound):
             Toggle.get(moz)
     finally:
         MigrationHelperTest._delete_toggles(moz, dsa)
def _migrate_linked_apps_toggle(apps, schema_editor):
    try:
        linked_apps_toggle = Toggle.get('linked_apps')
    except ResourceNotFound:
        pass
    else:
        try:
            Toggle.get(LINKED_DOMAINS.slug)
        except ResourceNotFound:
            linked_domains_toggle = Toggle(
                slug=LINKED_DOMAINS.slug,
                enabled_users=linked_apps_toggle.enabled_users)
            linked_domains_toggle.save()
Esempio n. 14
0
def enable_vellum_beta(request):
    slug = "vellum_beta"
    try:
        toggle = Toggle.get(slug)
    except ResourceNotFound:
        toggle = Toggle(slug=slug)

    changed_entries = []
    if request.user.username not in toggle.enabled_users:
        changed_entries.append(request.user.username)
        toggle.enabled_users.append(request.user.username)
        toggle.save()
        _call_save_fn_and_clear_cache(slug, changed_entries, toggle.enabled_users, _find_static_toggle(slug))

    return HttpResponse(json.dumps({'success': True}), content_type="application/json")
Esempio n. 15
0
def toggle_app_manager_v2(request):
    slug = "app_manager_v2"
    on_or_off = request.POST.get('on_or_off', 'on')
    try:
        toggle = Toggle.get(slug)
    except ResourceNotFound:
        toggle = Toggle(slug=slug)

    enable = on_or_off == "on"
    enabled = request.user.username in toggle.enabled_users
    if enable != enabled:
        changed_entries = [request.user.username]
        if enable:
            toggle.enabled_users.append(request.user.username)
        else:
            toggle.enabled_users.remove(request.user.username)
        toggle.save()
        _call_save_fn_and_clear_cache(slug, changed_entries, toggle.enabled_users, _find_static_toggle(slug))

    return HttpResponse(json.dumps({'success': True}), content_type="application/json")
Esempio n. 16
0
def move_toggles(from_toggle_id, to_toggle_id):
    """
    Moves all enabled items from one toggle to another.
    """
    try:
        from_toggle = Toggle.get(from_toggle_id)
    except ResourceNotFound:
        # if no source found this is a noop
        return
    try:
        to_toggle = Toggle.get(to_toggle_id)
    except ResourceNotFound:
        to_toggle = Toggle(slug=to_toggle_id, enabled_users=[])

    for item in from_toggle.enabled_users:
        if item not in to_toggle.enabled_users:
            to_toggle.enabled_users.append(item)
            update_toggle_cache(to_toggle_id, item, True)

    to_toggle.save()
    from_toggle.delete()