コード例 #1
0
    async def delete_post(self, task_message: DeletePostTaskMessage) -> bool:
        post = get_object_or_none(Post, pk=task_message.post_id)

        if not post:
            logger.error('Post Not Found Post id {}'.format(
                task_message.post_id))
            return False

        social_uid, access_token = self._get_vk_credentials(post.user)

        method = WallDeleteMethod(priority=task_message.priority,
                                  access_token=access_token,
                                  owner_id=format_group_id(
                                      post.group.group_id),
                                  post_id=post.post_id)

        response_dict = await method.execute()

        status = self.check_response(post,
                                     response_dict,
                                     fail_status=Post.FAILED_DELETE,
                                     delete_status=Post.IS_DELETED)

        if not status:
            return False

        post.status = Post.IS_DELETED if task_message.delete_status == Post.IS_DELETED else task_message.delete_status
        post.save()
        return True
コード例 #2
0
    async def delete_video(self, task_message: DeleteVideoTaskMessage) -> bool:
        video = get_object_or_none(Video, pk=task_message.video_id)
        if not video:
            logger.error('Video Not Found vid: {}'.format(
                task_message.video_id))
            return False

        social_uid, access_token = self._get_vk_credentials(video.user)

        method = VideoDeleteMethod(access_token=access_token,
                                   video_id=video.vid,
                                   owner_id=video.owner,
                                   priority=task_message.priority)

        response_dict = await method.execute()

        status = self.check_response(video,
                                     response_dict,
                                     fail_status=Video.DELETE_FAIL,
                                     delete_status=Video.IS_DELETED)

        if not status:
            return False

        video.status = Video.IS_DELETED
        video.save()
        return True
コード例 #3
0
ファイル: views.py プロジェクト: vpinnaka/api-example-django
    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        date_of_birth = form.cleaned_data.get('date_of_birth')
        gender = form.cleaned_data.get('gender')
        address = form.cleaned_data.get('address')
        zip_code = form.cleaned_data.get('zip_code')
        city = form.cleaned_data.get('city')
        state = form.cleaned_data.get('state')
        email = form.cleaned_data.get('email')
        cell_phone = form.cleaned_data.get('cell_phone')
        emergency_contact_name = form.cleaned_data.get(
            'emergency_contact_name')
        emergency_contact_phone = form.cleaned_data.get(
            'emergency_contact_phone')

        patient_id = self.request.session.get('checkedin_patient')

        patient = get_object_or_none(Patient, pk=patient_id)

        if patient:
            access_token = self.request.session.get('access_token')
            patient_api = PatientEndpoint(access_token)

            updated_fields = {
                'email': email,
                'gender': gender,
                'date_of_birth': date_of_birth,
                'address': address,
                'city': city,
                'state': state,
                'zip_code': zip_code,
                'cell_phone': cell_phone,
            }

            response = {}
            try:
                response = patient_api.update(patient_id, updated_fields)

                updated_patient, created = update_or_create_object(
                    Patient, updated_fields, pk=patient_id)
                return super(DemographicsView, self).form_valid(form)
            except APIException:
                context = {
                    'form':
                    form,
                    'message':
                    'Trouble updating your data, Please consult a staff member',
                }
                return render(self.request, "checkin.html", context)

        context = {
            'form':
            form,
            'message':
            'Patient demographics not updated, please check with attendent',
        }
        return render(self.request, "checkin.html", context)
