Files
pillar/attract/application/models/model.py

135 lines
3.6 KiB
Python

from application import app
from application import db
import os
import os.path as op
import datetime
import hashlib
import time
from werkzeug import secure_filename
from sqlalchemy import event
from sqlalchemy.event import listens_for
from flask import (
render_template,
jsonify,
redirect,
url_for,
request)
from flask.ext.sqlalchemy import SQLAlchemy
def prefix_name(obj, file_data):
# Collect name and extension
parts = op.splitext(file_data.filename)
# Get current time (for unique hash)
timestamp = str(round(time.time()))
# Has filename only (not extension)
file_name = secure_filename(timestamp + '%s' % parts[0])
# Put them together
full_name = hashlib.md5(file_name).hexdigest() + parts[1]
return full_name
# Create directory for file fields to use
file_path = op.join(op.dirname(__file__), 'static/files',)
try:
os.mkdir(file_path)
except OSError:
pass
class Status(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120), nullable=False)
url = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text)
def __str__(self):
return self.name
class NodeType(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text)
url = db.Column(db.String(120), nullable=False)
def __str__(self):
return self.name
# Create Many to Many table
nodes_assets_table = db.Table('nodes_assets', db.Model.metadata,
db.Column('node_id', db.Integer, db.ForeignKey('node.id')),
db.Column('asset_id', db.Integer, db.ForeignKey('asset.id'))
)
class Node(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120), nullable=False)
url = db.Column(db.String(120))
description = db.Column(db.Text)
main_picture = db.Column(db.String(80))
order = db.Column(db.Integer)
creation_date = db.Column(db.DateTime(), default=datetime.datetime.now)
edit_date = db.Column(db.DateTime())
parent_id = db.Column(db.Integer, db.ForeignKey('node.id'))
parent = db.relationship('Node', remote_side=[id])
node_type_id = db.Column(db.Integer(), db.ForeignKey(NodeType.id))
node_type = db.relationship(NodeType, backref='Node')
status_id = db.Column(db.Integer(), db.ForeignKey(Status.id))
status = db.relationship(Status, backref='Node')
assets = db.relationship('Asset', secondary=nodes_assets_table)
def __str__(self):
return self.name
# Create Many to Many table
"""
assets_tags_table = db.Table('assets_tags', db.Model.metadata,
db.Column('asset_id', db.Integer, db.ForeignKey('asset.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
)
"""
class Asset(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=False)
link = db.Column(db.String(512))
picture = db.Column(db.String(80))
size = db.Column(db.String(7))
format = db.Column(db.String(15))
duration = db.Column(db.String(15))
nodes = db.relationship('Node', secondary=nodes_assets_table)
#tags = db.relationship('Tag', secondary=assets_tags_table)
def __str__(self):
return self.name
"""
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
def __str__(self):
return self.name
"""