def images_for_user(cls, user=None): from core.models.user import AtmosphereUser is_public = Q(private=False) if not user or isinstance(user, AnonymousUser): # Images that are not endated and are public return Application.objects.filter( query.only_current_apps() & is_public, versions__machines__instance_source__provider__public=True ).distinct() if not isinstance(user, AtmosphereUser): raise Exception("Expected user to be of type AtmosphereUser" " - Received %s" % type(user)) queryset = None if user.is_staff: # Any image on a provider in the staff's provider list queryset = Application.objects.filter( query.in_users_providers(user)) else: # This query is not the most clear. Here's an explanation: # Include all images created by the user or active images in the # users providers that are either shared with the user or public queryset = Application.objects.filter( query.created_by_user(user) | (query.only_current_apps() & query.in_users_providers(user) & (query.images_shared_with_user(user) | is_public))) return queryset.distinct()
def shared_with(cls, user): group_ids = user.group_ids() shared_images = Application.objects.filter( only_current_apps(), (Q(versions__machines__members__id__in=group_ids) | Q(versions__membership__id__in=group_ids))) return shared_images
def main(): parser = argparse.ArgumentParser() parser.add_argument("--dry-run", action="store_true", help="List of provider names and IDs") args = parser.parse_args() admin_owned_apps = Application.objects.filter( created_by__username__contains='admin').filter(only_current_apps()).distinct() account_drivers = {} # FIXME: Change the provider_id if necessary. for app in admin_owned_apps: # Step 1 - See if MachineRequest can answer the question machine = app._current_machines().filter(instance_source__provider__id=4).first() if not machine: continue mr = MachineRequest.objects.filter(new_machine=machine).first() if mr: fix_application_owner(app, mr.created_by, args.dry_run) continue # Step 2 - See if glance can answer the question provider = machine.provider if account_drivers.get(provider): accounts = account_drivers[provider] else: accounts = get_account_driver(provider) account_drivers[provider] = accounts img = accounts.get_image(machine.identifier) if not img: continue project = accounts.get_project_by_id(img.owner) if not project: continue user = AtmosphereUser.objects.filter(username=project.name).first() if user: fix_application_owner(app, user, args.dry_run)
def shared_with(cls, user): group_ids = user.group_ids() shared_images = Application.objects.filter( only_current_apps(), (Q(versions__machines__members__id__in=group_ids) | Q(versions__membership__id__in=group_ids)), ) return shared_images
def images_for_user(cls, user=None): from core.models.user import AtmosphereUser is_public = Q(private=False) if not user or isinstance(user, AnonymousUser): # Images that are not endated and are public return Application.objects.filter( query.only_current_apps() & is_public, versions__machines__instance_source__provider__public=True ).distinct() if not isinstance(user, AtmosphereUser): raise Exception( "Expected user to be of type AtmosphereUser" " - Received %s" % type(user) ) queryset = None if user.is_staff: # Any image on a provider in the staff's provider list queryset = Application.objects.filter( query.in_users_providers(user) ) else: # This query is not the most clear. Here's an explanation: # Include all images created by the user or active images in the # users providers that are either shared with the user or public queryset = Application.objects.select_related( 'created_by' ).prefetch_related( 'versions__machines__instance_source__provider', 'versions__machines__members', 'versions__membership' ).filter( query.created_by_user(user) | ( query.only_current_apps() & query.in_users_providers(user) & (query.images_shared_with_user_by_ids(user) | is_public) ) ) return queryset.distinct()
def get_admin_images(request_user): # Final query for admins/staff images provider_id_list = request_user.provider_ids() # TODO: This 'just works' and is probably very slow... Better way? account_providers_list = AccountProvider.objects.filter( provider__id__in=provider_id_list) admin_users = [ap.identity.created_by for ap in account_providers_list] image_ids = [] for user in admin_users: image_ids.extend( user.application_set.values_list('id', flat=True)) admin_list = Image.objects.filter( only_current_apps(), id__in=image_ids) return admin_list
def main(): parser = argparse.ArgumentParser() parser.add_argument("--dry-run", action="store_true", help="List of provider names and IDs") args = parser.parse_args() admin_owned_apps = Application.objects.filter( created_by__username__contains='admin').filter( only_current_apps()).distinct() account_drivers = {} # FIXME: Change the provider_id if necessary. for app in admin_owned_apps: # Step 1 - See if MachineRequest can answer the question machine = app._current_machines().filter( instance_source__provider__id=4).first() if not machine: continue mr = MachineRequest.objects.filter(new_machine=machine).first() if mr: fix_application_owner(app, mr.created_by, args.dry_run) continue # Step 2 - See if glance can answer the question provider = machine.provider if account_drivers.get(provider): accounts = account_drivers[provider] else: accounts = get_account_driver(provider) account_drivers[provider] = accounts img = accounts.get_image(machine.identifier) if not img: continue project = accounts.get_project_by_id(img.owner) if not project: continue user = AtmosphereUser.objects.filter(username=project.name).first() if user: fix_application_owner(app, user, args.dry_run)
def public_apps(cls): public_images = Application.objects.filter( only_current_apps(), private=False) return public_images
def public_apps(cls): public_images = Application.objects.filter(only_current_apps(), private=False) return public_images
def generate_metrics(): nowtime = timezone.now() all_apps = Application.objects.filter(only_current_apps()).distinct().order_by('id') for app in all_apps: generate_metrics_for.apply_async(args=[app.id, app.name, nowtime]) return True