コード例 #1
0
ファイル: apps.py プロジェクト: kkrampa/commcare-hq
        def _inner(request, link_domain, data, master_domain=domain):
            clear_app_cache(request, link_domain)
            if data['toggles']:
                for slug in data['toggles'].split(","):
                    set_toggle(slug, link_domain, True, namespace=toggles.NAMESPACE_DOMAIN)
            linked = data.get('linked')
            if linked:
                master_version = get_latest_released_app_version(app.domain, app_id)
                if not master_version:
                    messages.error(request, _("Creating linked app failed."
                                              " Unable to get latest released version of your app."
                                              " Make sure you have at least one released build."))
                    return HttpResponseRedirect(reverse_util('app_settings', params={}, args=[domain, app_id]))

                linked_app = create_linked_app(master_domain, app_id, link_domain, data['name'])
                try:
                    update_linked_app(linked_app, request.couch_user.get_id)
                except AppLinkError as e:
                    linked_app.delete()
                    messages.error(request, str(e))
                    return HttpResponseRedirect(reverse_util('app_settings', params={}, args=[domain, app_id]))

                messages.success(request, _('Application successfully copied and linked.'))
                return HttpResponseRedirect(reverse_util('app_settings', params={}, args=[link_domain, linked_app.get_id]))
            else:
                extra_properties = {'name': data['name']}
                try:
                    app_copy = import_app_util(app_id_or_source, link_domain, extra_properties)
                except ReportConfigurationNotFoundError:
                    messages.error(request, _("Copying the application failed because "
                                              "your application contains a Report Module "
                                              "that references a static UCR configuration."))
                    return HttpResponseRedirect(reverse_util('app_settings', params={}, args=[domain, app_id]))
                return back_to_main(request, app_copy.domain, app_id=app_copy._id)
コード例 #2
0
ファイル: apps.py プロジェクト: dimagi/commcare-hq
 def _inner(request, domain, data):
     clear_app_cache(request, domain)
     if data["toggles"]:
         for slug in data["toggles"].split(","):
             set_toggle(slug, domain, True, namespace=toggles.NAMESPACE_DOMAIN)
     app_copy = import_app_util(app_id_or_source, domain, {"name": data["name"]})
     return back_to_main(request, app_copy.domain, app_id=app_copy._id)
コード例 #3
0
ファイル: apps.py プロジェクト: MonikaLitwin/commcare-hq
        def _inner(request, link_domain, data, master_domain=domain):
            clear_app_cache(request, link_domain)
            if data['toggles']:
                for slug in data['toggles'].split(","):
                    set_toggle(slug,
                               link_domain,
                               True,
                               namespace=toggles.NAMESPACE_DOMAIN)
            linked = data.get('linked')
            if linked:
                master_version = get_latest_released_app_version(
                    app.domain, app_id)
                if not master_version:
                    messages.error(
                        request,
                        _("Creating linked app failed."
                          " Unable to get latest released version of your app."
                          " Make sure you have at least one released build."))
                    return HttpResponseRedirect(
                        reverse_util('app_settings',
                                     params={},
                                     args=[domain, app_id]))

                linked_app = create_linked_app(master_domain, app_id,
                                               link_domain, data['name'])
                try:
                    update_linked_app(linked_app, request.couch_user.get_id)
                except AppLinkError as e:
                    linked_app.delete()
                    messages.error(request, str(e))
                    return HttpResponseRedirect(
                        reverse_util('app_settings',
                                     params={},
                                     args=[domain, app_id]))

                messages.success(
                    request, _('Application successfully copied and linked.'))
                return HttpResponseRedirect(
                    reverse_util('app_settings',
                                 params={},
                                 args=[link_domain, linked_app.get_id]))
            else:
                extra_properties = {'name': data['name']}
                try:
                    app_copy = import_app_util(app_id_or_source, link_domain,
                                               extra_properties)
                except ReportConfigurationNotFoundError:
                    messages.error(
                        request,
                        _("Copying the application failed because "
                          "your application contains a Report Module "
                          "that references a static UCR configuration."))
                    return HttpResponseRedirect(
                        reverse_util('app_settings',
                                     params={},
                                     args=[domain, app_id]))
                return back_to_main(request,
                                    app_copy.domain,
                                    app_id=app_copy._id)