コード例 #4
0
ファイル: views.py プロジェクト: vpinnaka/api-example-django
    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        first_name = form.cleaned_data.get('first_name')
        last_name = form.cleaned_data.get('last_name')
        # dob = form.cleaned_data.get('date_of_birth')
        # TODO: Use ssn to get the patient
        ssn = form.cleaned_data.get('social_security_number')

        patient = get_object_or_none(Patient,
                                     first_name=first_name,
                                     last_name=last_name,
                                     social_security_number=str(ssn))
        if patient:
            access_token = self.request.session['access_token']
            apppointment_api = AppointmentEndpoint(access_token)
            appointments = Appointment.today.filter(patient=patient.id)
            updateddate = datetime.now().isoformat()
            for appointment in appointments:
                updated_fields = {
                    'appointment_status': 'Checked In',
                    'checkedin_status': True,
                    'checkedin_time': updateddate,
                }

                data = {'status': 'Checked In', 'updated_at': updateddate}
                response = {}
                try:
                    response = apppointment_api.update(appointment.id, data)
                    updated_appointment, created = update_or_create_object(
                        Appointment, updated_fields, pk=appointment.id)

                    self.request.session['checkedin_patient'] = patient.id
                    return super(CheckinView, self).form_valid(form)
                except APIException:
                    context = {
                        'form':
                        form,
                        'message':
                        'Trouble checking you in, Please consult a staff member',
                    }
                    return render(self.request, "checkin.html", context)

            context = {
                'form': form,
                'message': 'Appointment for the Patient not found',
            }
            return render(self.request, "checkin.html", context)

        context = {
            'form': form,
            'message': 'Patient not found',
        }
        return render(self.request, "checkin.html", context)
コード例 #5
0
ファイル: views.py プロジェクト: thomaspurchas/ESO
def serve_document(request, pk, type=None, order=None):
    if request.path.startswith('/api/'):
        DigestAuthentication().is_authenticated(request)

    doc = get_object_or_404(Document, pk=pk)
    #pack = doc.packs.objects.get(type='pdf')
    object = None
    if type:
        type = str(type)
        if type.endswith('/'):
            type = type[:-1]
        if not order:
            order = '0'
        if order.endswith('/'):
            order = order[:-1]
        object = get_object_or_none(DerivedFile,
            pack__derived_from=doc, pack__type__exact=type, order=int(order))

        # If you document is a pdf and they want a pdf, serve the original
        if (type == 'pdf') and (not object) and (doc.file.name.lower().endswith('.pdf')):
            object = doc
    else:
        object = doc

    if not object:
        raise Http404

    if settings.DEBUG:
        return serve(request, object.file.name, settings.MEDIA_ROOT)
    else:
        fullpath = os.path.join(settings.MEDIA_ROOT, object.file.name)
        mimetype, encoding = mimetypes.guess_type(fullpath)
        mimetype = mimetype or 'application/octet-stream'
        response = HttpResponse(mimetype=mimetype)

        if encoding:
            response["Content-Encoding"] = encoding
        try:
            response['X-Accel-Redirect'] = object.file.name
        except UnicodeEncodeError:
            raise Http404

        return response
コード例 #6
0
    def get_and_store_data(self, doctor=None, date=None):
        params = {}
        # get all the appointments for today from the appointments api endpoint

        if doctor:
            params['doctor'] = doctor.id
        else:
            doctor = utils.get_object_first(Doctor)

        if date == None:
            date = datetime.now(tz=pytz.timezone(
                doctor.timezone)).strftime('%Y-%m-%d')
        appointments = self.list(params=params, date=date)
        for appointment in appointments:
            if appointment['status'] in ('Cancelled', 'Rescheduled'):
                continue
            patient = utils.get_object_or_none(
                Patient, id=appointment['patient'])
            patient_name = '{}, {}'.format(
                patient.first_name,
                patient.last_name
            )
            updated_fields = {
                'patient': patient,
                'patient_name': patient_name,
                'doctor': doctor,
                'appointment_time': appointment['scheduled_time'],
                'appointment_status': appointment['status'],
                'duration': appointment['duration'],
                'exam_room': appointment['exam_room'],
                'reason': appointment['reason'],
            }

            if appointment['status'] in ('Complete', 'No Show'):
                updated_fields['queue_status'] = 'past'
            if appointment['status'] in ('Checked In', 'Arrived'):
                updated_fields['checkedin_status'] = True
            updated_appointment, created = utils.update_or_create_object(
                Appointment, updated_fields, pk=appointment['id'])
