コード例 #1
0
ファイル: views.py プロジェクト: taikoa/wevolver-server
    def post(self, request):
        file_uploaded = request.FILES['file']
        project_part_id = request.POST['project_part']

        if not WALL_VAL.match(file_uploaded.name):
            response_data = {
                'status': 'ko',
                'message': 'The name of the file is not correct'
            }
        elif file_uploaded.content_type not in settings.SUPPORTED_FILES:
            response_data = {
                'status': 'ko',
                'message': 'You cannot upload this kind of file'
            }
        elif file_uploaded.size * 1.0 / 1048576 > settings.FILE_SIZE:
            response_data = {
                'status':
                'ko',
                'message':
                'You cannot upload a file bigger than %d MB' %
                settings.FILE_SIZE
            }
        else:
            project_part = ProjectPart.objects.get(pk=project_part_id)
            file_obj = File(created_user=request.user,
                            original_name=file_uploaded.name,
                            system_name=file_uploaded.name,
                            project_part=project_part)
            if os.path.exists(file_obj.get_file_path(True)):
                file_obj.set_original_name()
            with open(file_obj.get_file_path(True), 'wb+') as destination:
                for chunk in file_uploaded.chunks():
                    destination.write(chunk)

            if (file_obj.is_image()):
                file_obj.generate_thumbnail()
            file_obj.save()
            Activity.objects.set_activity('add', file_obj)

            if request.user.profile.drive_token and project_part.project.drive_id:
                drive_util = DriveUtil(request.user.profile.drive_token)
                if not project_part.drive_id:
                    project_part_folder = drive_util.get_project_part_folder(
                        request.user.profile.drive_folder, project_part)
                else:
                    project_part_folder = project_part.drive_id
                drive_util.insert_file(file_uploaded.name, 'description',
                                       project_part_folder,
                                       file_uploaded.content_type,
                                       file_obj.get_file_path(True))

            response_data = {'status': 'ok'}
        return HttpResponse(json.dumps(response_data),
                            mimetype='application/json')
コード例 #2
0
ファイル: views.py プロジェクト: bramgeenen/wevolver-server
    def post(self, request):
        data = json.loads(request.raw_post_data)
        file_type = data["filetype"]
        project_part = get_object_or_404(ProjectPart, pk=data["project_part"])

        drive_util = DriveUtil(request.user.profile.drive_token)
        if not project_part.drive_id:
            project_part_folder = drive_util.get_project_part_folder(request.user.profile.drive_folder, project_part)
        else:
            project_part_folder = project_part.drive_id
        drive_file = drive_util.insert_drive_file("Untitled", file_type, parent_id=project_part_folder)
        return HttpResponse(json.dumps(drive_file), mimetype="application/json")
コード例 #3
0
ファイル: views.py プロジェクト: taikoa/wevolver-server
    def get(self, request):
        project_part = get_object_or_404(ProjectPart,
                                         pk=request.GET.get('project_part'))
        files = []
        project_part_folder = project_part.drive_id or None

        if request.user.is_authenticated():
            try:
                userproject = request.user.userproject_set.get(
                    project=project_part.project)
            except UserProject.DoesNotExist:
                userproject = None

            if not userproject:
                drive_token = project_part.created_user.profile.drive_token
            elif request.user.profile.drive_token and userproject.drive_auth:
                drive_token = request.user.profile.drive_token
            elif project_part.drive_id and not request.session.get(
                    'drive_project_part', None):
                drive_token = project_part.created_user.profile.drive_token
            elif request.session.get('drive_project_part', None):
                drive_token = request.user.profile.drive_token
                connect_project_to_drive(request, project_part, userproject,
                                         drive_token)
                request.session['drive_project_part'] = None
            else:
                response_data = {'status': 'error'}
                return HttpResponse(json.dumps(response_data),
                                    mimetype='application/json')
        else:
            drive_token = project_part.created_user.profile.drive_token

        try:
            drive_util = DriveUtil(drive_token)
        except GetCredentialsException:
            logging.error('Credentials exception for %s in part %s' %
                          (drive_token, project_part.id))
            response_data = {
                'status':
                'error',
                'msg':
                'Error with drive credentials, contact with the administrator of this project'
            }
            return HttpResponse(json.dumps(response_data),
                                mimetype='application/json')

        if project_part_folder:
            files = drive_util.get_files("'%s' in parents" %
                                         project_part_folder)

        return HttpResponse(json.dumps(files), mimetype='application/json')
コード例 #4
0
ファイル: views.py プロジェクト: bramgeenen/wevolver-server
    def post(self, request):
        file_uploaded = request.FILES["file"]
        project_part_id = request.POST["project_part"]

        if not WALL_VAL.match(file_uploaded.name):
            response_data = {"status": "ko", "message": "The name of the file is not correct"}
        elif file_uploaded.content_type not in settings.SUPPORTED_FILES:
            response_data = {"status": "ko", "message": "You cannot upload this kind of file"}
        elif file_uploaded.size * 1.0 / 1048576 > settings.FILE_SIZE:
            response_data = {
                "status": "ko",
                "message": "You cannot upload a file bigger than %d MB" % settings.FILE_SIZE,
            }
        else:
            project_part = ProjectPart.objects.get(pk=project_part_id)
            file_obj = File(
                created_user=request.user,
                original_name=file_uploaded.name,
                system_name=file_uploaded.name,
                project_part=project_part,
            )
            if os.path.exists(file_obj.get_file_path(True)):
                file_obj.set_original_name()
            with open(file_obj.get_file_path(True), "wb+") as destination:
                for chunk in file_uploaded.chunks():
                    destination.write(chunk)

            if file_obj.is_image():
                file_obj.generate_thumbnail()
            file_obj.save()
            Activity.objects.set_activity("add", file_obj)

            if request.user.profile.drive_token and project_part.project.drive_id:
                drive_util = DriveUtil(request.user.profile.drive_token)
                if not project_part.drive_id:
                    project_part_folder = drive_util.get_project_part_folder(
                        request.user.profile.drive_folder, project_part
                    )
                else:
                    project_part_folder = project_part.drive_id
                drive_util.insert_file(
                    file_uploaded.name,
                    "description",
                    project_part_folder,
                    file_uploaded.content_type,
                    file_obj.get_file_path(True),
                )

            response_data = {"status": "ok"}
        return HttpResponse(json.dumps(response_data), mimetype="application/json")
