Ensure sessions are closed
This commit is contained in:
parent
13f41e6cc7
commit
e2f52ba43c
8
main.py
8
main.py
|
@ -1,8 +1,8 @@
|
||||||
"""
|
"""
|
||||||
Main Flask-based app for Slinky
|
Main Flask-based app for Slinky
|
||||||
"""
|
"""
|
||||||
from flask import Flask, render_template
|
from flask import Flask, Response, render_template
|
||||||
from flask_bootstrap import Bootstrap
|
from flask_bootstrap import Bootstrap # type: ignore[import]
|
||||||
|
|
||||||
from slinky.web import protect, slinky_webapp
|
from slinky.web import protect, slinky_webapp
|
||||||
|
|
||||||
|
@ -14,11 +14,11 @@ Bootstrap(app)
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
@protect
|
@protect
|
||||||
def index() -> str:
|
def index() -> Response:
|
||||||
"""
|
"""
|
||||||
Index/Landing page
|
Index/Landing page
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: string of page content
|
str: string of page content
|
||||||
"""
|
"""
|
||||||
return render_template('index.html')
|
return Response(render_template('index.html'), 200)
|
||||||
|
|
|
@ -8,7 +8,7 @@ from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy # type: ignore[import]
|
||||||
|
|
||||||
from slinky import db
|
from slinky import db
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ class Slinky:
|
||||||
)
|
)
|
||||||
self.session.add(dbentry)
|
self.session.add(dbentry)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
return shortcode
|
return shortcode
|
||||||
|
|
||||||
|
@ -98,13 +99,15 @@ class Slinky:
|
||||||
entry = self.session.query(db.ShortURL).filter_by(shortcode=shortcode).first()
|
entry = self.session.query(db.ShortURL).filter_by(shortcode=shortcode).first()
|
||||||
|
|
||||||
if entry:
|
if entry:
|
||||||
return Shortcode(
|
ret_sc = Shortcode(
|
||||||
entry.id,
|
entry.id,
|
||||||
entry.shortcode,
|
entry.shortcode,
|
||||||
entry.url,
|
entry.url,
|
||||||
entry.fixed_views,
|
entry.fixed_views,
|
||||||
entry.expiry,
|
entry.expiry,
|
||||||
)
|
)
|
||||||
|
self.session.close()
|
||||||
|
return ret_sc
|
||||||
return Shortcode(0, '', '', 0, '1970-01-01 00:00:00.000000')
|
return Shortcode(0, '', '', 0, '1970-01-01 00:00:00.000000')
|
||||||
|
|
||||||
def remove_view(self, sc_id: int) -> None:
|
def remove_view(self, sc_id: int) -> None:
|
||||||
|
@ -118,6 +121,7 @@ class Slinky:
|
||||||
{db.ShortURL.fixed_views: db.ShortURL.fixed_views - 1}
|
{db.ShortURL.fixed_views: db.ShortURL.fixed_views - 1}
|
||||||
)
|
)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
def get_all(self) -> list[Shortcode]:
|
def get_all(self) -> list[Shortcode]:
|
||||||
"""
|
"""
|
||||||
|
@ -129,7 +133,9 @@ class Slinky:
|
||||||
Returns:
|
Returns:
|
||||||
Shortcode: full Shortcode object for the given shortcode
|
Shortcode: full Shortcode object for the given shortcode
|
||||||
"""
|
"""
|
||||||
return list(self.session.query(db.ShortURL).all())
|
shortcodes = list(self.session.query(db.ShortURL).all())
|
||||||
|
self.session.close()
|
||||||
|
return shortcodes
|
||||||
|
|
||||||
def delete_by_shortcode(self, shortcode: str) -> None:
|
def delete_by_shortcode(self, shortcode: str) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -142,3 +148,4 @@ class Slinky:
|
||||||
|
|
||||||
self.session.delete(entry)
|
self.session.delete(entry)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
|
self.session.close()
|
||||||
|
|
|
@ -3,9 +3,9 @@ DB component
|
||||||
"""
|
"""
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from sqlalchemy import Column, Integer, String, create_engine
|
from sqlalchemy import Column, Integer, String, create_engine # type: ignore[import]
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base # type: ignore[import]
|
||||||
from sqlalchemy.orm import Session, sessionmaker
|
from sqlalchemy.orm import Session, sessionmaker # type: ignore[import]
|
||||||
|
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,11 @@ from functools import wraps
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from flask import Blueprint, Response, redirect, render_template, request
|
from flask import Blueprint, Response, render_template, request
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm # type: ignore[import]
|
||||||
from wtforms import DateTimeLocalField, HiddenField, IntegerField, StringField
|
from wtforms import HiddenField # type: ignore[import]
|
||||||
from wtforms.validators import DataRequired, Length
|
from wtforms import DateTimeLocalField, IntegerField, StringField
|
||||||
|
from wtforms.validators import DataRequired, Length # type: ignore[import]
|
||||||
from slinky import Slinky
|
from slinky import Slinky
|
||||||
|
|
||||||
slinky_webapp = Blueprint('webapp', __name__, template_folder='templates')
|
slinky_webapp = Blueprint('webapp', __name__, template_folder='templates')
|
||||||
|
@ -112,7 +112,7 @@ def try_path_as_shortcode(path: str) -> Response:
|
||||||
should_redirect = False
|
should_redirect = False
|
||||||
|
|
||||||
if should_redirect:
|
if should_redirect:
|
||||||
return redirect(shortcode.url, 302)
|
return Response('Redirecting...', status=302, headers={'location': shortcode.url})
|
||||||
|
|
||||||
return Response('Not found', 404)
|
return Response('Not found', 404)
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ def add() -> Response:
|
||||||
Create and add a new shorturl
|
Create and add a new shorturl
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: HTTP response
|
Response: HTTP response
|
||||||
"""
|
"""
|
||||||
shortcode = ''
|
shortcode = ''
|
||||||
url = ''
|
url = ''
|
||||||
|
@ -150,7 +150,7 @@ def add() -> Response:
|
||||||
else:
|
else:
|
||||||
return Response('Could not create a unique shortcode', 500)
|
return Response('Could not create a unique shortcode', 500)
|
||||||
|
|
||||||
return render_template('add.html', form=form, shortcode=shortcode)
|
return Response(render_template('add.html', form=form, shortcode=shortcode), 200)
|
||||||
|
|
||||||
|
|
||||||
@slinky_webapp.route('/_/list', methods=['GET', 'POST'])
|
@slinky_webapp.route('/_/list', methods=['GET', 'POST'])
|
||||||
|
@ -160,7 +160,7 @@ def lister() -> Response:
|
||||||
List the shortcodes, URLs, etc.
|
List the shortcodes, URLs, etc.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: shortcode for the URL
|
Response: HTTP response
|
||||||
"""
|
"""
|
||||||
form = DelForm(meta={'csrf': False})
|
form = DelForm(meta={'csrf': False})
|
||||||
slinky = Slinky(cfg['db'])
|
slinky = Slinky(cfg['db'])
|
||||||
|
@ -168,4 +168,7 @@ def lister() -> Response:
|
||||||
if form.is_submitted():
|
if form.is_submitted():
|
||||||
slinky.delete_by_shortcode(form.delete.data.strip())
|
slinky.delete_by_shortcode(form.delete.data.strip())
|
||||||
|
|
||||||
return render_template('list.html', form=form, shortcodes=slinky.get_all())
|
return Response(
|
||||||
|
render_template('list.html', form=form, shortcodes=slinky.get_all()),
|
||||||
|
200,
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in a new issue