diff --git a/app.py b/app.py index 3fe031c0d035e77dc0414b3c27c6de09e931a1a3..0af8fbbdfe9c052937633006e799f205fac37803 100644 --- a/app.py +++ b/app.py @@ -6,7 +6,9 @@ import pathlib from flask import Flask, flash, send_file from flask_sqlalchemy import SQLAlchemy from jinja2 import Template +from markupsafe import Markup from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy.sql import expression, functions from wtforms import validators @@ -94,22 +96,35 @@ class Matterofexpense(db.Model): return "{}".format(self.name) +class SoftwareCategory(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(120)) + short_description = db.Column(db.Text) + + def __str__(self): + return "{}".format(self.name) + + class Software(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(120)) - short_description = db.Column(db.Text, nullable=False) + short_description = db.Column(db.String(120)) developer = db.Column(db.String(120)) lastchanged = db.Column(db.Date) - license_id = db.Column(db.Integer(), db.ForeignKey(License.id)) license = db.relationship(License, backref='softwares') + softwarecategory_id = db.Column(db.Integer(), db.ForeignKey(SoftwareCategory.id)) + softwarecategory = db.relationship(SoftwareCategory, backref='software') + matterofexpense_id = db.Column(db.Integer(), db.ForeignKey(Matterofexpense.id)) matterofexpense = db.relationship(Matterofexpense, backref='softwares') features = db.relationship('Feature', secondary=software_features_table) + languages = db.relationship('Language', secondary=software_languages_table) + programminglanguages = db.relationship('Programminglanguage', secondary=software_programminglanguages_table) def __str__(self): @@ -123,10 +138,12 @@ class Link(db.Model): url = db.Column(db.String(120)) software_id = db.Column(db.Integer(), db.ForeignKey(Software.id)) - software = db.relationship(Software, backref='Links') + software = db.relationship(Software, backref='links') + + comment = db.Column(db.String(120)) def __str__(self): - return "{}:{}".format(self.type,self.url) + return "<a href='#'>{}</a>:{}".format(self.type,self.url) # Flask views @@ -156,7 +173,17 @@ inline_form_options = { }''' class AdvancedSoftwareView(sqla.ModelView): + column_sortable_list = ('name', ('license', ("license.name", "license.version")), 'lastchanged' , ('softwarecategory', 'softwarecategory.name'),) + column_list = ('name', 'license', 'softwarecategory', 'links', ) inline_models = (Link,) + column_hide_backrefs = False + + #def _user_formatter(view, context, model, name): + # return Markup(for link in model.links) + + #column_formatters = { + # 'links': _user_formatter + #} @action('advancedexport', 'AdvancedExport') def action_advancedexport(self, ids): @@ -310,6 +337,7 @@ admin.add_view(AdvancedSoftwareView(Software, db.session)) admin.add_view(sqla.ModelView(Feature, db.session)) admin.add_view(sqla.ModelView(License, db.session, category="Other")) admin.add_view(sqla.ModelView(Link, db.session, category="Other")) +admin.add_view(sqla.ModelView(SoftwareCategory, db.session, category="Other")) admin.add_sub_category(name="Links", parent_name="Other") admin.add_link(MenuLink(name='Back Home', url='/', category='Links')) @@ -324,8 +352,24 @@ def build_sample_db(): db.drop_all() db.create_all() - db.session.add(License(name="GPL", version="3.0")) - db.session.add(License(name="MIT")) + lic_gpl = License(name="GPL", version="3.0") + lic_apache = License(name="Apache", version="2.0") + lic_mit = License(name="MIT") + db.session.add(lic_gpl) + db.session.add(lic_apache) + db.session.add(lic_mit) + + cat_tracking = SoftwareCategory(name="Tracking", short_description="") + db.session.add(cat_tracking) + + aware = Software(name="AWARE", softwarecategory=cat_tracking, license=lic_apache) + db.session.add(aware) + db.session.add(Link(software=aware, type="website", url="http://www.awareframework.com/", comment="")) + db.session.add(Link(software=aware, type="repository", url="https://github.com/denzilferreira/aware-client", comment="android")) + db.session.add(Link(software=aware, type="repository", url="https://github.com/tetujin/aware-client-ios", comment="iOS")) + db.session.add(Link(software=aware, type="repository", url="https://github.com/tetujin/aware-client-osx", comment="OSX")) + db.session.add(Link(software=aware, type="repository", url="https://github.com/denzilferreira/aware-server", comment="server")) + db.session.commit() return diff --git a/sample_db.sqlite b/sample_db.sqlite index 9f5332adfdf19c39b683be53d3b458be6f74306e..eac3f58be98c21776a2dc8da005f0dfc9829646e 100644 Binary files a/sample_db.sqlite and b/sample_db.sqlite differ