file renaming in provider testing

This commit is contained in:
vabene1111
2019-12-23 23:22:00 +01:00
parent a5cc38ecbd
commit c985ada3d0
3 changed files with 38 additions and 2 deletions

View File

@ -34,7 +34,8 @@ class Dropbox(Provider):
import_count = 0 import_count = 0
for recipe in recipes['entries']: # TODO check if has_more is set and import that as well for recipe in recipes['entries']: # TODO check if has_more is set and import that as well
path = recipe['path_lower'] path = recipe['path_lower']
if not Recipe.objects.filter(file_path=path).exists() and not RecipeImport.objects.filter(file_path=path).exists(): if not Recipe.objects.filter(file_path=path).exists() and not RecipeImport.objects.filter(
file_path=path).exists():
name = os.path.splitext(recipe['name'])[0] name = os.path.splitext(recipe['name'])[0]
new_recipe = RecipeImport(name=name, file_path=path, storage=monitor.storage, file_uid=recipe['id']) new_recipe = RecipeImport(name=name, file_path=path, storage=monitor.storage, file_uid=recipe['id'])
new_recipe.save() new_recipe.save()
@ -75,7 +76,7 @@ class Dropbox(Provider):
} }
data = { data = {
"path": recipe.file_uid "path": recipe.file_path,
} }
r = requests.post(url, headers=headers, data=json.dumps(data)) r = requests.post(url, headers=headers, data=json.dumps(data))
@ -86,3 +87,21 @@ class Dropbox(Provider):
response = Dropbox.create_share_link(recipe) response = Dropbox.create_share_link(recipe)
return response['url'] return response['url']
@staticmethod
def rename_file(recipe, new_name):
url = "https://api.dropboxapi.com/2/files/move_v2"
headers = {
"Authorization": "Bearer " + recipe.storage.token,
"Content-Type": "application/json"
}
data = {
"from_path": recipe.file_path,
"to_path": os.path.dirname(recipe.file_path) + '/' + new_name + os.path.splitext(recipe.file_path)[1]
}
r = requests.post(url, headers=headers, data=json.dumps(data))
return r.json()

View File

@ -10,3 +10,11 @@ class Provider:
@staticmethod @staticmethod
def get_share_link(recipe): def get_share_link(recipe):
raise Exception('Method not implemented in storage provider') raise Exception('Method not implemented in storage provider')
@staticmethod
def rename_file(recipe, new_name):
raise Exception('Method not implemented in storage provider')
@staticmethod
def delete_file(recipe):
raise Exception('Method not implemented in storage provider')

View File

@ -11,6 +11,7 @@ from django.views.generic import UpdateView, DeleteView
from cookbook.forms import ExternalRecipeForm, KeywordForm, StorageForm, SyncForm, InternalRecipeForm, CommentForm from cookbook.forms import ExternalRecipeForm, KeywordForm, StorageForm, SyncForm, InternalRecipeForm, CommentForm
from cookbook.models import Recipe, Sync, Keyword, RecipeImport, Storage, Comment, RecipeIngredients from cookbook.models import Recipe, Sync, Keyword, RecipeImport, Storage, Comment, RecipeIngredients
from cookbook.provider.dropbox import Dropbox
@login_required @login_required
@ -191,6 +192,14 @@ class RecipeUpdate(LoginRequiredMixin, UpdateView):
template_name = "generic/edit_template.html" template_name = "generic/edit_template.html"
def form_valid(self, form): def form_valid(self, form):
self.object = form.save(commit=False)
old_recipe = Recipe.objects.get(pk=self.object.pk)
if not old_recipe.name == self.object.name:
if self.object.storage.method == Storage.DROPBOX:
Dropbox.rename_file(old_recipe, self.object.name) # TODO central location to handle storage type switches
self.object.file_path = os.path.dirname(self.object.file_path) + '/' + self.object.name + os.path.splitext(self.object.file_path)[1]
# TODO add nextcloud
messages.add_message(self.request, messages.SUCCESS, _('Changes saved!')) messages.add_message(self.request, messages.SUCCESS, _('Changes saved!'))
return super(RecipeUpdate, self).form_valid(form) return super(RecipeUpdate, self).form_valid(form)