Ejemplo n.º 1
0
 def test_send_rejected_mail(self, send_mail, fake_new_account_request):
     send_rejected_mail(fake_new_account_request, 'some reason')
     send_mail.called_called_once_with(
         fake_new_account_request.email,
         '[OCF] Your account has been created!',
         mock.ANY,
     )
Ejemplo n.º 2
0
 def test_send_rejected_mail(self, send_mail, fake_new_account_request):
     send_rejected_mail(fake_new_account_request, 'some reason')
     send_mail.called_called_once_with(
         fake_new_account_request.email,
         '[OCF] Your account has been created!',
         mock.ANY,
     )
Ejemplo n.º 3
0
    def create_account(request):
        # TODO: docstring
        # lock account creation for up to 5 minutes
        r = redis.from_url(credentials.redis_uri)
        lock = r.lock('ocflib.account.submission.create_account', timeout=60 * 5)
        try:
            if not lock.acquire(blocking=True, blocking_timeout=60 * 5):
                raise RuntimeError('Couldn\'t lock account creation, abandoning.')

            # status reporting
            status = []

            class report_status:

                def __init__(self, *args):
                    if len(args) == 1:
                        self(*args)
                    else:
                        self.start, self.stop, self.task = args

                def __call__(self, line):
                    status.append(line)
                    create_account.update_state(meta={'status': status})

                def __enter__(self, *args):
                    self(self.start + ' ' + self.task)

                def __exit__(self, *args):
                    self(self.stop + ' ' + self.task)

            with report_status('Validating', 'Validated', 'request'), \
                    get_session() as session:
                errors, warnings = validate_request(request, credentials, session)

            if errors:
                send_rejected_mail(request, str(errors))
                return NewAccountResponse(
                    status=NewAccountResponse.REJECTED,
                    errors=(errors + warnings),
                )

            # actual account creation
            kwargs = {}
            known_uid = r.get('known_uid')
            if known_uid:
                kwargs['known_uid'] = int(known_uid)
            new_uid = real_create_account(request, credentials, report_status, **kwargs)
            r.set('known_uid', new_uid)

            dispatch_event('ocflib.account_created', request=request.to_dict())
            return NewAccountResponse(
                status=NewAccountResponse.CREATED,
                errors=[],
            )
        finally:
            try:
                lock.release()
            except LockError:
                pass
Ejemplo n.º 4
0
    def create_account(request):
        # TODO: docstring
        # lock account creation for up to 5 minutes
        r = redis.from_url(credentials.redis_uri)
        lock = r.lock('ocflib.account.submission.create_account', timeout=60 * 5)
        try:
            if not lock.acquire(blocking=True, blocking_timeout=60 * 5):
                raise RuntimeError('Couldn\'t lock account creation, abandoning.')

            # status reporting
            status = []

            class report_status:

                def __init__(self, *args):
                    if len(args) == 1:
                        self(*args)
                    else:
                        self.start, self.stop, self.task = args

                def __call__(self, line):
                    status.append(line)
                    create_account.update_state(meta={'status': status})

                def __enter__(self, *args):
                    self(self.start + ' ' + self.task)

                def __exit__(self, *args):
                    self(self.stop + ' ' + self.task)

            with report_status('Validating', 'Validated', 'request'), \
                    get_session() as session:
                errors, warnings = validate_request(request, credentials, session)

            if errors:
                send_rejected_mail(request, str(errors))
                return NewAccountResponse(
                    status=NewAccountResponse.REJECTED,
                    errors=(errors + warnings),
                )

            # actual account creation
            kwargs = {}
            known_uid = r.get('known_uid')
            if known_uid:
                kwargs['known_uid'] = int(known_uid)
            new_uid = real_create_account(request, credentials, report_status, **kwargs)
            r.set('known_uid', new_uid)

            dispatch_event('ocflib.account_created', request=request.to_dict())
            return NewAccountResponse(
                status=NewAccountResponse.CREATED,
                errors=[],
            )
        finally:
            try:
                lock.release()
            except LockError:
                pass
Ejemplo n.º 5
0
    def create_account(request):
        # TODO: docstring
        # lock account creation for up to 5 minutes
        r = redis.from_url(credentials.redis_uri)
        lock = r.lock('ocflib.account.submission.create_account', timeout=60 * 5)
        try:
            if not lock.acquire(blocking=True, blocking_timeout=60 * 5):
                raise RuntimeError('Couldn\'t lock account creation, abandoning.')

            # status reporting
            status = []

            def _report_status(line):
                """Update task status by adding the given line."""
                status.append(line)
                create_account.update_state(meta={'status': status})

            @contextmanager
            def report_status(start, stop, task):
                _report_status(start + ' ' + task)
                yield
                _report_status(stop + ' ' + task)

            with report_status('Validating', 'Validated', 'request'), \
                    get_session() as session:
                errors, warnings = validate_request(request, credentials, session)

            if errors:
                send_rejected_mail(request, str(errors))
                return NewAccountResponse(
                    status=NewAccountResponse.REJECTED,
                    errors=(errors + warnings),
                )

            # actual account creation
            real_create_account(request, credentials, report_status)
            dispatch_event('ocflib.account_created', request=request.to_dict())
            return NewAccountResponse(
                status=NewAccountResponse.CREATED,
                errors=[],
            )
        finally:
            try:
                lock.release()
            except LockError:
                pass
Ejemplo n.º 6
0
 def reject_request(user_name):
     stored_request = get_remove_row_by_user_name(user_name)
     request = stored_request.to_request()
     send_rejected_mail(request, stored_request.reason)
     dispatch_event('ocflib.account_rejected', request=request.to_dict())