Пример #1
0
def upload_files(request):

    files_data      = []
    files_metadata  = []

    if request.method == 'POST':

        path2save = os.path.join(settings.MEDIA_ROOT, 'apps',request.POST['app_id'])

        for key in request.FILES:
            myfile = request.FILES[key]
            name   = "".join([ (c if c.isalnum() or c=='.' else '') for c in myfile.name])
            for c in r' []/\;,><&*:%=+@!#^()|?^': name = name.replace(c,'')
            
            fs          = FileSystemStorage(location=path2save, base_url=settings.MEDIA_URL+'apps/'+request.POST['app_id']+'/')
            filename    = fs.save(name, myfile)
            url         = fs.url(filename)

            files_data.append(url)
            files_metadata.append({
                'date':fs.get_created_time(filename).strftime("%Y-%m-%d %H:%M:%S"),
                'extension':os.path.splitext(filename)[1],
                'file':url,
                'name':myfile.name,
                'old_name':myfile.name,
                'replaced':False,
                'size':fs.size(filename),
                'size2':fs.size(filename),
                'type':[]
            })

    data = {'files':files_data, 'metas':files_metadata  }
    return HttpResponse(simplejson.dumps(data,bigint_as_string=True ), "application/json")
Пример #2
0
def get_deploy_packages_name():
    fs = FileSystemStorage()
    directories, files = fs.listdir(settings.MEDIA_ROOT)
    dir_creation_time = [(fs.get_created_time(directory), directory)
                         for directory in directories]
    dir_creation_time.sort(key=lambda tup: tup[0], reverse=True)
    uploaded_package = [d[1] for d in dir_creation_time]
    return uploaded_package
Пример #3
0
    def post(self, request, pk, access_key, filename):
        image = request.FILES.get('image', default=None)

        if image is None:
            return JsonResponse(
                {
                    "image":
                    "This field is required with attached content be "
                    "image files"
                },
                status=400)
        extension = os.path.splitext(image.name)[1].lower()
        if extension not in EXTENSION:
            return JsonResponse(
                {
                    "image": "Image format is not supported",
                    "supported_format": EXTENSION
                },
                status=400)

        old_image_url = "{}/{}/{}".format(settings.IMAGE_ROOT, access_key.int,
                                          filename)
        os.remove(old_image_url)

        if image is None:
            return JsonResponse(
                {
                    "image":
                    "This field is required with attached content be "
                    "image files"
                },
                status=400)
        image_name = "{}_{}{}".format(pk, uuid.uuid4().hex, extension)
        image_path = "{}/{}/{}".format(settings.IMAGE_ROOT, access_key.int,
                                       image_name)

        pil_image_size = save_image(image, image_path, extension)

        fs = FileSystemStorage()
        return JsonResponse(
            {
                "image_id":
                pk,
                "url":
                request.build_absolute_uri("../{}/?api_key={}".format(
                    pk, access_key.hex)),
                "image_link":
                request.build_absolute_uri("//{}{}/{}".format(
                    settings.STATIC_URL, access_key.int, image_name)),
                "size":
                pil_image_size,
                "created_time":
                fs.get_created_time(image_path),
            },
            status=200)
