init
This commit is contained in:
15
app/__init__.py
Normal file
15
app/__init__.py
Normal 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
9
app/forms/site.py
Normal 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
11
app/models/article.py
Normal 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
5
app/models/category.py
Normal 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
11
app/models/site.py
Normal 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
11
app/requirements.txt
Normal 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
33
app/routes.py
Normal 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
3
app/tasks.py
Normal file
@@ -0,0 +1,3 @@
|
||||
def example_task(n: int) -> int:
|
||||
""" Example task"""
|
||||
return n**n
|
3
app/templates/includes/footer.html
Normal file
3
app/templates/includes/footer.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<footer>
|
||||
<hr>
|
||||
</footer>
|
4
app/templates/includes/header.html
Normal file
4
app/templates/includes/header.html
Normal file
@@ -0,0 +1,4 @@
|
||||
<header>
|
||||
<h1>App</h1>
|
||||
<hr>
|
||||
</header>
|
13
app/templates/layouts/base.html
Normal file
13
app/templates/layouts/base.html
Normal 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>
|
11
app/templates/macros/render_field.html
Normal file
11
app/templates/macros/render_field.html
Normal 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 %}
|
||||
|
22
app/templates/pages/index.html
Normal file
22
app/templates/pages/index.html
Normal 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 %}
|
15
app/templates/pages/submit_site.html
Normal file
15
app/templates/pages/submit_site.html
Normal 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 %}
|
Reference in New Issue
Block a user