コード例 #5
0
ファイル: views.py プロジェクト: taikoa/wevolver-server
    def post(self, request):
        data = json.loads(request.raw_post_data)
        file_type = data['filetype']
        project_part = get_object_or_404(ProjectPart, pk=data['project_part'])

        drive_util = DriveUtil(request.user.profile.drive_token)
        if not project_part.drive_id:
            project_part_folder = drive_util.get_project_part_folder(
                request.user.profile.drive_folder, project_part)
        else:
            project_part_folder = project_part.drive_id
        drive_file = drive_util.insert_drive_file(
            'Untitled', file_type, parent_id=project_part_folder)
        return HttpResponse(json.dumps(drive_file),
                            mimetype='application/json')
コード例 #6
0
ファイル: views.py プロジェクト: bramgeenen/wevolver-server
    def get(self, request):
        error = request.GET.get("error", "")
        if not error:
            credentials = get_credentials(request.GET.get("code"), 1, request.user.profile)
            request.user.profile.drive_token = credentials.to_json()
            drive_util = DriveUtil(request.user.profile.drive_token)
            if not request.user.profile.drive_folder:
                folder = drive_util.insert_folder("Wevolver")
                request.user.profile.drive_folder = folder.get("id")

            request.user.profile.save()
        else:
            request.session["drive_project_part"] = None
            request.GET.get("error_description", "")
            return redirect("/#/profile?error=invalid_user")
        return redirect("/#/profile")
コード例 #7
0
ファイル: views.py プロジェクト: taikoa/wevolver-server
    def get(self, request):
        error = request.GET.get('error', '')
        if not error:
            credentials = get_credentials(request.GET.get('code'), 1,
                                          request.user.profile)
            request.user.profile.drive_token = credentials.to_json()
            drive_util = DriveUtil(request.user.profile.drive_token)
            if not request.user.profile.drive_folder:
                folder = drive_util.insert_folder('Wevolver')
                request.user.profile.drive_folder = folder.get('id')

            request.user.profile.save()
        else:
            request.session['drive_project_part'] = None
            request.GET.get('error_description', '')
            return redirect('/#/profile?error=invalid_user')
        return redirect('/#/profile')
コード例 #8
0
ファイル: api.py プロジェクト: taikoa/wevolver-server
 def dehydrate_has_viewed(self, bundle):
     if not bundle.request.user.is_authenticated():
         return False
     user_token = bundle.request.user.profile.drive_token
     if bundle.obj.drive_id and user_token:
         f = DriveUtil(user_token).get_file(bundle.obj.drive_id)
         if f:
             return f['labels']['viewed']
     return False
コード例 #9
0
ファイル: views.py プロジェクト: bramgeenen/wevolver-server
    def get(self, request):
        project_part = get_object_or_404(ProjectPart, pk=request.GET.get("project_part"))
        files = []
        project_part_folder = project_part.drive_id or None

        if request.user.is_authenticated():
            try:
                userproject = request.user.userproject_set.get(project=project_part.project)
            except UserProject.DoesNotExist:
                userproject = None

            if not userproject:
                drive_token = project_part.created_user.profile.drive_token
            elif request.user.profile.drive_token and userproject.drive_auth:
                drive_token = request.user.profile.drive_token
            elif project_part.drive_id and not request.session.get("drive_project_part", None):
                drive_token = project_part.created_user.profile.drive_token
            elif request.session.get("drive_project_part", None):
                drive_token = request.user.profile.drive_token
                connect_project_to_drive(request, project_part, userproject, drive_token)
                request.session["drive_project_part"] = None
            else:
                response_data = {"status": "error"}
                return HttpResponse(json.dumps(response_data), mimetype="application/json")
        else:
            drive_token = project_part.created_user.profile.drive_token

        try:
            drive_util = DriveUtil(drive_token)
        except GetCredentialsException:
            logging.error("Credentials exception for %s in part %s" % (drive_token, project_part.id))
            response_data = {
                "status": "error",
                "msg": "Error with drive credentials, contact with the administrator of this project",
            }
            return HttpResponse(json.dumps(response_data), mimetype="application/json")

        if project_part_folder:
            files = drive_util.get_files("'%s' in parents" % project_part_folder)

        return HttpResponse(json.dumps(files), mimetype="application/json")
コード例 #10
0
ファイル: views.py プロジェクト: taikoa/wevolver-server
 def delete(self, request, id):
     drive_util = DriveUtil(request.user.profile.drive_token)
     drive_util.delete_file(id)
     return HttpResponse(json.dumps({'status': 'ok'}),
                         mimetype='application/json')
コード例 #11
0
ファイル: views.py プロジェクト: bramgeenen/wevolver-server
 def delete(self, request, id):
     drive_util = DriveUtil(request.user.profile.drive_token)
     drive_util.delete_file(id)
     return HttpResponse(json.dumps({"status": "ok"}), mimetype="application/json")