file renaming in provider testing
This commit is contained in:
@ -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()
|
||||||
|
@ -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')
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user