Commit ba1f5f38 authored by Petrus J.v.Rensburg's avatar Petrus J.v.Rensburg

SQLAlchemy example: build sample db on startup.

parent aef7c0f3
...@@ -24,6 +24,8 @@ db = SQLAlchemy(app) ...@@ -24,6 +24,8 @@ db = SQLAlchemy(app)
# Create models # Create models
class User(db.Model): class User(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(100))
last_name = db.Column(db.String(100))
username = db.Column(db.String(80), unique=True) username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True) email = db.Column(db.String(120), unique=True)
...@@ -136,7 +138,7 @@ class PostAdmin(sqla.ModelView): ...@@ -136,7 +138,7 @@ class PostAdmin(sqla.ModelView):
class TreeView(sqla.ModelView): class TreeView(sqla.ModelView):
inline_models = (Tree,) form_excluded_columns = ['children', ]
# Create admin # Create admin
...@@ -148,10 +150,118 @@ admin.add_view(sqla.ModelView(Tag, db.session)) ...@@ -148,10 +150,118 @@ admin.add_view(sqla.ModelView(Tag, db.session))
admin.add_view(PostAdmin(db.session)) admin.add_view(PostAdmin(db.session))
admin.add_view(TreeView(Tree, db.session)) admin.add_view(TreeView(Tree, db.session))
if __name__ == '__main__':
# Create DB def build_sample_db():
"""
Populate a small db with some example entries.
"""
import random
import datetime
db.drop_all()
db.create_all() db.create_all()
# Create sample Users
first_names = [
'Harry', 'Amelia', 'Oliver', 'Jack', 'Isabella', 'Charlie', 'Sophie', 'Mia',
'Jacob', 'Thomas', 'Emily', 'Lily', 'Ava', 'Isla', 'Alfie', 'Olivia', 'Jessica',
'Riley', 'William', 'James', 'Geoffrey', 'Lisa', 'Benjamin', 'Stacey', 'Lucy'
]
last_names = [
'Brown', 'Smith', 'Patel', 'Jones', 'Williams', 'Johnson', 'Taylor', 'Thomas',
'Roberts', 'Khan', 'Lewis', 'Jackson', 'Clarke', 'James', 'Phillips', 'Wilson',
'Ali', 'Mason', 'Mitchell', 'Rose', 'Davis', 'Davies', 'Rodriguez', 'Cox', 'Alexander'
]
user_list = []
for i in range(len(first_names)):
user = User()
user.first_name = first_names[i]
user.username = first_names[i].lower()
user.last_name = last_names[i]
user.email = user.username + "@example.com"
user_list.append(user)
db.session.add(user)
# Create sample Tags
tag_list = []
for tmp in ["YELLOW", "WHITE", "BLUE", "GREEN", "RED", "BLACK", "BROWN", "PURPLE", "ORANGE"]:
tag = Tag()
tag.name = tmp
tag_list.append(tag)
db.session.add(tag)
# Create sample Posts
sample_text = [
{
'title': "de Finibus Bonorum et Malorum - Part I",
'content': "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor \
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure \
dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. \
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt \
mollit anim id est laborum."
},
{
'title': "de Finibus Bonorum et Malorum - Part II",
'content': "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque \
laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto \
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur \
aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi \
nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, \
adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam \
aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam \
corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum \
iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum \
qui dolorem eum fugiat quo voluptas nulla pariatur?"
},
{
'title': "de Finibus Bonorum et Malorum - Part III",
'content': "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium \
voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati \
cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id \
est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam \
libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod \
maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. \
Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet \
ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur \
a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis \
doloribus asperiores repellat."
}
]
for user in user_list:
entry = random.choice(sample_text) # select text at random
post = Post()
post.user = user
post.title = entry['title']
post.text = entry['content']
tmp = int(1000*random.random()) # random number between 0 and 1000:
post.date = datetime.datetime.now() - datetime.timedelta(days=tmp)
post.tags = random.sample(tag_list, 2) # select a couple of tags at random
db.session.add(post)
# Create a sample Tree structure
trunk = Tree(name="Trunk")
db.session.add(trunk)
for i in range(5):
branch = Tree()
branch.name = "Branch " + str(i+1)
branch.parent = trunk
db.session.add(branch)
for j in range(5):
leaf = Tree()
leaf.name = "Leaf " + str(j+1)
leaf.parent = branch
db.session.add(leaf)
db.session.commit()
return
if __name__ == '__main__':
build_sample_db()
# Start app # Start app
app.run(debug=True) app.run(debug=True)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment