From e09b4d30745f97da83b2ce4a30e0eb3f1ba5e4a8 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Fri, 30 Mar 2018 23:37:31 +0200 Subject: [PATCH] sync working --- cookbook/helper/dropbox.py | 27 +++++++++++++++++++++------ cookbook/models.py | 15 ++++++++++++++- cookbook/templates/index.html | 2 +- cookbook/urls.py | 4 +++- cookbook/views/api.py | 6 ++++++ 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/cookbook/helper/dropbox.py b/cookbook/helper/dropbox.py index 57a176c3..df68b1d5 100644 --- a/cookbook/helper/dropbox.py +++ b/cookbook/helper/dropbox.py @@ -3,10 +3,17 @@ import requests import json from django.conf import settings -from cookbook.models import Recipe, Category +from cookbook.models import Recipe, Monitor, NewRecipe, ImportLog -def import_all(base_path): +def sync_all(): + monitors = Monitor.objects.all() + + for monitor in monitors: + import_all(monitor) + + +def import_all(monitor): url = "https://api.dropboxapi.com/2/files/list_folder" headers = { @@ -15,20 +22,28 @@ def import_all(base_path): } data = { - "path": base_path + "path": monitor.path } r = requests.post(url, headers=headers, data=json.dumps(data)) try: recipes = r.json() except ValueError: + log_entry = ImportLog(status='ERROR', msg=str(r), monitor=monitor) + log_entry.save() return r + import_count = 0 for recipe in recipes['entries']: - name = os.path.splitext(recipe['name'])[0] - insert = Recipe(name=name, path=recipe['path_lower'], category=Category.objects.get(id=0)) - insert.save() + path = recipe['path_lower'] + if not Recipe.objects.filter(path=path).exists() and not NewRecipe.objects.filter(path=path).exists(): + name = os.path.splitext(recipe['name'])[0] + new_recipe = NewRecipe(name=name, path=path) + new_recipe.save() + import_count += 1 + log_entry = ImportLog(status='SUCCESS', msg='Imported ' + str(import_count) + ' recipes', monitor=monitor) + log_entry.save() return True diff --git a/cookbook/models.py b/cookbook/models.py index 19b7c215..d8743a07 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -24,7 +24,7 @@ class Category(models.Model): class Recipe(models.Model): - name = models.CharField(max_length=64) + name = models.CharField(max_length=128) path = models.CharField(max_length=512, default="") link = models.CharField(max_length=512, default="") category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT, default=0) @@ -41,8 +41,21 @@ class Recipe(models.Model): return ', '.join([x.name for x in self.keywords.all()]) +class NewRecipe(models.Model): + name = models.CharField(max_length=128) + path = models.CharField(max_length=512, default="") + created_at = models.DateTimeField(auto_now_add=True) + + class Monitor(models.Model): path = models.CharField(max_length=512, default="") last_checked = models.DateTimeField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + + +class ImportLog(models.Model): + monitor = models.ForeignKey(Monitor, on_delete=models.CASCADE) + status = models.CharField(max_length=32) + msg = models.TextField(default="") + created_at = models.DateTimeField(auto_now_add=True) diff --git a/cookbook/templates/index.html b/cookbook/templates/index.html index ccd8db4e..4c14cc60 100644 --- a/cookbook/templates/index.html +++ b/cookbook/templates/index.html @@ -81,7 +81,7 @@ var link = $('#a_recipe_open'); link.hide(); - url = "{% url 'get_file_link' recipe_id=12345 %}".replace(/12345/, id); + url = "{% url 'api_get_file_link' recipe_id=12345 %}".replace(/12345/, id); link.text("{% trans 'Open Recipe' %}"); $('#modal_recipe').modal('show'); diff --git a/cookbook/urls.py b/cookbook/urls.py index b5c0b1d3..71670d5c 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -24,6 +24,8 @@ urlpatterns = [ path('batch/import', batch.batch_import, name='batch_import'), path('batch/category', batch.batch_edit, name='batch_edit'), - path('api/get_file_link//', api.get_file_link, name='get_file_link'), + path('api/get_file_link//', api.get_file_link, name='api_get_file_link'), + path('api/sync_all/', api.dropbox_sync, name='api_dropbox_sync'), + ] diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 3447d977..3cff7cea 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -15,3 +15,9 @@ def get_file_link(request, recipe_id): recipe.save() return HttpResponse(recipe.link) + + +@login_required +def dropbox_sync(request): + dropbox.sync_all() + return HttpResponse("Import Successful")