Пример #4
0
    def getModelInfo(self):
        """Navigate Diagram"""
        session = self.client_session
        if not session is None:
            modelInfo = session.modelInfo

            storage = FileSystemStorage()
            file_path = join(settings.MEDIA_ROOT, "models", modelInfo.uri)
            file_size = storage.size(file_path)
            if file_size > 1e+6:
                file_size = f"{round(file_size / 1024 / 1024, 2)} MB"
            else:
                if file_size > 1e+3:
                    file_size = f"{round(file_size / 1024, 2)} kB"
                else:
                    file_size = f"{file_size} B"
            created_time = storage.get_created_time(file_path)
            modified_time = storage.get_modified_time(file_path)

            modelInfo.uri
            res = [
                {
                    "Key": "modelinfo_model_id",
                    "Value": modelInfo.modelId
                },
                {
                    "Key": "modelinfo_model_name",
                    "Value": modelInfo.name
                },
                {
                    "Key": "modelinfo_model_file",
                    "Value": modelInfo.uri
                },
                {
                    "Key": "modelinfo_file_size",
                    "Value": file_size
                },
                {
                    "Key": "modelinfo_created_date",
                    "Value": f"{created_time.strftime('%Y-%m-%d %H:%M')} hs."
                },
                {
                    "Key": "modelinfo_updated_date",
                    "Value": f"{modified_time.strftime('%Y-%m-%d %H:%M')} hs."
                },
            ]
            return res
        else:
            raise exceptions.NotAcceptable("Can't find session")
Пример #5
0
    def get(self, request, pk, access_key, filename):
        uploaded_image_url = "{}/{}/{}".format(settings.IMAGE_ROOT,
                                               access_key.int, filename)

        with Image.open(uploaded_image_url) as pil_image:
            pil_image_size = pil_image.size

        fs = FileSystemStorage()
        return JsonResponse(
            {
                "image_id":
                pk,
                "url":
                request.build_absolute_uri(),
                "image_link":
                request.build_absolute_uri("//{}{}/{}".format(
                    settings.STATIC_URL, access_key.int, filename)),
                "size":
                pil_image_size,
                "created_time":
                fs.get_created_time(uploaded_image_url),
            },
            status=200)
Пример #6
0
def explore(request, f_path=''):
    '''
    View that returns the information of the current directory in the filesystem.
    :param request: request information.
    :param f_path: relative filepath from the URL.
    :return: an array of JSON objects that represent the characteristics of the files/directories in the current path.
    '''
    f_path = f_path.split(
        '/')  # splitting just in case the OS doesn't use unix
    current_folder_path = path.join(settings.MEDIA_ROOT, *f_path)

    # open the current folder using Django specific classes.
    current_folder = FileSystemStorage(location=current_folder_path,
                                       file_permissions_mode=0o644,
                                       directory_permissions_mode=0o644)

    # current_folder_info: [[folder1, folder2, ...], [file1, file2, ...]]
    current_folder_info = [[], []]
    try:
        current_folder_info = current_folder.listdir(path='.')
    except NotADirectoryError:
        raise Http404('Not a Directory')

    # store data of present folder
    folder_data = []
    for f_name in current_folder_info[0]:  # reading folders
        folder_data.append({
            'name':
            f_name,
            'is_folder':
            True,
            'created':
            current_folder.get_created_time(name=f_name),
            'modified':
            current_folder.get_modified_time(name=f_name),
            'accessed':
            current_folder.get_accessed_time(name=f_name),
        })

    # update file's information
    for f_name in current_folder_info[1]:  # reading files
        file_path = path.join(current_folder_path, f_name)

        ## Fetch tags
        try:
            obj = Dataset.objects.get(path=file_path)
            obj_tags = DatasetTag.objects.filter(dataset_id=obj.id)
            tags = [Tag.objects.get(id=el.tag_id).tag_name for el in obj_tags]
        except ObjectDoesNotExist:
            tags = []

        # get file type using specific library
        type_file = magic_unix.from_file(filename=file_path)
        type_file_mime = magic_unix.from_file(filename=file_path, mime=True)
        folder_data.append({
            'name':
            f_name,
            'is_folder':
            False,
            'created':
            current_folder.get_created_time(name=f_name),
            'modified':
            current_folder.get_modified_time(name=f_name),
            'accessed':
            current_folder.get_accessed_time(name=f_name),
            'size':
            current_folder.size(name=f_name),
            'type':
            type_file,
            'type/mime':
            type_file_mime,
            'tags':
            tags
        })

    return JsonResponse({'response': folder_data}, safe=True)