コード例 #7
0
    async def bulk_delete_post(self, task_message: BulkDeletePostTaskMessage) -> bool:
        user = get_object_or_none(User, pk=task_message.user_id)
        if not user:
            logger.error('User not found {}'.format(task_message.user_id))
            return False

        social_uid, access_token = self._get_vk_credentials(user)
        posts_queryset = Post.objects.filter(pk__in=task_message.post_ids)
        posts_list = list(posts_queryset)
        call_method_list = []

        post_splits = split_list(posts_list, 25)

        for post_split in post_splits:
            for post in post_split:
                args = {
                    VK_MESSAGE_KEY.OWNER_ID: format_group_id(post.group.group_id),
                    VK_MESSAGE_KEY.POST_ID: post.post_id
                }
                call = ExecuteMethod.construct(
                    ExecuteMethod.WALL_ENTITY,
                    ExecuteMethod.DELETE_METHOD,
                    json.dumps(args)
                )
                call_method_list.append(call)

            method = ExecuteMethod(
                priority=task_message.priority,
                access_token=access_token,
                code=ExecuteMethod.construct_code(call_method_list)
            )

            response_dict = await method.execute()

            if not response_dict:
                error = DefaultError(
                    error_key=ErrorCode.RESPONSE_IS_EMPTY_KEY,
                    text=ErrorCode.RESPONSE_IS_EMPTY_TEXT
                )
                for post in posts_list:
                    post.vk_response = error.to_json()
                    post.status = Post.FAILED_DELETE
                    post.save()
                return False

            if VK_MESSAGE_KEY.ERROR in response_dict:
                # берем ошибку по коду ответа (только в execute)
                error_dict = response_dict.get(VK_MESSAGE_KEY.ERROR)
                error = DefaultError.get_error_from_response(
                    error_dict=error_dict,
                    error_key=VK_MESSAGE_KEY.ERROR_CODE
                )

                sentry_error = {
                    'error': response_dict,
                    'error_msg': error,
                    'user_id': user.pk,
                    'username': user.get_full_name()
                }
                sentry_logger.error(msg=sentry_error)

                for post in posts_list:
                    post.vk_response = error
                    post.status = Post.FAILED_DELETE
                    post.save()

                return False

            response_list = response_dict.get(VK_MESSAGE_KEY.RESPONSE)

            if VK_MESSAGE_KEY.EXECUTE_ERRORS in response_dict:
                error_list = response_dict.get(VK_MESSAGE_KEY.EXECUTE_ERRORS)

                sentry_logger.warning(msg="Execute errors while post deleting", extra={
                    'error': response_dict,
                    'user_id': user.pk,
                    'username': user.get_full_name()
                })

                false_response_posts = []

                # порядок постов в сплите совпадает с порядко постов в ответе
                for index, post in enumerate(post_split):
                    if not response_list[index]:
                        false_response_posts.append(post)

                if false_response_posts:
                    for index, post in enumerate(false_response_posts):
                        concrete_error = error_list[index]
                        concrete_error_msg = DefaultError.get_error_from_response(
                            error_dict=concrete_error,
                            error_key=VK_MESSAGE_KEY.ERROR_MSG
                        )

                        # error code 7, Access denied распознаем, как удаленные
                        error_message = concrete_error.get(VK_MESSAGE_KEY.ERROR_MSG)
                        if error_message == ErrorCode.WALL_DELETE_ACCESS_DENIED_KEY:
                            post.status = Post.IS_DELETED
                        else:
                            post.status = Post.FAILED_DELETE

                        post.vk_response = concrete_error_msg

                        post.save()
                        self.log_to_sentry(post, concrete_error_msg, level='warning')
            else:
                for index, post in enumerate(post_split):
                    if response_list[index]:
                        post.status = Post.IS_DELETED
                        post.save()
            call_method_list[:] = []

        posts_queryset.update(status=Post.IS_DELETED)
        return True
コード例 #8
0
ファイル: views.py プロジェクト: chhantyal/exchange
 def form_valid(self, form):
     context = self.get_context_data()
     date = form.cleaned_data['date']
     context['rate_asked'] = get_object_or_none(Exchange, exchange_date=date)
     return super(ExchangeFormView, self).ajax_render_to_response(context)
