Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
.DS_Store
__pycache__/
#instance/
*config.py
#config.py
*.ipynb
16 changes: 16 additions & 0 deletions flaskapp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,24 @@
# Configuring the SQLite database
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'

# Add engine options for SQLite timeout
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {
'connect_args': {'timeout': 15} # Timeout in seconds
}

# Creating a SQLAlchemy database instance
db = SQLAlchemy(app)

app.app_context().push()

# Import routes after app and db are initialized to avoid circular imports
from flaskapp import routes

# Optional: Setup basic logging if you haven't already for app.logger to work well
import logging
if not app.debug:
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
app.logger.addHandler(stream_handler)
app.logger.setLevel(logging.INFO) # Set a default logging level
app.logger.info('Flask app initialized with enhanced SQLite settings.')
69 changes: 26 additions & 43 deletions flaskapp/models.py
Original file line number Diff line number Diff line change
@@ -1,68 +1,51 @@
from flaskapp import db
from datetime import datetime


# Defining a model for users
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), nullable=False)
posts = db.relationship('BlogPost', backref='author', lazy=True)
def __repr__(self): return f"User('{self.name}', '{self.id}'')"

def __repr__(self):
return f"User('{self.name}', '{self.id}'')"


# Defining a model for blog posts ('models' are used to represent tables in your database).
# Defining a model for blog posts
class BlogPost(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
# author = db.Column(db.String(50), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

def __repr__(self):
return f"BlogPost('{self.title}', '{self.date_posted}')"

def __repr__(self): return f"BlogPost('{self.title}', '{self.date_posted}')"

class Day(db.Model):
# __tablename__ = 'day' # if you wanted to, you could change the default table name here
id = db.Column(db.Date, primary_key=True)
views = db.Column(db.Integer)

def __repr__(self):
return f"Day('{self.id}', '{self.views}')"

def __repr__(self): return f"Day('{self.id}', '{self.views}')"

class IpView(db.Model):
ip = db.Column(db.String(20), primary_key=True)
date_id = db.Column(db.Date, db.ForeignKey('day.id'), primary_key=True)
def __repr__(self): return f"IpView('{self.ip}', '{self.date_id}')"

def __repr__(self):
return f"IpView('{self.ip}', '{self.date_id}')"


# 2010-2019 BES Constituency Results with Census and Candidate Data
# from: https://www.britishelectionstudy.com/data-objects/linked-data/
# citation: Fieldhouse, E., J. Green., G. Evans., J. Mellon & C. Prosser (2019) British Election Study 2019 Constituency Results file, version 1.1, DOI: 10.48420/20278599
class UkData(db.Model):
id = db.Column(db.String(9), primary_key=True) # UK parliamentary constituency ID
constituency_name = db.Column(db.Text, nullable=False) # UK parliamentary constituency
country = db.Column(db.String(8), nullable=False) # England, Scotland, Wales
region = db.Column(db.String(24), nullable=False) # UK Region
Turnout19 = db.Column(db.Float, nullable=False) # General Election 2019 Turnout (pct of electorate)
ConVote19 = db.Column(db.Float, nullable=False) # General Election 2019 Conservative votes
LabVote19 = db.Column(db.Float, nullable=False) # General Election 2019 Labour Party votes
LDVote19 = db.Column(db.Float, nullable=False) # General Election 2019 Liberal Democrat votes
SNPVote19 = db.Column(db.Float, nullable=False) # General Election 2019 SNP Party votes (Scottish National Party)
PCVote19 = db.Column(db.Float, nullable=False) # General Election 2019 Plaid Cymru Party votes (only in Wales)
UKIPVote19 = db.Column(db.Float, nullable=False) # General Election 2019 UKIP Party votes
GreenVote19 = db.Column(db.Float, nullable=False) # General Election 2019 Green Party votes
BrexitVote19 = db.Column(db.Float, nullable=False) # General Election 2019 Brexit Party votes
TotalVote19 = db.Column(db.Float, nullable=False) # General Election 2019 total number of votes
c11PopulationDensity = db.Column(db.Float, nullable=False) # UK census 2011 population density
c11Female = db.Column(db.Float, nullable=False) # UK census 2011 - percentage of population who are female
c11FulltimeStudent = db.Column(db.Float, nullable=False) # UK census 2011 - percentage of pop who are students
c11Retired = db.Column(db.Float, nullable=False) # UK census 2011 - percentage of population who are retired
c11HouseOwned = db.Column(db.Float, nullable=False) # UK census 2011 - percentage of population who own their home
c11HouseholdMarried = db.Column(db.Float, nullable=False) # UK census 2011 - percentage of pop who are married
id = db.Column(db.String(9), primary_key=True)
constituency_name = db.Column(db.Text, nullable=False)
country = db.Column(db.String(8), nullable=False)
region = db.Column(db.String(24), nullable=False)
Turnout19 = db.Column(db.Float, nullable=False)
ConVote19 = db.Column(db.Float, nullable=False)
LabVote19 = db.Column(db.Float, nullable=False)
LDVote19 = db.Column(db.Float) # Nullable, as not all parties contest all seats
SNPVote19 = db.Column(db.Float)
PCVote19 = db.Column(db.Float)
UKIPVote19 = db.Column(db.Float)
GreenVote19 = db.Column(db.Float)
BrexitVote19 = db.Column(db.Float)
TotalVote19 = db.Column(db.Float, nullable=False)
c11PopulationDensity = db.Column(db.Float, nullable=False)
c11Female = db.Column(db.Float, nullable=False)
c11FulltimeStudent = db.Column(db.Float, nullable=False)
c11Retired = db.Column(db.Float, nullable=False)
c11HouseOwned = db.Column(db.Float, nullable=False)
c11HouseholdMarried = db.Column(db.Float, nullable=False)
def __repr__(self): return f"UkData('{self.constituency_name}')"
Loading