diff --git a/.gitignore b/.gitignore index 18381d8..415167a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Databases +*.sqlite3 + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.travis.yml b/.travis.yml index aa851ce..fce820a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,5 +9,5 @@ install: - pip install -r requirements.txt script: - - py.test tvseries/* + - py.test . diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..cf008d8 --- /dev/null +++ b/manage.py @@ -0,0 +1,7 @@ +from flask_script import Manager +from tvseries.core import app + +manager = Manager(app) + +if __name__ == "__main__": + manager.run() diff --git a/requirements.txt b/requirements.txt index 76e7e91..14f92f6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ Flask==0.11.1 pytest-flask==0.10.0 +Flask-SQLAlchemy==2.1 +Flask-Script==2.0.5 diff --git a/run.py b/run.py deleted file mode 100644 index bda40b7..0000000 --- a/run.py +++ /dev/null @@ -1,4 +0,0 @@ -from tvseries.core import app - -if __name__ == "__main__": - app.run(debug=True) diff --git a/tvseries/core.py b/tvseries/core.py index a248571..599cd61 100644 --- a/tvseries/core.py +++ b/tvseries/core.py @@ -1,20 +1,56 @@ -from flask import Flask, render_template, request, redirect +import os +from random import choice + +from flask import Flask, render_template, request, redirect, url_for +from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) -series = [] +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tvseries.sqlite3' +db = SQLAlchemy(app) @app.route('/') -@app.route('/') -def home(name=None): - return render_template('home.html', name=name, series=series) +def home(): + names = os.listdir(os.path.join(app.static_folder, 'img')) + img_url = url_for('static', filename=os.path.join('img', choice(names))) + series = TVSerie.query.all() + return render_template('home.html', series=series, image=img_url) @app.route('/add', methods=['GET', 'POST']) def add(): if request.method == 'POST': - serie_name = request.form.to_dict().get('serie-name') - series.append(serie_name) + name = request.form.to_dict().get('serie-name') + description = request.form.to_dict().get('serie-description') + author = request.form.to_dict().get('serie-author') + episodies_number = request.form.to_dict().get('serie-episodies_number') + serie = TVSerie(name=name, + description=description, + author=author, + episodies_number=episodies_number) + db.session.add(serie) + db.session.commit() return redirect('/') return render_template('add.html') + + +class TVSerie(db.Model): + __table_args__ = {'sqlite_autoincrement': True} + id = db.Column(db.BigInteger().with_variant(db.Integer, "sqlite"), + nullable=False, unique=True, + autoincrement=True, primary_key=True) + name = db.Column(db.String(50), unique=True, nullable=False) + description = db.Column(db.Text, nullable=True) + episodies_number = db.Column(db.Integer, nullable=False, default=1) + author = db.Column(db.String(50), nullable=False) + + def __repr__(self): + if self.description: + self.description = "{0}...".format(self.description[0:10]) + + return ("TVSerie(id={!r}, name={!r}, " + "description={!r}, episodies_number={!r})").format( + self.id, self.name, + self.description, + self.episodies_number) diff --git a/tvseries/static/img/arrow_1000x400.jpg b/tvseries/static/img/arrow_1000x400.jpg new file mode 100644 index 0000000..8662c5c Binary files /dev/null and b/tvseries/static/img/arrow_1000x400.jpg differ diff --git a/tvseries/static/img/flash_1000x400.png b/tvseries/static/img/flash_1000x400.png new file mode 100644 index 0000000..e33af0d Binary files /dev/null and b/tvseries/static/img/flash_1000x400.png differ diff --git a/tvseries/static/img/game_of_thrones_1000x400.jpg.png b/tvseries/static/img/game_of_thrones_1000x400.jpg.png new file mode 100644 index 0000000..7bd7ee1 Binary files /dev/null and b/tvseries/static/img/game_of_thrones_1000x400.jpg.png differ diff --git a/tvseries/static/img/how_i_met_your_mother_1000x400.jpg b/tvseries/static/img/how_i_met_your_mother_1000x400.jpg new file mode 100644 index 0000000..1c73206 Binary files /dev/null and b/tvseries/static/img/how_i_met_your_mother_1000x400.jpg differ diff --git a/tvseries/static/img/stranger_things_1000x400.jpg b/tvseries/static/img/stranger_things_1000x400.jpg new file mode 100644 index 0000000..da7ea89 Binary files /dev/null and b/tvseries/static/img/stranger_things_1000x400.jpg differ diff --git a/tvseries/static/img/various01_1000x400.jpg b/tvseries/static/img/various01_1000x400.jpg new file mode 100644 index 0000000..b2291b5 Binary files /dev/null and b/tvseries/static/img/various01_1000x400.jpg differ diff --git a/tvseries/static/img/various_1000x400.png b/tvseries/static/img/various_1000x400.png new file mode 100644 index 0000000..e6d00a1 Binary files /dev/null and b/tvseries/static/img/various_1000x400.png differ diff --git a/tvseries/templates/add.html b/tvseries/templates/add.html index 4a75bbe..f9e13d0 100644 --- a/tvseries/templates/add.html +++ b/tvseries/templates/add.html @@ -10,6 +10,18 @@ +
+ + +
+
+ + +
+
+ + +
diff --git a/tvseries/templates/banner.html b/tvseries/templates/banner.html new file mode 100644 index 0000000..3130ae5 --- /dev/null +++ b/tvseries/templates/banner.html @@ -0,0 +1,5 @@ +{% macro render_banner(image='') -%} + +{%- endmacro %} \ No newline at end of file diff --git a/tvseries/templates/base.html b/tvseries/templates/base.html index 7517ca1..fcf5d7c 100644 --- a/tvseries/templates/base.html +++ b/tvseries/templates/base.html @@ -11,6 +11,7 @@
+ {% include "navbar.html" %} {% block content %} {% endblock %}
diff --git a/tvseries/templates/home.html b/tvseries/templates/home.html index e890754..d6a6e7e 100644 --- a/tvseries/templates/home.html +++ b/tvseries/templates/home.html @@ -1,20 +1,15 @@ {% extends 'base.html' %} {% block content %} -
-

Hello {% if name %}{{name}}{% else %}world{% endif %}!

-

This is a simple page :D

-
-
- -
+{% import 'banner.html' as banner %} +{{ banner.render_banner(image) }} {% if series %}
Minhas series:
diff --git a/tvseries/templates/navbar.html b/tvseries/templates/navbar.html new file mode 100644 index 0000000..a71a307 --- /dev/null +++ b/tvseries/templates/navbar.html @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/tvseries/tests.py b/tvseries/tests.py deleted file mode 100644 index 0d92c45..0000000 --- a/tvseries/tests.py +++ /dev/null @@ -1,32 +0,0 @@ -import pytest - - -@pytest.mark.usefixtures('client_class') -class TestCore: - - @pytest.fixture - def app(self): - from tvseries.core import app - return app - - def test_get_home(self): - response = self.client.get("/") - assert '

Hello world!

' in response.data.decode('utf-8') - assert response.status_code == 200 - - def test_get_name(self): - response = self.client.get("/Rafael") - assert '

Hello Rafael!

' in response.data.decode('utf-8') - assert response.status_code == 200 - - def test_get_add(self): - response = self.client.get("/add") - assert ('' in - response.data.decode('utf-8')) - assert response.status_code == 200 - - def test_post_add(self): - response = self.client.post("/add", data={"serie-name": "Teste"}) - from tvseries.core import series - assert series == ['Teste'] - assert response.status_code == 302 diff --git a/tvseries/tests/__init__.py b/tvseries/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tvseries/tests/test_core.py b/tvseries/tests/test_core.py new file mode 100644 index 0000000..96f07d7 --- /dev/null +++ b/tvseries/tests/test_core.py @@ -0,0 +1,91 @@ +import pytest + +from tvseries.core import TVSerie + + +@pytest.mark.usefixtures('client_class') +class TestCore: + + @pytest.fixture + def app(self): + from tvseries.core import app + return app + + def test_get_home(self, db): + response = self.client.get("/") + assert '