コード例 #9
0
ファイル: views.py プロジェクト: chhantyal/referly
 def setup(self, *args, **kwargs):
     super(LandingView, self).setup(*args, **kwargs)
     self.referral_id = self.request.GET.get('link')
     self.referral_object = get_object_or_none(Referral, slug=self.referral_id)
コード例 #10
0
    async def bulk_delete_video(
            self, task_message: BulkDeleteVideoTaskMessage) -> bool:
        user = get_object_or_none(User, pk=task_message.user_id)
        if not user:
            logger.error('User not found {}'.format(task_message.user_id))
            return False

        social_uid, access_token = self._get_vk_credentials(user)
        videos_queryset = Video.objects.filter(pk__in=task_message.video_ids)
        video_list = list(videos_queryset)
        call_method_list = []

        video_splits = split_list(video_list, 25)

        for video_split in video_splits:
            for video in video_split:
                args = {
                    VK_MESSAGE_KEY.OWNER_ID: video.owner,
                    VK_MESSAGE_KEY.VIDEO_ID: video.vid
                }
                call = ExecuteMethod.construct(ExecuteMethod.VIDEO_ENTITY,
                                               ExecuteMethod.DELETE_METHOD,
                                               json.dumps(args))
                call_method_list.append(call)

            method = ExecuteMethod(
                priority=task_message.priority,
                access_token=access_token,
                code=ExecuteMethod.construct_code(call_method_list))

            response_dict = await method.execute()

            if not response_dict:
                error = DefaultError(error_key=ErrorCode.RESPONSE_IS_EMPTY_KEY,
                                     text=ErrorCode.RESPONSE_IS_EMPTY_TEXT)
                for video in video_list:
                    video.vk_response = error.to_json()
                    video.status = Video.DELETE_FAIL
                    video.save()
                return False

            if VK_MESSAGE_KEY.ERROR in response_dict:
                error_dict = response_dict.get(VK_MESSAGE_KEY.ERROR)
                error_msg = DefaultError.get_error_from_response(
                    error_dict=error_dict, error_key=VK_MESSAGE_KEY.ERROR_CODE)

                sentry_logger.warning(msg="Error while deleting videos",
                                      extra={
                                          'error': response_dict,
                                          'error_msg': error_msg,
                                          'user_id': user.pk,
                                          'username': user.get_full_name()
                                      })

                for video in video_list:
                    video.vk_response = error_msg
                    video.status = Video.DELETE_FAIL
                    video.save()

                return False

            response_list = response_dict.get(VK_MESSAGE_KEY.RESPONSE)
            if VK_MESSAGE_KEY.EXECUTE_ERRORS in response_dict:
                error_list = response_dict.get(VK_MESSAGE_KEY.EXECUTE_ERRORS)
                false_response_videos = []

                # порядок постов в сплите совпадает с порядком постов в ответе
                for index, video in enumerate(video_split):
                    if not response_list[index]:
                        false_response_videos.append(video)

                if false_response_videos:
                    for index, video in enumerate(false_response_videos):
                        concrete_error = error_list[index]
                        concrete_error_msg = DefaultError.get_error_from_response(
                            error_dict=concrete_error,
                            error_key=VK_MESSAGE_KEY.ERROR_MSG)

                        # error code 7, Access denied распознаем, как удаленные
                        error_message = concrete_error.get(
                            VK_MESSAGE_KEY.ERROR_MSG)
                        if error_message == ErrorCode.ACCESS_DENIED_KEY:
                            video.status = Video.IS_DELETED
                        else:
                            video.status = Video.DELETE_FAIL

                        video.vk_response = concrete_error_msg

                        video.save()
                        self.log_to_sentry(video,
                                           concrete_error_msg,
                                           level='warning')
            else:
                for index, video in enumerate(video_split):
                    if response_list[index]:
                        video.status = Video.IS_DELETED
                        video.save()
            call_method_list[:] = []

        videos_queryset.update(status=Video.IS_DELETED)
        return True