Browse Source

fix couchdb credentials and config

pull/1/head
wes 8 years ago
parent
commit
354c5aad74
  1. 10
      requirements.txt
  2. 25
      src/posts.py
  3. 12
      src/scripts/app.tag
  4. 2
      src/scripts/post.tag
  5. 11
      src/website.py

10
requirements.txt

@ -1,7 +1,9 @@
appdirs==1.4.3 appdirs==1.4.3
certifi==2017.7.27.1
cffi==1.9.1 cffi==1.9.1
chardet==3.0.4
click==6.7 click==6.7
CouchDB==1.1 CouchDB==1.0
cryptography==1.7.2 cryptography==1.7.2
dominate==2.3.1 dominate==2.3.1
elasticsearch==5.1.0 elasticsearch==5.1.0
@ -14,7 +16,7 @@ Flask-Login==0.4.0
flask-marshmallow==0.7.0 flask-marshmallow==0.7.0
Flask-WTF==0.14.2 Flask-WTF==0.14.2
greenlet==0.4.12 greenlet==0.4.12
idna==2.2 idna==2.5
itsdangerous==0.24 itsdangerous==0.24
Jinja2==2.9.4 Jinja2==2.9.4
lxml==3.7.2 lxml==3.7.2
@ -30,10 +32,10 @@ PySocks==1.6.6
python-dateutil==2.6.0 python-dateutil==2.6.0
python-memcached==1.58 python-memcached==1.58
pyxdg==0.25 pyxdg==0.25
requests==2.13.0 requests==2.18.3
six==1.10.0 six==1.10.0
stevedore==1.20.0 stevedore==1.20.0
urllib3==1.19.1 urllib3==1.22
uWSGI==2.0.14 uWSGI==2.0.14
virtualenv==15.1.0 virtualenv==15.1.0
virtualenv-clone==0.2.6 virtualenv-clone==0.2.6

25
src/posts.py

@ -7,7 +7,7 @@ from flask import jsonify
from flask_marshmallow import Marshmallow from flask_marshmallow import Marshmallow
class Posts: class Posts:
def __init__(self, host=None, port=None): def __init__(self, user, password, host=None, port=None):
if host is None: if host is None:
host = "localhost" host = "localhost"
if port is None: if port is None:
@ -15,6 +15,10 @@ class Posts:
self.client = couchdb.Server("http://%s:%s" % (host, port)) self.client = couchdb.Server("http://%s:%s" % (host, port))
self.client.credentials = (user, password)
# FIXME check for pooling / concurrency issues
self.db = self.client["blog"] self.db = self.client["blog"]
def savepost(self, title="", content="", author="", category="programming", _id=False): def savepost(self, title="", content="", author="", category="programming", _id=False):
@ -36,14 +40,14 @@ class Posts:
return jsonify(self.db.save(doc)) return jsonify(self.db.save(doc))
def getpost(self, _id, category="programming"): def getpost(self, _id, category="programming"):
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, startkey=[category, _id]) results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, startkey=_id)
return jsonify([result.doc for result in results][0]) return jsonify([result.doc for result in results][0])
def iterpost(self, endkey=False, startkey=False, category="programming"): def iterpost(self, endkey=False, startkey=False, category="programming"):
if startkey and not endkey: if startkey and not endkey:
results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True, startkey=[category, startkey]) results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True, startkey=startkey)
elif endkey and not startkey: elif endkey and not startkey:
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, endkey=[category, endkey]) results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, endkey=endkey)
else: else:
results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True) results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True)
@ -94,3 +98,16 @@ class Posts:
print(e) print(e)
return jsonify(False) return jsonify(False)
def categories(self):
return jsonify(
[
c["key"][1] for c in
self.db.view("blogPosts/categories",
startkey=["category"],
endkey=["category", {}],
inclusive_end=False,
group_level=2,
group=True)
]
)

12
src/scripts/app.tag

@ -13,7 +13,7 @@
<sidebar <sidebar
if={this.active.get("posts")} if={this.active.get("posts")}
name="Filter By Category" name="Filter By Category"
items={["Programming", "Books", "Philosophy"]}> items={categories}>
</sidebar> </sidebar>
</section> </section>
@ -234,7 +234,17 @@ function loaduser() {
}); });
} }
function getcategories() {
self.cached(`/blog/categories`)
.then((resp) => resp.json())
.then((resp) => {
self.categories = resp;
self.update();
});
}
self.on("mount", loaduser); self.on("mount", loaduser);
self.on("mount", getcategories);
</script> </script>
</app> </app>

2
src/scripts/post.tag

@ -68,7 +68,7 @@ self.loading = self.opts.state.loaded;
RiotControl.on("filtercategory", RiotControl.on("filtercategory",
(ev) => { (ev) => {
let category = ev.category.toLowerCase(); let category = ev.category.toLowerCase();
self.update({"category" : category}); console.log(category);
}); });
self.start = false; self.start = false;

11
src/website.py

@ -21,7 +21,6 @@ import os
from posts import Posts from posts import Posts
from projects import getProjects from projects import getProjects
posts = Posts()
login_manager = LoginManager() login_manager = LoginManager()
def cacheit(key, thunk): def cacheit(key, thunk):
@ -47,6 +46,10 @@ def NeverWhere(configfile=None):
#return send_from_directory("/srv/http/goal/favicon.ico", #return send_from_directory("/srv/http/goal/favicon.ico",
#'favicon.ico', mimetype='image/vnd.microsoft.icon') #'favicon.ico', mimetype='image/vnd.microsoft.icon')
print(os.environ["RIOTBLOG_SETTINGS"])
app.config.from_envvar('RIOTBLOG_SETTINGS')
posts = Posts(app.config["COUCHDB_USER"], app.config["COUCHDB_PASSWORD"])
@login_manager.user_loader @login_manager.user_loader
def load_user(user_id): def load_user(user_id):
return Admin return Admin
@ -110,6 +113,10 @@ def NeverWhere(configfile=None):
def allposts(): def allposts():
return posts.allposts() return posts.allposts()
@app.route("/blog/categories")
def categories():
return posts.categories()
# remove a post # remove a post
@app.route("/blog/deletepost/<_id>") @app.route("/blog/deletepost/<_id>")
@login_required @login_required
@ -158,8 +165,6 @@ def NeverWhere(configfile=None):
app = NeverWhere() app = NeverWhere()
app.config.from_envvar('RIOTBLOG_SETTINGS')
login_manager.init_app(app) login_manager.init_app(app)
csrf = CSRFProtect() csrf = CSRFProtect()

Loading…
Cancel
Save