This commit is contained in:
2023-09-06 22:22:50 -04:00
commit 626946f9b0
21 changed files with 817 additions and 0 deletions

15
app/__init__.py Normal file
View File

@@ -0,0 +1,15 @@
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
config_string = os.environ.get("FLASK_CONFIG", "config.DevelopmentConfig")
app.config.from_object("config.DevelopmentConifg")
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///app.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
from . import routes

9
app/forms/site.py Normal file
View File

@@ -0,0 +1,9 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class SiteForm(FlaskForm):
name = StringField('Naziv', validators=[DataRequired()])
base_url = StringField('Link', validators=[DataRequired()])
feed_url = StringField('RSS', validators=[DataRequired()])
submit_url = SubmitField("Dodaj sajt")

11
app/models/article.py Normal file
View File

@@ -0,0 +1,11 @@
from app import db
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(2000), unique=True)
title = db.Column(db.String(2000))
raw_content = db.Column(db.Text)
debloated_content = db.Column(db.Text)
summarized_content = db.Column(db.Text)
site_id = db.Column(db.Integer, db.ForeignKey('site.id'))

5
app/models/category.py Normal file
View File

@@ -0,0 +1,5 @@
from . import db
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), unique=True)

11
app/models/site.py Normal file
View File

@@ -0,0 +1,11 @@
from app import db
from app.models.article import Article
class Site(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
base_url = db.Column(db.String(1000), unique=True)
feed_url = db.Column(db.String(1000), unique=True)
articles = db.relationship('Article', backref='site')
# TODO add creation date
# TODO add last_updated date

11
app/requirements.txt Normal file
View File

@@ -0,0 +1,11 @@
click==8.1.3
Flask==2.2.2
Flask-SQLAlchemy==3.0.2
greenlet==2.0.1
importlib-metadata==5.0.0
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
SQLAlchemy==1.4.44
Werkzeug==2.2.2
zipp==3.10.0

33
app/routes.py Normal file
View File

@@ -0,0 +1,33 @@
from flask import render_template, redirect
from . import app, db
from .models.site import Site
from .forms.site import SiteForm
def get_basic_data():
data = {}
data["APP_NAME"] = app.config["APP_NAME"]
return data
@app.route("/", methods=["GET"])
def index():
data = get_basic_data()
data["sites"] = Site.query.all()
return render_template("pages/index.html", data=data)
@app.route("/add", methods=["GET", "POST"])
def submit_site():
data = get_basic_data()
form = SiteForm()
if form.validate_on_submit():
name = form.name.data
base_url = form.base_url.data
feed_url = form.feed_url.data
site = Site(name=name, base_url=base_url, feed_url=feed_url)
db.session.add(site)
db.session.commit()
return redirect("/")
data["form"] = SiteForm()
print(dir(data["form"]))
return render_template("pages/submit_site.html", data=data, form=data["form"])

3
app/tasks.py Normal file
View File

@@ -0,0 +1,3 @@
def example_task(n: int) -> int:
""" Example task"""
return n**n

View File

@@ -0,0 +1,3 @@
<footer>
<hr>
</footer>

View File

@@ -0,0 +1,4 @@
<header>
<h1>App</h1>
<hr>
</header>

View File

@@ -0,0 +1,13 @@
<!doctype html>
<html>
<head>
<title>App</title>
</head>
<body>
<div class="container">
{% include "includes/header.html" %}
{% block content %}{% endblock content %}
{% include "includes/footer.html" %}
</div>
</body>
</html>

View File

@@ -0,0 +1,11 @@
{% macro render_text_field(field) %}
<div class="form__group">
{{ field.label(class_="form__label") }}
{{ field(class_="form__field")}}
{%- for error in field.errors %}
<span class="form__error">{{ error }}</span>
{% endfor %}
</div>
{% endmacro %}

View File

@@ -0,0 +1,22 @@
{% extends "layouts/base.html" %}
{% block content %}
{% for site in data["sites"] %}
<details>
<summary>
{{site.name}}
</summary>
<ul>
{% for article in site.articles %}
<li>
<details>
<summary><b>{{article.title}}</b></summary>
<p>{{article.summarized_content}}</p>
</details>
</li>
{% endfor %}
</ul>
</details>
{% endfor %}
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% from "macros/render_field.html" import render_text_field %}
{% block content %}
<form method="POST">
{{ data["form"].hidden_tag() }}
{{render_text_field(data["form"].name)}}
{{render_text_field(data["form"].base_url)}}
{{render_text_field(data["form"].feed_url)}}
<div>
{{data["form"].submit_url}}
</div>
</form>
{% endblock content %}