web.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/usr/bin/env python3
  2. from flask import Flask, abort, jsonify, request
  3. from json import loads
  4. from db import db
  5. from linklist import LinkList
  6. app = Flask(__name__)
  7. d = db()
  8. BASEPATH = "/pymnts"
  9. @app.route(BASEPATH + '/source/add/', methods=['POST'])
  10. def add_source():
  11. selector = None
  12. rss = False
  13. json = request.get_json()
  14. if "selector" in json:
  15. selector = json["selector"]
  16. if "rss" in json:
  17. rss = json["rss"]
  18. if "category" not in json:
  19. json["category"] = 1
  20. json["category"] = int(json["category"])
  21. d.add_source(json["source"], rss, selector, json["name"], json["category"])
  22. return jsonify({'ok': "ok"})
  23. @app.route(BASEPATH + '/source/test/', methods=['POST'])
  24. def test_source():
  25. selector = None
  26. rss = False
  27. json = request.get_json()
  28. if "selector" in json and len(json["selector"]) > 0:
  29. selector = json["selector"]
  30. if "rss" in json:
  31. rss = json["rss"]
  32. l = LinkList(json["source"], selector, rss=rss)
  33. return jsonify({'links': l.links})
  34. @app.route(BASEPATH + '/articles/', methods=['POST'])
  35. @app.route(BASEPATH + '/articles', methods=['POST'])
  36. def filter_articles():
  37. return jsonify(d.filter_articles(request.get_json(), limit=15))
  38. @app.route(BASEPATH + '/keywords/', methods=['GET'])
  39. @app.route(BASEPATH + '/keywords', methods=['GET'])
  40. def get_keywords():
  41. return jsonify({'keywords': d.get_keywords_list()}) # limit
  42. @app.route(BASEPATH + '/keywords/', methods=['POST'])
  43. @app.route(BASEPATH + '/keywords', methods=['POST'])
  44. def add__keyword():
  45. json = request.get_json()
  46. if 'kw' not in json or 'weight' not in json:
  47. abort(400)
  48. if not d.add_keyword(json['kw'], json['weight']):
  49. abort(400)
  50. return jsonify({})
  51. @app.route(BASEPATH + '/keywords/', methods=['PUT'])
  52. @app.route(BASEPATH + '/keywords', methods=['PUT'])
  53. def update_keyword():
  54. json = request.get_json()
  55. if 'kw' not in json:
  56. abort(400)
  57. try:
  58. kw = loads(json['kw'])
  59. except Exception as e:
  60. print(json['kw'])
  61. print("cant parse json")
  62. print(e)
  63. abort(400)
  64. print(kw)
  65. if not d.update_keyword(kw):
  66. abort(400)
  67. return jsonify({'keywords': d.get_keywords_list()})
  68. @app.route(BASEPATH + '/keywords/', methods=['DELETE'])
  69. @app.route(BASEPATH + '/keywords', methods=['DELETE'])
  70. def delete_keyword():
  71. json = request.get_json()
  72. if 'kw' not in json:
  73. abort(400)
  74. kw = json['kw']
  75. if not d.delete_keyword(kw):
  76. abort(400)
  77. return jsonify({'keywords': d.get_keywords_list()})
  78. @app.route(BASEPATH + '/articles/', methods=['GET'])
  79. @app.route(BASEPATH + '/articles', methods=['GET'])
  80. def get_articles():
  81. return jsonify(d.filter_articles({}, limit=15))
  82. @app.route(BASEPATH + '/article/delete/<string:art_id>', methods=['GET'])
  83. def delete_article(art_id):
  84. if not d.delete_article(art_id):
  85. abort(401)
  86. return jsonify({'ok': "ok"})
  87. @app.route(BASEPATH + '/article/<string:art_id>', methods=['GET'])
  88. def get_article(art_id):
  89. art = d.article(art_id)
  90. if art is None:
  91. abort(401)
  92. return jsonify({'articles': art})
  93. @app.route(BASEPATH + '/sources/', methods=['GET'])
  94. @app.route(BASEPATH + '/sources', methods=['GET'])
  95. def get_sources():
  96. s = sorted(d.sources(), key=lambda k: k['name'].lower())
  97. return jsonify({'sources': s})
  98. @app.route(BASEPATH + '/sources/<string:source_id>', methods=['GET'])
  99. def get_source(source_id):
  100. source = d.sources(source_id)
  101. if source is None:
  102. abort(401)
  103. return jsonify({'source': source})
  104. @app.route(BASEPATH + '/add_source', methods=['POST'])
  105. def create_task():
  106. if not request.json or 'title' not in request.json:
  107. abort(400)
  108. task = {
  109. 'id': tasks[-1]['id'] + 1,
  110. 'title': request.json['title'],
  111. 'description': request.json.get('description', ""),
  112. 'done': False
  113. }
  114. tasks.append(task)
  115. return jsonify({'task': task}), 201
  116. if __name__ == '__main__':
  117. app.run(host="0.0.0.0", debug=True)
  118. #app.run(host="0.0.0.0", debug=False)