diff --git a/modules/Feed/Dockerfile b/modules/Feed/Dockerfile new file mode 100644 index 00000000..0a7d8ea8 --- /dev/null +++ b/modules/Feed/Dockerfile @@ -0,0 +1,27 @@ +FROM alpine:3.5 + +RUN apk add --no-cache python3 && \ + apk add --no-cache py3-lxml && \ + python3 -m ensurepip && \ + rm -r /usr/lib/python*/ensurepip && \ + pip3 install --upgrade pip setuptools && \ + rm -r /root/.cache + +LABEL maintainer "Roman Timashev " + +ENV INSTALL_PATH /app +RUN mkdir -p $INSTALL_PATH +WORKDIR /$INSTALL_PATH + +COPY requirements.txt . +RUN pip3 install -r requirements.txt + +COPY app ./app + +ENV DB_URI "mongodb://localhost:27017" +ENV DB_USER "" +ENV DB_PASSWORD "" +ENV DB_NAME "hudozka" + +EXPOSE 5000 +CMD python3 app/main.py diff --git a/modules/Feed/app/db.py b/modules/Feed/app/db.py new file mode 100644 index 00000000..4292d010 --- /dev/null +++ b/modules/Feed/app/db.py @@ -0,0 +1,13 @@ +from pymongo import MongoClient +from settings import db_uri, db_name, db_user, db_password + +db = MongoClient(db_uri)[db_name] +if db_user and db_password: + auth_status = db.authenticate(db_user, db_password) + if not auth_status: + print('Failed to authenticate user') + exit(1) + + +def collection(name): + return db[name] diff --git a/modules/Feed/app/feed.py b/modules/Feed/app/feed.py new file mode 100644 index 00000000..3dfe2eba --- /dev/null +++ b/modules/Feed/app/feed.py @@ -0,0 +1,37 @@ +import html + +from feedgen.feed import FeedGenerator + +from db import collection + + +def get_feed(): + events = list(collection('events').find({})) + news = list(collection('timeline').find({'type': 'post'})) + + articles = events + news + + fg = FeedGenerator() + fg.id('1') + fg.title('Шлиссельбургская ДХШ') + # fg.author({'name': 'John Doe', 'email': 'john@example.de'}) + fg.link(href='https://art.shlisselburg.org', rel='alternate') + # fg.logo('http://ex.com/logo.jpg') + # fg.subtitle('События ') + fg.link(href='https://art.shlisselburg.org/feed', rel='self') + fg.language('en') + + for article in articles: + content = html.unescape(article['post']) + article_id = article['id'] + url = 'https://art.shlisselburg.org/article/{id}'.format(id=article_id) + + fe = fg.add_entry() + fe.id(article_id) + fe.title(article['title']) + fe.content(content, None, 'CDATA') + fe.link({'href': url}) + + # return articles + return fg.atom_str(pretty=True) + # return fg.atom_str() diff --git a/modules/Feed/app/main.py b/modules/Feed/app/main.py new file mode 100644 index 00000000..12f4f2b6 --- /dev/null +++ b/modules/Feed/app/main.py @@ -0,0 +1,5 @@ +from server import app +from settings import host + +if __name__ == '__main__': + app.run(host=host) diff --git a/modules/Feed/app/server.py b/modules/Feed/app/server.py new file mode 100644 index 00000000..0ab46c7d --- /dev/null +++ b/modules/Feed/app/server.py @@ -0,0 +1,14 @@ +from flask import Flask + +from feed import get_feed + +app = Flask(__name__) + + +@app.route('/') +def root(): + feed = get_feed() + if not feed: + return '', 404 + + return feed diff --git a/modules/Feed/app/settings.py b/modules/Feed/app/settings.py new file mode 100644 index 00000000..ba8daa43 --- /dev/null +++ b/modules/Feed/app/settings.py @@ -0,0 +1,7 @@ +import os + +db_uri = os.getenv('DB_URI', 'mongodb://localhost:27017') +db_name = os.getenv('DB_NAME', 'hudozka') +db_user = os.getenv('DB_USER', None) +db_password = os.getenv('DB_PASSWORD', None) +host = os.getenv('APP_HOST', '0.0.0.0') diff --git a/modules/Feed/requirements.txt b/modules/Feed/requirements.txt new file mode 100644 index 00000000..eed5a3e1 --- /dev/null +++ b/modules/Feed/requirements.txt @@ -0,0 +1,5 @@ +pymongo==3.4.0 +Flask==0.12 +redis==2.10.5 +PyYAML==3.12 +feedgen==0.5.1 \ No newline at end of file