Example #1
0
 def handle(self, **options):
     for doc in Domain.get_all(include_docs=False):
         domain = doc['key']
         if not use_new_exports(domain):
             set_toggle(toggles.OLD_EXPORTS.slug,
                        domain,
                        True,
                        namespace=toggles.NAMESPACE_DOMAIN)
             toggle_js_domain_cachebuster.clear(domain)
Example #2
0
 def handle(self, *args, **options):
     for doc in Domain.get_all(include_docs=False):
         domain = doc['key']
         if not use_new_exports(domain):
             set_toggle(
                 toggles.OLD_EXPORTS.slug,
                 domain,
                 True,
                 namespace=toggles.NAMESPACE_DOMAIN
             )
             toggle_js_domain_cachebuster.clear(domain)
Example #3
0
def revert_migrate_domain(domain, dryrun=False):
    instances = get_form_export_instances(domain)
    instances.extend(get_case_export_instances(domain))

    reverted_exports = revert_new_exports(instances, dryrun=dryrun)

    if not dryrun:
        set_toggle(OLD_EXPORTS.slug, domain, True, namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    for reverted_export in reverted_exports:
        print('Reverted export: {}'.format(reverted_export._id))
Example #4
0
def revert_migrate_domain(domain, dryrun=False):
    instances = get_form_export_instances(domain)
    instances.extend(get_case_export_instances(domain))

    reverted_exports = revert_new_exports(instances, dryrun=dryrun)

    if not dryrun:
        set_toggle(OLD_EXPORTS.slug, domain, True, namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    for reverted_export in reverted_exports:
        print 'Reverted export: {}'.format(reverted_export._id)
Example #5
0
 def call_save_fn(self, changed_entries, currently_enabled):
     for entry in changed_entries:
         if entry.startswith(NAMESPACE_DOMAIN):
             domain = entry.split(":")[-1]
             if self.static_toggle.save_fn is not None:
                 self.static_toggle.save_fn(domain, entry in currently_enabled)
             toggle_js_domain_cachebuster.clear(domain)
         else:
             # these are sent down with no namespace
             assert ':' not in entry, entry
             username = entry
             toggle_js_user_cachebuster.clear(username)
Example #6
0
 def call_save_fn(self, changed_entries, currently_enabled):
     for entry in changed_entries:
         if entry.startswith(NAMESPACE_DOMAIN):
             domain = entry.split(":")[-1]
             if self.static_toggle.save_fn is not None:
                 self.static_toggle.save_fn(domain, entry
                                            in currently_enabled)
             toggle_js_domain_cachebuster.clear(domain)
         else:
             # these are sent down with no namespace
             assert ':' not in entry, entry
             username = entry
             toggle_js_user_cachebuster.clear(username)
Example #7
0
def _call_save_fn_and_clear_cache(toggle_slug, changed_entries, currently_enabled, static_toggle):
    for entry in changed_entries:
        enabled = entry in currently_enabled
        namespace, entry = parse_toggle(entry)
        if namespace == NAMESPACE_DOMAIN:
            domain = entry
            if static_toggle.save_fn is not None:
                static_toggle.save_fn(domain, enabled)
            toggle_js_domain_cachebuster.clear(domain)
        else:
            # these are sent down with no namespace
            assert ':' not in entry, entry
            username = entry
            toggle_js_user_cachebuster.clear(username)

        clear_toggle_cache(toggle_slug, entry, namespace=namespace)
Example #8
0
    def set_flags(self):
        from corehq.toggles import all_toggles, NAMESPACE_DOMAIN
        from corehq.feature_previews import all_previews
        from corehq.apps.hqwebapp.templatetags.hq_shared_tags import toggle_js_domain_cachebuster

        for toggle in all_toggles():
            if toggle.enabled(self.existing_domain):
                self.stdout.write("Setting flag: {}".format(toggle.slug))
                if not self.no_commmit:
                    toggle.set(self.new_domain, True, NAMESPACE_DOMAIN)

        for preview in all_previews():
            if preview.enabled(self.existing_domain):
                self.stdout.write("Setting preview: {}".format(preview.slug))
                if not self.no_commmit:
                    preview.set(self.new_domain, True, NAMESPACE_DOMAIN)
                    if preview.save_fn is not None:
                        preview.save_fn(self.new_domain, True)

        toggle_js_domain_cachebuster.clear(self.new_domain)
Example #9
0
    def set_flags(self):
        from corehq.toggles import all_toggles, NAMESPACE_DOMAIN
        from corehq.feature_previews import all_previews
        from corehq.apps.hqwebapp.templatetags.hq_shared_tags import toggle_js_domain_cachebuster

        for toggle in all_toggles():
            if toggle.enabled(self.existing_domain):
                self.stdout.write('Setting flag: {}'.format(toggle.slug))
                if not self.no_commmit:
                    toggle.set(self.new_domain, True, NAMESPACE_DOMAIN)

        for preview in all_previews():
            if preview.enabled(self.existing_domain):
                self.stdout.write('Setting preview: {}'.format(preview.slug))
                if not self.no_commmit:
                    preview.set(self.new_domain, True, NAMESPACE_DOMAIN)
                    if preview.save_fn is not None:
                        preview.save_fn(self.new_domain, True)

        toggle_js_domain_cachebuster.clear(self.new_domain)
Example #10
0
def migrate_domain(domain, dryrun=False, force_convert_columns=False):
    from couchexport.models import SavedExportSchema
    export_count = stale_get_export_count(domain)
    metas = []
    if export_count:
        for old_export in with_progress_bar(get_exports_json(domain),
                                            length=export_count,
                                            prefix=domain):
            with CriticalSection(['saved-export-{}'.format(old_export['_id'])],
                                 timeout=120):
                try:
                    _, migration_meta = convert_saved_export_to_export_instance(
                        domain,
                        SavedExportSchema.get(old_export['_id']),
                        dryrun=dryrun,
                        force_convert_columns=force_convert_columns,
                    )
                except Exception as e:
                    print('Failed parsing {}: {}'.format(old_export['_id'], e))
                    raise
                else:
                    metas.append(migration_meta)

    if not dryrun:
        set_toggle(OLD_EXPORTS.slug, domain, False, namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    # Remote app migrations must have access to UserDefined columns and tables
    if any(map(lambda meta: meta.is_remote_app_migration, metas)):
        set_toggle(ALLOW_USER_DEFINED_EXPORT_COLUMNS.slug,
                   domain,
                   True,
                   namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    for meta in metas:
        if not meta.skipped_tables and not meta.skipped_columns:
            continue

        output = '* Export information for export: {} *'.format(
            meta.old_export_url)
        schema_id_output = 'Generated schema: {}'.format(
            meta.generated_schema_id)
        print('')
        print('*' * len(output))
        print(output)
        print('* {}{} *'.format(
            schema_id_output, ' ' * (len(output) - len(schema_id_output) - 4)))
        print('*' * len(output))
        print('')

        if meta.skipped_tables:
            print('# Skipped tables #')
            for table_meta in meta.skipped_tables:
                table_meta.pretty_print()

        if meta.skipped_columns:
            print('# Skipped columns #')
            for column_meta in meta.skipped_columns:
                column_meta.pretty_print()
    return metas
Example #11
0
            try:
                _, migration_meta = convert_saved_export_to_export_instance(
                    domain,
                    SavedExportSchema.wrap(old_export),
                    dryrun=dryrun,
                    force_convert_columns=force_convert_columns,
                )
            except Exception, e:
                print 'Failed parsing {}: {}'.format(old_export['_id'], e)
                raise e
            else:
                metas.append(migration_meta)

    if not dryrun:
        set_toggle(NEW_EXPORTS.slug, domain, True, namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    # Remote app migrations must have access to UserDefined columns and tables
    if any(map(lambda meta: meta.is_remote_app_migration, metas)):
        set_toggle(ALLOW_USER_DEFINED_EXPORT_COLUMNS.slug,
                   domain,
                   True,
                   namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    for meta in metas:
        print ''
        print '***' * 15
        print '* Export information for export: {}'.format(
            meta.saved_export_id)
        print '***' * 15
Example #12
0
            try:
                _, migration_meta = convert_saved_export_to_export_instance(
                    domain,
                    SavedExportSchema.wrap(old_export),
                    dryrun=dryrun,
                    force_convert_columns=force_convert_columns,
                )
            except Exception, e:
                print 'Failed parsing {}: {}'.format(old_export['_id'], e)
                raise e
            else:
                metas.append(migration_meta)

    if not dryrun:
        set_toggle(OLD_EXPORTS.slug, domain, False, namespace=NAMESPACE_DOMAIN)
        toggle_js_domain_cachebuster.clear(domain)

    # Remote app migrations must have access to UserDefined columns and tables
    if any(map(lambda meta: meta.is_remote_app_migration, metas)):
        set_toggle(
            ALLOW_USER_DEFINED_EXPORT_COLUMNS.slug,
            domain,
            True,
            namespace=NAMESPACE_DOMAIN
        )
        toggle_js_domain_cachebuster.clear(domain)

    for meta in metas:
        if not meta.skipped_tables and not meta.skipped_columns:
            continue