def test_get_object_or_none(self): obj = ShortcutsModel.objects.create(name='test1', datetime=timezone.now(), number=1) ShortcutsModel.objects.create(name='test2', datetime=timezone.now(), number=2) ShortcutsModel.objects.create(name='test2', datetime=timezone.now(), number=3) assert_equal(get_object_or_none(ShortcutsModel, name='test1'), obj) assert_is_none(get_object_or_none(ShortcutsModel, name='test3')) assert_is_none(get_object_or_none(ShortcutsModel, number='test3')) assert_is_none(get_object_or_none(ShortcutsModel, datetime='test3')) assert_raises(FieldError, get_object_or_none, ShortcutsModel, non_field='test2') assert_raises(MultipleObjectsReturned, get_object_or_none, ShortcutsModel, name='test2')
def _create_or_update_single_reverse_related_objects(self, data, key, data_item, model_descriptor): rel_object = model_descriptor.related model = rel_object.related_model field_name = rel_object.field.name resource = self._get_resource(model) if resource: related_obj = get_object_or_none(model, **{field_name: self.inst.pk}) try: if data_item is None: if related_obj: self._delete_reverse_object({resource.pk_field_name: related_obj.pk}, model) setattr(self.inst, model_descriptor.cache_name, None) else: if not isinstance(data_item, dict): obj_data = {resource.pk_field_name: force_text(data_item)} else: obj_data = data_item.copy() if not resource.pk_field_name in obj_data and related_obj: obj_data[resource.pk_field_name] = related_obj.pk obj_data[field_name] = self.inst.pk setattr(self.inst, key, self._create_or_update_related_object(obj_data, model)) except DataInvalidException as ex: self.errors[key] = ex.errors
def _create_or_update_single_reverse_related_objects(self, data, key, data_item, model_descriptor): rel_object = get_related_from_descriptior(model_descriptor) model = get_model_from_rel_obj(rel_object) field_name = rel_object.field.name resource = self._get_resource(model) if resource: related_obj = get_object_or_none(model, **{field_name: self.inst.pk}) try: if data_item is None: if related_obj: self._delete_reverse_object({resource.pk_field_name: related_obj.pk}, model) setattr(self.inst, model_descriptor.cache_name, None) else: if not isinstance(data_item, dict): obj_data = {resource.pk_field_name: force_text(data_item)} else: obj_data = data_item.copy() if resource.pk_field_name not in obj_data and related_obj: obj_data[resource.pk_field_name] = related_obj.pk obj_data[field_name] = self.inst.pk setattr(self.inst, key, self._create_or_update_related_object(obj_data, model)) except DataInvalidException as ex: self.errors[key] = ex.errors
def process_event(self, event_dict): message_id = event_dict.get('_id', None) if message_id: message = get_object_or_none( EmailMessage, extra_sender_data__contains='"_id":"{}"'.format(message_id)) if message: message.change_and_save(last_webhook_received_at=now())
def is_valid(self, obj, key, slug=None): """ Check if key is valid token for obj if is the token is deactivated """ token = get_object_or_none(self.model, validating_type=ContentType.objects.get_for_model(obj), validating_id=obj.pk, is_active=True, key=key, slug=slug) return token is not None and not token.is_expired
def _get_perm_obj_or_404(self, pk=None): """ If is send parameter pk is returned object according this pk, else is returned object from get_obj method, but it search only inside filtered values for current user, finally if object is still None is returned according the input key from all objects. If object does not exist is raised Http404 """ if pk: obj = get_object_or_none(self.core.model, pk=pk) else: try: obj = self.get_obj(False) except Http404: obj = get_object_or_none(self.core.model, **self.get_obj_filters()) if not obj: raise Http404 return obj
def get_user(request): if not hasattr(request, '_cached_user'): user = auth_token.get_user(request) if user.is_authenticated(): child_user = get_object_or_none(get_current_domain().user_class, pk=user.pk) if child_user is not None: user = child_user else: user = AnonymousUser() request._cached_user = user return request._cached_user
def send_and_update_sms_states(*ats_requests): """ Higher-level function performing serialization of ATS requests, parsing ATS server response and updating SMS messages state according the received response. """ for uniq, state in send_and_parse_response(*ats_requests).items(): sms = get_object_or_none(config.get_output_sms_model(), pk=uniq) if sms: sms.state = state if state in config.ATS_STATES.all else config.ATS_STATES.LOCAL_UNKNOWN_ATS_STATE sms.sent_at = timezone.now() sms.save() else: raise SMSValidationError(ugettext('SMS with uniq "{}" not found in DB.').format(uniq))
def get_user(request): if not hasattr(request, '_cached_user'): user = auth_token.get_user(request) if user.is_authenticated(): child_user = get_object_or_none( get_current_domain().user_class, pk=user.pk ) if child_user is not None: user = child_user else: user = AnonymousUser() request._cached_user = user return request._cached_user
def get_token(request): """ Returns the token model instance associated with the given request token key. If no user is retrieved AnonymousToken is returned. """ if (not request.META.get(header_name_to_django(auth_token_settings.HEADER_NAME)) and settings.MULTIDOMAINS_OVERTAKER_AUTH_COOKIE_NAME): ovetaker_auth_token = request.COOKIES.get(settings.MULTIDOMAINS_OVERTAKER_AUTH_COOKIE_NAME) token = get_object_or_none(Token, key=ovetaker_auth_token, is_active=True) if utils.get_user_from_token(token).is_authenticated(): return token return utils.get_token(request)
def get_token(request): """ Returns the token model instance associated with the given request token key. If no user is retrieved AnonymousToken is returned. """ if (not request.META.get(header_name_to_django(is_core_settings.AUTH_HEADER_NAME)) and config.CHAMBER_MULTIDOMAINS_OVERTAKER_AUTH_COOKIE_NAME): ovetaker_auth_token = request.COOKIES.get(config.CHAMBER_MULTIDOMAINS_OVERTAKER_AUTH_COOKIE_NAME) token = get_object_or_none(Token, key=ovetaker_auth_token, is_active=True) if utils.get_user_from_token(token).is_authenticated(): return token return utils.get_token(request)
def is_valid(self, obj, key, slug=None): """ Check if key is valid token for obj if is the token is deactivated """ token = get_object_or_none( self.model, validating_type=ContentType.objects.get_for_model(obj), validating_id=obj.pk, is_active=True, key=key, slug=slug) return token is not None and not token.is_expired
def send_and_update_sms_states(*ats_requests): """ Higher-level function performing serialization of ATS requests, parsing ATS server response and updating SMS messages state according the received response. """ for uniq, state in send_and_parse_response(*ats_requests).items(): sms = get_object_or_none(config.get_output_sms_model(), pk=uniq) if sms: sms.state = state if state in config.ATS_STATES.all else config.ATS_STATES.LOCAL_UNKNOWN_ATS_STATE sms.sent_at = timezone.now() sms.save() else: raise SMSValidationError( ugettext('SMS with uniq "{}" not found in DB.').format(uniq))
def create_and_add_gear_to_activity_if_needed(activity, strava_client): if activity.gear_id: gear_created = False gear = get_object_or_none(Gear, strava_id=activity.gear_id) if not gear: strava_gear = strava_client.get_gear(activity.gear_id) gear = Gear.objects.create( strava_id=strava_gear.id, name=strava_gear.name, type=STRAVA_ACTIVITY_TYPE_TO_GEAR_TYPE[activity.type]) gear_created = True Activity.objects.get(strava_id=activity.id).gear.add(gear) return gear_created return False
def handle(self, **options): self.stdout.write('Syncing permissions') updated_permission_pks = set() created_permission_pks = set() unchanged_permissions_pks = set() for permission in permissions.values(): perm = get_object_or_none(Perm, type=enums.PERM_TYPE_CORE, codename=permission.name, name=permission.verbose_name) if perm: unchanged_permissions_pks.add(perm.pk) else: perm, created = Perm.objects.update_or_create( type=enums.PERM_TYPE_CORE, codename=permission.name, defaults={'name': permission.verbose_name}) if created: created_permission_pks.add(perm.pk) else: updated_permission_pks.add(perm.pk) self.stdout.write(' Updated: {}'.format(len(updated_permission_pks))) self.stdout.write(' Created: {}'.format(len(created_permission_pks))) self.stdout.write('Removing unused permissions') nonexistent_unused_permissions_qs = Perm.objects.exclude( pk__in=updated_permission_pks | created_permission_pks | unchanged_permissions_pks).filter(fgroups__isnull=True, users__isnull=True) count = nonexistent_unused_permissions_qs.count() nonexistent_unused_permissions_qs.delete() self.stdout.write(' Removed: {}'.format(count)) nonexistent_used_permissions_qs = Perm.objects.exclude( pk__in=updated_permission_pks | created_permission_pks | unchanged_permissions_pks) if options.get('clean_obsolete'): self.stdout.write('Removing used permissions') count = nonexistent_used_permissions_qs.count() nonexistent_used_permissions_qs.delete() self.stdout.write(' Removed: {}'.format(count)) elif nonexistent_used_permissions_qs.exists(): self.stderr.write( 'Found used obsolete permissions, run command with "--clean-obsolete" parameter for cleaning' ) obsolete_string = ugettext(' (obsolete)') nonexistent_used_permissions_qs.exclude( name__endswith=obsolete_string).update( name=Concat(F('name'), Value(obsolete_string)))
def update_sms_states(parsed_response): """ Higher-level function performing serialization of ATS requests, parsing ATS server response and updating SMS messages state according the received response. """ for uniq, state in parsed_response.items(): sms = get_object_or_none(get_output_sms_model(), pk=uniq) if sms: change_and_save(sms, state=state if state in ATS_STATES.all else ATS_STATES.LOCAL_UNKNOWN_ATS_STATE, sent_at=timezone.now()) else: raise SMSValidationError( ugettext('SMS with uniq "{}" not found in DB.').format(uniq))
def _get_obj_or_none(self, pk=None): return get_object_or_none(self._get_queryset(), pk=(pk or self._get_pk()))
def _get_perm_obj_or_none(self, pk=None): pk = pk or self._get_pk() if pk: return get_object_or_none(self.core.model, pk=pk) else: return None
def _get_obj_or_none(self, pk=None): return get_object_or_none(self._get_queryset(), pk=(pk or self.kwargs.get(self.pk_name)))
def _get_perm_obj_or_none(self, pk=None): pk = pk or self.kwargs.get(self.pk_name) if pk: return get_object_or_none(self.core.model, pk=pk) else: return None
def _get_obj_or_none(self, model, parent_inst, field_name): return get_object_or_none(model, **{field_name: parent_inst.pk})
def _get_obj_or_none(self, pk=None): if pk or self._get_pk(): return get_object_or_none(self._get_queryset(), pk=(pk or self._get_pk())) else: return None