Procházet zdrojové kódy

add/update/delete keywords

David před 9 roky
rodič
revize
4955d50092
2 změnil soubory, kde provedl 55 přidání a 10 odebrání
  1. 37 2
      db.py
  2. 18 8
      web.py

+ 37 - 2
db.py

@@ -163,12 +163,47 @@ class db():
         return [k["keyword"] for k in kw.find({})]
 
     def get_keywords(self, category):
-        kw = self.client[self.DB]["keywords"]  # FIXME, split on "|" or regex
+        kw = self.client[self.DB]["keywords"]
         ret = [{"weight": k["weight"],
                 "kw": k["keyword"],
-                "pattern": self.to_regex(k["keyword"].split("|"))} for k in kw.find({})]  # FIXME, categories
+                "pattern": self.to_regex(k["keyword"].split("|"))} for k in kw.find({})]
+        # FIXME, categories
         return ret
 
+    def add_keyword(self, kw):
+        if 'keyword' not in kw or 'weight' not in kw:
+            return False
+
+        kw["pattern"] = self.to_regex(kw["keyword"].split("|"))
+        kwdb = self.client[self.DB]["keywords"]
+        try:
+            kwdb.insert_one(kw)
+            return True
+        except errors.DuplicateKeyError:
+            print("Dup KW")
+            return False
+
+    def update_keyword(self, kw):
+        if 'keyword' not in kw or 'weight' not in kw:
+            return False
+
+        kw["pattern"] = self.to_regex(kw["keyword"].split("|"))
+        kwdb = self.client[self.DB]["keywords"]
+        try:
+            kwdb.update({'keyword': kw['keyword']}, {'$set': kw})
+            return True
+        except Exception:
+            print("Dup KW")
+            return False
+
+    def delete_keyword(self, kw):
+        kwdb = self.client[self.DB]["keywords"]
+        try:
+            kwdb.remove({'keyword': kw})
+            return True
+        except Exception:
+            return False
+
     def add_source(self, url, rss, selector, name, category):
         self.c_sources.insert({"link": url,
                                "rss": rss,

+ 18 - 8
web.py

@@ -2,7 +2,6 @@
 
 from flask import Flask, abort, jsonify, request
 from db import db
-import json
 from linklist import LinkList
 
 app = Flask(__name__)
@@ -12,11 +11,6 @@ d = db()
 BASEPATH = "/pymnts"
 
 
-@app.route(BASEPATH + '/')
-def index():
-    return "Hello, World!"
-
-
 @app.route(BASEPATH + '/source/add/', methods=['POST'])
 def add_source():
     selector = None
@@ -61,6 +55,20 @@ def get_keywords():
     return jsonify({'keywords': d.get_keywords_list()})  # limit
 
 
+@app.route(BASEPATH + '/keywords/', methods=['POST'])
+@app.route(BASEPATH + '/keywords',  methods=['POST'])
+def update_keywords(kw, _type):
+    if _type == 'ADD':
+        res = db.add_keyword(kw)
+        return jsonify({})
+    elif _type == 'DEL':
+        res = db.delete_keyword(kw)
+        return jsonify({'keywords': d.get_keywords_list()})
+    elif _type == 'UPD':
+        res = db.update_keyword(kw)
+        return jsonify({'keywords': d.get_keywords_list()})
+
+
 @app.route(BASEPATH + '/articles/', methods=['GET'])
 @app.route(BASEPATH + '/articles', methods=['GET'])
 def get_articles():
@@ -85,7 +93,8 @@ def get_article(art_id):
 @app.route(BASEPATH + '/sources/', methods=['GET'])
 @app.route(BASEPATH + '/sources', methods=['GET'])
 def get_sources():
-    return jsonify({'sources': sorted(d.sources(), key=lambda k: k['name'].lower())})
+    s = sorted(d.sources(), key=lambda k: k['name'].lower())
+    return jsonify({'sources': s})
 
 
 @app.route(BASEPATH + '/sources/<string:source_id>', methods=['GET'])
@@ -98,7 +107,7 @@ def get_source(source_id):
 
 @app.route(BASEPATH + '/add_source', methods=['POST'])
 def create_task():
-    if not request.json or not 'title' in request.json:
+    if not request.json or 'title' not in request.json:
         abort(400)
     task = {
         'id': tasks[-1]['id'] + 1,
@@ -109,5 +118,6 @@ def create_task():
     tasks.append(task)
     return jsonify({'task': task}), 201
 
+
 if __name__ == '__main__':
     app.run(host="0.0.0.0", debug=False)