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)
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
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
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
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