some baseline stuff
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,6 @@
|
|||||||
|
### Database file
|
||||||
|
database.db
|
||||||
|
|
||||||
### Python template
|
### Python template
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
6
.idea/BellScheduler.iml
generated
6
.idea/BellScheduler.iml
generated
@@ -1,8 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module type="PYTHON_MODULE" version="4">
|
<module type="PYTHON_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$">
|
||||||
<orderEntry type="inheritedJdk" />
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.10 (BellScheduler)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@@ -1,4 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (BellScheduler)" project-jdk-type="Python SDK" />
|
||||||
|
<component name="PyCharmProfessionalAdvertiser">
|
||||||
|
<option name="shown" value="true" />
|
||||||
|
</component>
|
||||||
</project>
|
</project>
|
53
app.py
Normal file
53
app.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import os
|
||||||
|
from flask import Flask, render_template, request, redirect, url_for
|
||||||
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
|
||||||
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config['SQLALCHEMY_DATABASE_URI'] =\
|
||||||
|
'sqlite:///' + os.path.join(basedir, 'database.db')
|
||||||
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||||
|
|
||||||
|
|
||||||
|
db = SQLAlchemy(app)
|
||||||
|
|
||||||
|
class Period(db.Model):
|
||||||
|
period = db.Column(db.Integer, primary_key=True)
|
||||||
|
periodTime = db.Column(db.Integer)
|
||||||
|
weekendSchedule = db.Column(db.Boolean)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<Period "{self.period}">'
|
||||||
|
|
||||||
|
class Task(db.Model):
|
||||||
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
title = db.Column(db.String(100))
|
||||||
|
description = db.Column(db.Text)
|
||||||
|
created_timestamp = db.Column(db.Integer)
|
||||||
|
due_timestamp = db.Column(db.Integer)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<Task "{self.title}">'
|
||||||
|
|
||||||
|
class Event(db.Model):
|
||||||
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
scheduled_date = db.Column(db.String(100))
|
||||||
|
period = db.relationship(Period, backref='events')
|
||||||
|
tasks = db.relationship(Task, backref='events')
|
||||||
|
period_num = db.Column(db.Integer, db.ForeignKey('period.period'))
|
||||||
|
task_id = db.Column(db.Integer, db.ForeignKey('task.id'))
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<Event "{self.id}">'
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
events = Event.query.all()
|
||||||
|
return render_template('index.html', events=events)
|
||||||
|
|
||||||
|
@app.route('/task/<int:task_id>/')
|
||||||
|
def task(task_id):
|
||||||
|
task = Task.query.get_or_404(task_id)
|
||||||
|
return render_template('task.html', task=task)
|
65
init_db.py
Normal file
65
init_db.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
from app import db, Period, Task, Event
|
||||||
|
|
||||||
|
|
||||||
|
period1 = Period(period=1, periodTime='08:30:00', weekendSchedule=True)
|
||||||
|
period2 = Period(period=2, periodTime='09:00:00', weekendSchedule=True)
|
||||||
|
period3 = Period(period=3, periodTime='09:30:00', weekendSchedule=True)
|
||||||
|
period4 = Period(period=4, periodTime='10:30:00', weekendSchedule=True)
|
||||||
|
period5 = Period(period=5, periodTime='11:00:00', weekendSchedule=True)
|
||||||
|
period6 = Period(period=6, periodTime='12:30:00', weekendSchedule=False)
|
||||||
|
period7 = Period(period=7, periodTime='13:45:00', weekendSchedule=False)
|
||||||
|
period8 = Period(period=8, periodTime='14:30:00', weekendSchedule=False)
|
||||||
|
period9 = Period(period=9, periodTime='15:30:00', weekendSchedule=False)
|
||||||
|
|
||||||
|
task1 = Task(id=1,
|
||||||
|
title="Sexy ERP time",
|
||||||
|
description="Be the dominant partner and fuck so much XD",
|
||||||
|
created_timestamp='1668278862', due_timestamp='')
|
||||||
|
task2 = Task(id=2, title="Test task",
|
||||||
|
description="Test",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task3 = Task(id=3, title="La Nager",
|
||||||
|
description="Francis stuff",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task4 = Task(id=4, title="Ops/Tech Meeting",
|
||||||
|
description="HEIL GEORGE!",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task5 = Task(id=5, title="Tech Team Meeting",
|
||||||
|
description="Awkward AF",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task6 = Task(id=6, title="Write BellScheduler",
|
||||||
|
description="heh",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task7 = Task(id=7, title="Fap to cunny porn",
|
||||||
|
description="FBI OPEN UP!",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task8 = Task(id=8, title="Go on vrchat",
|
||||||
|
description="Mmm... virtual headpats!",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
task9 = Task(id=9, title="Brush teeth",
|
||||||
|
description="Ya dont do that more often, ya gross fuck",
|
||||||
|
created_timestamp='1668278862',
|
||||||
|
due_timestamp='')
|
||||||
|
|
||||||
|
event1 = Event(id=1, scheduled_date='11-12-2022', period_num=1, task_id=4)
|
||||||
|
event2 = Event(id=2, scheduled_date='11-12-2022', period_num=2, task_id=2)
|
||||||
|
event3 = Event(id=3, scheduled_date='11-12-2022', period_num=3, task_id=5)
|
||||||
|
event4 = Event(id=4, scheduled_date='11-12-2022', period_num=4, task_id=6)
|
||||||
|
event5 = Event(id=5, scheduled_date='11-12-2022', period_num=5, task_id=1)
|
||||||
|
event6 = Event(id=6, scheduled_date='11-12-2022', period_num=6, task_id=3)
|
||||||
|
event7 = Event(id=7, scheduled_date='11-12-2022', period_num=7, task_id=7)
|
||||||
|
event8 = Event(id=8, scheduled_date='11-12-2022', period_num=8, task_id=8)
|
||||||
|
event9 = Event(id=9, scheduled_date='11-12-2022', period_num=9, task_id=9)
|
||||||
|
|
||||||
|
db.session.add_all([period1, period2, period3, period4, period5, period6, period7, period8, period9])
|
||||||
|
db.session.add_all([task1, task2, task3, task4, task5, task6, task7, task8, task9])
|
||||||
|
db.session.add_all([event1, event2, event3, event4, event5, event6, event7, event8, event9])
|
||||||
|
|
||||||
|
db.session.commit()
|
22
requirements.txt
Normal file
22
requirements.txt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# This file is used by pip to install required python packages
|
||||||
|
# Usage: pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Flask Framework
|
||||||
|
click==8.1.3
|
||||||
|
Flask==2.2.2
|
||||||
|
itsdangerous==2.1.2
|
||||||
|
Jinja2==3.1.2
|
||||||
|
MarkupSafe==2.1.1
|
||||||
|
Werkzeug==2.2.2
|
||||||
|
|
||||||
|
# Flask Packages
|
||||||
|
Flask-Login==0.6.2
|
||||||
|
Flask-Migrate==3.1.0
|
||||||
|
Flask-Script==2.0.6
|
||||||
|
Flask-SQLAlchemy==3.0.2
|
||||||
|
Flask-WTF==1.0.1
|
||||||
|
Flask-User==1.0.2.2
|
||||||
|
|
||||||
|
# Automated tests
|
||||||
|
pytest==7.2.0
|
||||||
|
pytest-cov==4.0.0
|
52
templates/base.html
Normal file
52
templates/base.html
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>{% block title %} {% endblock %} - BellScheduler</title>
|
||||||
|
<style>
|
||||||
|
.title {
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
margin: 5px;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.event {
|
||||||
|
flex: 20%;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 5px;
|
||||||
|
background-color: #f3f3f3;
|
||||||
|
inline-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title a {
|
||||||
|
color: #00a36f;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a {
|
||||||
|
color: #d64161;
|
||||||
|
font-size: 3em;
|
||||||
|
margin-left: 50px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<a href="{{ url_for('index') }}">BellScheduler</a>
|
||||||
|
<a href="#">Tasks</a>
|
||||||
|
<a href="#">About</a>
|
||||||
|
</nav>
|
||||||
|
<hr>
|
||||||
|
<div class="content">
|
||||||
|
{% block content %} {% endblock %}
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
23
templates/index.html
Normal file
23
templates/index.html
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<span class="title"><h1>{% block title %} Events {% endblock %}</h1></span>
|
||||||
|
<div class="content">
|
||||||
|
{% for event in events %}
|
||||||
|
<div class="event">
|
||||||
|
<p><b>Period {{ event.period_num }}</b></p>
|
||||||
|
<b>
|
||||||
|
<p class="title">
|
||||||
|
<a href="/task/{{ event.tasks.id }}">
|
||||||
|
{{ event.tasks.title }}
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</b>
|
||||||
|
<div class="content">
|
||||||
|
<p>{{ event.tasks.description }}</p>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
17
templates/task.html
Normal file
17
templates/task.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<span class="title"><h1>{% block title %} {{ task.title }} {% endblock %}</h1></span>
|
||||||
|
<div class="content">
|
||||||
|
<div class="task">
|
||||||
|
<p><b>#{{ task.id }}</b></p>
|
||||||
|
<b>
|
||||||
|
<p class="title">{{ task.title }}</p>
|
||||||
|
</b>
|
||||||
|
<div class="content">
|
||||||
|
<p>{{ task.description }}</p>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Reference in New Issue
Block a user