Example #1
0
 def post(self, request, format=None):
     parent = get_object_or_404(Folder, pk=request.data['parent'])
     folder = Folder(name=request.data['name'], parent=parent)
     path = self.getAvailablePath(folder)
     folder.save()
     os.mkdir(path)
     serializer = FolderSerializer(folder, many=False)
     return Response(serializer.data)
Example #2
0
File: helper.py Project: qyb/sohu
def get_or_create_folder_by_name(user_id, name):
    if name:
        folder = get_folder_by_name(user_id, name)
        if folder is None:
            folder = Folder()
            folder.name = name
            folder.save()
    else:
        folder = None
    
    return folder
Example #3
0
def get_or_create_folder_by_name(user_id, name):
    if name:
        folder = get_folder_by_name(user_id, name)
        if folder is None:
            folder = Folder()
            folder.name = name
            folder.save()
    else:
        folder = None

    return folder
Example #4
0
def add_sample_folders():
    path = os.path.join(BASE_DIR, 'folder/files/sample_folders.txt')
    folder_stack = [Folder.objects.get(parent=None)]
    with open(path) as input_file:
        added_folders = 0
        for line in input_file:
            line = line.replace('\n', '')
            name = line.lstrip(' ')
            if name == '':
                continue

            leading_spaces = len(line) - len(name)
            while leading_spaces != len(folder_stack) - 1:
                folder_stack.pop()

            formatted_name = convert_pretty_to_folder_name(name)
            folder = Folder(parent=folder_stack[-1],
                            pretty_name=name,
                            folder_name=formatted_name,
                            created_by=None)
            folder.save()
            folder_stack.append(folder)
            added_folders += 1
Example #5
0
def _create_folders(author, parent, structure, p):
    vars = {'p': p}

    level, separator, rest = structure.partition('|')
    rest = rest.strip()

    # Split the level description into lines, remove trailing and leading
    # whitespaces, and remove empty lines
    lines = filter(None, [x.strip() for x in level.strip().split('\n')])

    # Child format defined in the first line
    # Format: var_name1/var_name2/.../var_nameN
    var_names = [x.strip() for x in lines[0].split('/')]

    # Evaluate variables in specified order, don't shuffle them!
    var_formats = []

    # List of children tuples
    children = []

    # Skip first line!
    for x in lines[1:]:
        left, separator, right = x.partition('=')

        if separator:
            # Variable definition: var_name=this is a example number {x}
            var_formats.append((left, right))
        elif left[0] == '%':
            # Special command
            if left.startswith('%RANGE'):
                # E.g. %RANGE 2012, 1996
                # --> Adds children: 2012, 2011, ..., 1997, 1996
                a, b = [int(x) for x in left[6:].split(',')]
                r = range(a, b + 1) if a <= b else range(a, b - 1, -1)
                children.extend([str(x) for x in r])
            else:
                raise Exception('Nepoznata naredba: ' + left)
        else:
            # Child definition: var_value1/var_value2/.../var_valueN
            children.append(left)

    created = 0
    existing = 0
    for index, x in enumerate(children):
        # Update vars with child var values. (values are stripped!)
        vars.update({k: v.strip() for k, v in zip(var_names, x.split('/'))})

        # Update additional vars
        for var in var_formats:
            # Note we are using same dictionary that is being updated, that's
            # why order matters
            vars[var[0]] = var[1].format(**vars)

        try:
            # Check if folder with the same name, short name and parent exists.
            folder = Folder.objects.get(parent=parent, name=vars['name'],
                    short_name=vars['short'])
            existing += 1
        except:
            # If not, create new folder.
            folder = Folder(author=author, parent=parent, parent_index=index,
                hidden=False, editable=False, name=vars['name'],
                short_name=vars['short'])
            folder.save()
            created += 1

        # Note that the object has to exist to use this!
        set_tags(folder, vars['tags'])
        # TODO: call folder._refresh_cache_tags() on change signal.

        # Call recursion if there is any level left
        if rest:
            # Note that parent changed!
            _c, _e = _create_folders(author, folder, rest, _dict_to_object(vars))
            created += _c
            existing += _e

    return created, existing