def release_build(request, domain, app_id, saved_app_id): is_released = request.POST.get('is_released') == 'true' if not is_released: if LatestEnabledBuildProfiles.objects.filter(build_id=saved_app_id).exists(): return json_response({'error': _('Please disable any enabled profiles to un-release this build.')}) ajax = request.POST.get('ajax') == 'true' saved_app = get_app(domain, saved_app_id) if saved_app.copy_of != app_id: raise Http404 saved_app.is_released = is_released saved_app.is_auto_generated = False saved_app.save(increment_version=False) from corehq.apps.app_manager.signals import app_post_release app_post_release.send(Application, application=saved_app) if is_released: if saved_app.build_profiles and domain_has_privilege(domain, privileges.BUILD_PROFILES): create_build_files_for_all_app_profiles.delay(domain, saved_app_id) _track_build_for_app_preview(domain, request.couch_user, app_id, 'User starred a build') if ajax: return json_response({ 'is_released': is_released, 'latest_released_version': get_latest_released_app_version(domain, app_id) }) else: return HttpResponseRedirect(reverse('release_manager', args=[domain, app_id]))
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)
def _create_linked_app(request, master_app, link_domain, link_app_name): master_domain = master_app.domain master_version = get_latest_released_app_version(master_domain, master_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=[master_domain, master_app._id])) linked_app = create_linked_app(master_domain, master_app._id, link_domain, link_app_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=[master_domain, master_app._id])) messages.success(request, _('Application successfully copied and linked.')) return HttpResponseRedirect( reverse_util('app_settings', params={}, args=[link_domain, linked_app.get_id]))
def release_build(request, domain, app_id, saved_app_id): is_released = request.POST.get('is_released') == 'true' if not is_released: if (LatestEnabledBuildProfiles.objects.filter(build_id=saved_app_id, active=True).exists() or AppReleaseByLocation.objects.filter(build_id=saved_app_id, active=True).exists()): return json_response({'error': _('Please disable any enabled profiles/location restriction ' 'to un-release this build.')}) ajax = request.POST.get('ajax') == 'true' saved_app = get_app(domain, saved_app_id) if saved_app.copy_of != app_id: raise Http404 saved_app.is_released = is_released saved_app.is_auto_generated = False saved_app.save(increment_version=False) from corehq.apps.app_manager.signals import app_post_release app_post_release.send(Application, application=saved_app) if is_released: if saved_app.build_profiles and domain_has_privilege(domain, privileges.BUILD_PROFILES): create_build_files_for_all_app_profiles.delay(domain, saved_app_id) _track_build_for_app_preview(domain, request.couch_user, app_id, 'User starred a build') if ajax: return json_response({ 'is_released': is_released, 'latest_released_version': get_latest_released_app_version(domain, app_id) }) else: return HttpResponseRedirect(reverse('release_manager', args=[domain, app_id]))
def get_master_app_version(domain_link, app_id): if domain_link.is_remote: return get_released_app_version(domain_link.master_domain, app_id, domain_link.remote_details) else: return get_latest_released_app_version(domain_link.master_domain, app_id)
def release_build(request, domain, app_id, saved_app_id): is_released = request.POST.get('is_released') == 'true' ajax = request.POST.get('ajax') == 'true' saved_app = get_app(domain, saved_app_id) if saved_app.copy_of != app_id: raise Http404 saved_app.is_released = is_released saved_app.save(increment_version=False) from corehq.apps.app_manager.signals import app_post_release app_post_release.send(Application, application=saved_app) if is_released: if saved_app.build_profiles and domain_has_privilege( domain, privileges.BUILD_PROFILES): create_build_files_for_all_app_profiles.delay(domain, saved_app_id) _track_build_for_app_preview(domain, request.couch_user, app_id, 'User starred a build') if ajax: return json_response({ 'is_released': is_released, 'latest_released_version': get_latest_released_app_version(domain, app_id) }) else: return HttpResponseRedirect( reverse('release_manager', args=[domain, app_id]))
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: for module in app.modules: if isinstance(module, ReportModule): messages.error(request, _('This linked application uses mobile UCRs which ' 'are currently not supported. For this application to ' 'function correctly, you will need to remove those modules.')) return HttpResponseRedirect(reverse_util('app_settings', params={}, args=[domain, app_id])) 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: 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']} app_copy = import_app_util(app_id_or_source, link_domain, extra_properties) return back_to_main(request, app_copy.domain, app_id=app_copy._id)
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)
def get_releases_context(request, domain, app_id): app = get_app(domain, app_id) can_send_sms = domain_has_privilege(domain, privileges.OUTBOUND_SMS) build_profile_access = domain_has_privilege(domain, privileges.BUILD_PROFILES) prompt_settings_form = PromptUpdateSettingsForm.from_app( app, request_user=request.couch_user) context = { 'release_manager': True, 'can_send_sms': can_send_sms, 'can_view_cloudcare': has_privilege(request, privileges.CLOUDCARE), 'has_mobile_workers': get_doc_count_in_domain_by_class(domain, CommCareUser) > 0, 'latest_released_version': get_latest_released_app_version(domain, app_id), 'sms_contacts': (get_sms_autocomplete_context( request, domain)['sms_contacts'] if can_send_sms else []), 'build_profile_access': build_profile_access, 'application_profile_url': reverse(LanguageProfilesView.urlname, args=[domain, app_id]), 'lastest_j2me_enabled_build': CommCareBuildConfig.latest_j2me_enabled_config().label, 'latest_build_id': get_latest_build_id(domain, app_id), 'prompt_settings_url': reverse(PromptSettingsUpdateView.urlname, args=[domain, app_id]), 'prompt_settings_form': prompt_settings_form, 'full_name': request.couch_user.full_name, 'can_manage_releases': can_manage_releases(request.couch_user, request.domain, app_id), 'can_edit_apps': request.couch_user.can_edit_apps(), } if not app.is_remote_app(): context.update({ 'enable_update_prompts': app.enable_update_prompts, }) if len(app.modules) == 0: context.update({'intro_only': True}) # Multimedia is not supported for remote applications at this time. try: multimedia_state = app.check_media_state() context.update({ 'multimedia_state': multimedia_state, }) except ReportConfigurationNotFoundError: pass return context
def recovery_measures(request, domain, build_id): app_id = get_app_cached(domain, build_id).master_id response = { "latest_apk_version": get_default_build_spec().version, "latest_ccz_version": get_latest_released_app_version(domain, app_id), "app_id": request.GET.get('app_id'), # passed through unchanged } measures = get_recovery_measures_cached(domain, app_id) if measures: response["recovery_measures"] = measures return JsonResponse(response)
def recovery_measures(request, domain, build_id): app_id = get_app_cached(domain, build_id).master_id response = { "latest_apk_version": get_default_build_spec().version, "latest_ccz_version": get_latest_released_app_version(domain, app_id), "app_id": request.GET.get('app_id'), # passed through unchanged } measures = get_recovery_measures_cached(domain, app_id) if measures: response["recovery_measures"] = measures return JsonResponse(response)
def current_app_version(request, domain, app_id): """ Return current app version and the latest release """ app = get_app(domain, app_id) latest_build = get_latest_build_doc(domain, app_id) latest_released_version = get_latest_released_app_version(domain, app_id) return json_response({ 'currentVersion': app.version, 'latestBuild': latest_build['version'] if latest_build else None, 'latestReleasedBuild': latest_released_version if latest_released_version else None, })
def handle(self, master_id, linked_id, **options): print("Linking apps") master_app = Application.get(master_id) master_version = get_latest_released_app_version(master_app.domain, master_id) if not master_version: raise CommandError( "Creating linked app failed." " Unable to get latest released version of your app." " Make sure you have at least one released build." ) linked_app = LinkedApplication.get(linked_id) link_app(linked_app, master_app.domain, master_id) update_linked_app(linked_app, 'system')
def handle(self, master_id, linked_id, **options): print("Linking apps") master_app = Application.get(master_id) master_version = get_latest_released_app_version(master_app.domain, master_id) if not master_version: raise CommandError( "Creating linked app failed." " Unable to get latest released version of your app." " Make sure you have at least one released build." ) linked_app = LinkedApplication.get(linked_id) link_app(linked_app, master_app.domain, master_id) update_linked_app(linked_app, 'system')
def current_app_version(request, domain, app_id): """ Return current app version and the latest release """ try: app_version = get_current_app_version(domain, app_id) except NoResultFound: # occurs when passed a build raise Http404 latest_build_version = get_latest_build_version(domain, app_id) latest_released_version = get_latest_released_app_version(domain, app_id) return json_response({ 'currentVersion': app_version, 'latestBuild': latest_build_version, 'latestReleasedBuild': latest_released_version if latest_released_version else None, })
def current_app_version(request, domain, app_id): """ Return current app version and the latest release """ try: app_version = get_current_app_version(domain, app_id) except NoResultFound: # occurs when passed a build raise Http404 latest_build_version = get_latest_build_version(domain, app_id) latest_released_version = get_latest_released_app_version(domain, app_id) return json_response({ 'currentVersion': app_version, 'latestBuild': latest_build_version, 'latestReleasedBuild': latest_released_version if latest_released_version else None, })
def _create_linked_app(request, master_app, link_domain, link_app_name): master_domain = master_app.domain master_version = get_latest_released_app_version(master_domain, master_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=[master_domain, master_app._id])) linked_app = create_linked_app(master_domain, master_app._id, link_domain, link_app_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=[master_domain, master_app._id])) messages.success(request, _('Application successfully copied and linked.')) return HttpResponseRedirect(reverse_util('app_settings', params={}, args=[link_domain, linked_app.get_id]))
def get_releases_context(request, domain, app_id): app = get_app(domain, app_id) can_send_sms = domain_has_privilege(domain, privileges.OUTBOUND_SMS) build_profile_access = domain_has_privilege(domain, privileges.BUILD_PROFILES) prompt_settings_form = PromptUpdateSettingsForm.from_app(app, request_user=request.couch_user) context = { 'release_manager': True, 'can_send_sms': can_send_sms, 'can_view_cloudcare': has_privilege(request, privileges.CLOUDCARE), 'has_mobile_workers': get_doc_count_in_domain_by_class(domain, CommCareUser) > 0, 'latest_released_version': get_latest_released_app_version(domain, app_id), 'sms_contacts': ( get_sms_autocomplete_context(request, domain)['sms_contacts'] if can_send_sms else [] ), 'build_profile_access': build_profile_access, 'application_profile_url': reverse(LanguageProfilesView.urlname, args=[domain, app_id]), 'lastest_j2me_enabled_build': CommCareBuildConfig.latest_j2me_enabled_config().label, 'fetchLimit': request.GET.get('limit', DEFAULT_FETCH_LIMIT), 'latest_build_id': get_latest_build_id(domain, app_id), 'prompt_settings_url': reverse(PromptSettingsUpdateView.urlname, args=[domain, app_id]), 'prompt_settings_form': prompt_settings_form, 'full_name': request.couch_user.full_name, 'can_manage_releases': can_manage_releases(request.couch_user, request.domain, app_id) } if not app.is_remote_app(): context.update({ 'enable_update_prompts': app.enable_update_prompts, }) if len(app.modules) == 0: context.update({'intro_only': True}) # Multimedia is not supported for remote applications at this time. try: multimedia_state = app.check_media_state() context.update({ 'multimedia_state': multimedia_state, }) except ReportConfigurationNotFoundError: pass return context
def get_master_app_version(domain_link, app_id): if domain_link.is_remote: return get_released_app_version(domain_link.master_domain, app_id, domain_link.remote_details) else: return get_latest_released_app_version(domain_link.master_domain, app_id)
def test_get_latest_released_app_version(self): version = get_latest_released_app_version(self.domain, self.app_id) self.assertEqual(version, 4)