Working server side task managing for submitting categories, fixed cache issue
authordurandn
Thu, 09 Apr 2015 20:59:57 +0200
changeset 73 b3c1c89fcf97
parent 72 75170fe4d56b
child 74 4cac47578d29
Working server side task managing for submitting categories, fixed cache issue
src/catedit/__init__.py
src/catedit/resources.py
src/catedit/tasks.py
--- a/src/catedit/__init__.py	Thu Apr 09 17:39:27 2015 +0200
+++ b/src/catedit/__init__.py	Thu Apr 09 20:59:57 2015 +0200
@@ -9,7 +9,7 @@
 from catedit.version import CURRENT_VERSION
 from requests import request
 
-from flask import Flask, session, request, url_for
+from flask import has_request_context, Flask, session, request, url_for, g
 from flask_wtf.csrf import CsrfProtect
 from flask.ext.github import GitHub
 from flask.ext.cache import Cache
@@ -52,8 +52,6 @@
 )
 github = GitHub(app)
 
-app.config['CELERY_BROKER_URL'] = 'sqla+sqlite:///celerydb.sqlite'
-
 celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
 celery.conf.update(app.config)
 
@@ -63,9 +61,11 @@
         Utility function for github-flask module to get user token when
         making authenticated requests
     """
-    if session.get("user_logged", None):
+    if (has_request_context() and session.get("user_logged", None)):
         # logger.debug("I made an authentified request")
         return session["user_code"]
+    else:
+        return g.get("user_code")
 
 def log_api_rate(r, *args, **kwargs):
     """
--- a/src/catedit/resources.py	Thu Apr 09 17:39:27 2015 +0200
+++ b/src/catedit/resources.py	Thu Apr 09 20:59:57 2015 +0200
@@ -98,17 +98,18 @@
         args = cat_parser.parse_args()
         if cat_id is None:
             if cat_manager_instance.persistence.session_compliant is True:
-                session["tasks"][repository].append(
-                    submit_changes.delay(
-                        deleted_cat_dict=session.get(
+                task=submit_changes.delay(
+                        deleted_categories=session.get(
                             "deleted_categories", {}
                         ).get(repository, {}),
-                        modified_cat_dict=session.get(
+                        modified_categories=session.get(
                             "modified_categories", {}
                         ).get(repository, {}),
-                        message=args["commit_message"]
+                        message=args["commit_message"],
+                        repository=repository,
+                        token=session["user_code"]
                     )
-                )
+                session["tasks"][repository].append(task.id)
                 session["deleted_categories"][repository] = {}
                 session["modified_categories"][repository] = {}
                 cache.clear()
--- a/src/catedit/tasks.py	Thu Apr 09 17:39:27 2015 +0200
+++ b/src/catedit/tasks.py	Thu Apr 09 20:59:57 2015 +0200
@@ -1,15 +1,23 @@
-from catedit import app, celery
+from catedit import app, celery, cache
+from catedit.models import CategoryManager
+import catedit.persistence
+import logging
+from flask import g, url_for
+import requests
+
+logger = logging.getLogger(__name__)
 
 @celery.task
-def submit_changes(self, modified_categories, deleted_categories, message):
+def submit_changes(modified_categories, deleted_categories, message, repository, token):
     with app.app_context():
+        g.user_code = token
         cat_manager_instance = CategoryManager(
             getattr(
                 catedit.persistence,
                 app.config["PERSISTENCE_CONFIG"]["METHOD"]
             )(repository=repository),
         )
-         
+        
         if cat_manager_instance.persistence.session_compliant is True:
             logger.debug(
                 "Submitting - deleted categories are:"
@@ -24,4 +32,9 @@
                 deleted_cat_dict=deleted_categories,
                 modified_cat_dict=modified_categories,
                 message=message
-            )
\ No newline at end of file
+            )
+            requests.get(url_for("cache_clear_endpoint"))
+            
+@app.route('/cache-clear-after-task', methods=["GET"]) 
+def cache_clear_endpoint():
+    cache.clear()
\ No newline at end of file