コード例 #4
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)
コード例 #5
0
ファイル: apps.py プロジェクト: dimagi/commcare-hq
 def _inner(request, link_domain, data, master_domain=domain):
     clear_app_cache(request, link_domain)
     if data['toggles']:
         for slug in data['toggles'].split(","):
             set_toggle(slug, link_domain, True, namespace=toggles.NAMESPACE_DOMAIN)
     linked = data.get('linked')
     if linked:
         return _create_linked_app(request, app, link_domain, data['name'])
     else:
         return _copy_app_helper(
             request, master_domain, app_id_or_source, link_domain, data['name'], app_id)
コード例 #6
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)
コード例 #7
0
ファイル: toggles.py プロジェクト: saketkanth/commcare-hq
 def set(self, item, enabled, namespace=None):
     set_toggle(self.slug, item, enabled, namespace)
コード例 #8
0
                prefix=domain):
            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
コード例 #9
0
ファイル: updates.py プロジェクト: dimagi/commcare-hq
 def _set_toggles(collection, enabled):
     for slug in collection:
         set_toggle(slug, domain_link.linked_domain, enabled, NAMESPACE_DOMAIN)
コード例 #10
0
def request_new_domain(request, form, is_new_user=True):
    now = datetime.utcnow()
    current_user = CouchUser.from_django_user(request.user)

    dom_req = RegistrationRequest()
    if is_new_user:
        dom_req.request_time = now
        dom_req.request_ip = get_ip(request)
        dom_req.activation_guid = uuid.uuid1().hex

    project_name = form.cleaned_data.get('hr_name') or form.cleaned_data.get('project_name')
    name = name_to_url(project_name, "project")
    with CriticalSection(['request_domain_name_{}'.format(name)]):
        name = Domain.generate_name(name)
        new_domain = Domain(
            name=name,
            hr_name=project_name,
            is_active=False,
            date_created=datetime.utcnow(),
            creating_user=current_user.username,
            secure_submissions=True,
            use_sql_backend=True,
            first_domain_for_user=is_new_user
        )

        if form.cleaned_data.get('domain_timezone'):
            new_domain.default_timezone = form.cleaned_data['domain_timezone']

        if not is_new_user:
            new_domain.is_active = True

        # ensure no duplicate domain documents get created on cloudant
        new_domain.save(**get_safe_write_kwargs())

    if not new_domain.name:
        new_domain.name = new_domain._id
        new_domain.save()  # we need to get the name from the _id

    if is_new_user:
        # Only new-user domains are eligible for Advanced trial
        # domains with no subscription are equivalent to be on free Community plan
        create_30_day_advanced_trial(new_domain, current_user.username)
    else:
        ensure_explicit_community_subscription(new_domain.name, date.today())

    UserRole.init_domain_with_presets(new_domain.name)

    dom_req.domain = new_domain.name

    if request.user.is_authenticated():
        if not current_user:
            current_user = WebUser()
            current_user.sync_from_django_user(request.user)
            current_user.save()
        current_user.add_domain_membership(new_domain.name, is_admin=True)
        current_user.save()
        dom_req.requesting_user_username = request.user.username
        dom_req.new_user_username = request.user.username

    if is_new_user:
        dom_req.save()
        send_domain_registration_email(request.user.email,
                                       dom_req.domain,
                                       dom_req.activation_guid,
                                       request.user.get_full_name())
    send_new_request_update_email(request.user, get_ip(request), new_domain.name, is_new_user=is_new_user)

    set_toggle(toggles.USE_FORMPLAYER_FRONTEND.slug, new_domain.name, True, namespace=toggles.NAMESPACE_DOMAIN)
    meta = get_meta(request)
    track_created_new_project_space_on_hubspot.delay(current_user, request.COOKIES, meta)
    return new_domain.name
コード例 #11
0
 def setUp(self):
     self.project = Domain(name=self.domain)
     self.project.save()
     clear_toggle_cache(OLD_EXPORTS.slug, self.domain, namespace=NAMESPACE_DOMAIN)
     set_toggle(OLD_EXPORTS.slug, self.domain, True, namespace=NAMESPACE_DOMAIN)