diff --git a/app.py b/app.py index 8f51c9f2dfbd86b5aa97ed20851f1cd07ea38404..3fe031c0d035e77dc0414b3c27c6de09e931a1a3 100644 --- a/app.py +++ b/app.py @@ -42,10 +42,13 @@ software_features_table = db.Table('software_features', db.Model.metadata, db.Column('software_id', db.Integer, db.ForeignKey('software.id')), db.Column('feature_id', db.Integer, db.ForeignKey('feature.id'))) # Create N2one table -software_licence_table = db.Table('software_license', db.Model.metadata, +software_languages_table = db.Table('software_languages', db.Model.metadata, db.Column('software_id', db.Integer, db.ForeignKey('software.id')), - db.Column('license_id', db.Integer, db.ForeignKey('license.id'))) - + db.Column('language_id', db.Integer, db.ForeignKey('language.id'))) +# Create N2one table +software_programminglanguages_table = db.Table('software_programminglanguages', db.Model.metadata, + db.Column('software_id', db.Integer, db.ForeignKey('software.id')), + db.Column('programming_id', db.Integer, db.ForeignKey('programminglanguage.id'))) class License(db.Model): id = db.Column(db.Integer, primary_key=True) @@ -66,6 +69,23 @@ class Feature(db.Model): def __str__(self): return "{}".format(self.name) + +class Language(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.Unicode(64)) + + def __str__(self): + return "{}".format(self.name) + + +class Programminglanguage(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.Unicode(64)) + + def __str__(self): + return "{}".format(self.name) + + class Matterofexpense(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Unicode(64)) @@ -77,8 +97,10 @@ class Matterofexpense(db.Model): class Software(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(120)) - text = db.Column(db.Text, nullable=False) - date = db.Column(db.Date) + short_description = db.Column(db.Text, nullable=False) + 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') @@ -87,11 +109,26 @@ class Software(db.Model): 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): return "{}".format(self.name) +class Link(db.Model): + id = db.Column(db.Integer, primary_key=True) + type = db.Column(db.Enum('repository', 'website', 'developer', 'tutorial', 'faq', 'other', name='link_types')) + + url = db.Column(db.String(120)) + + software_id = db.Column(db.Integer(), db.ForeignKey(Software.id)) + software = db.relationship(Software, backref='Links') + + def __str__(self): + return "{}:{}".format(self.type,self.url) + + # Flask views @app.route('/') def index(): @@ -118,7 +155,9 @@ inline_form_options = { 'form_extra_fields': None, }''' -class AdvancedExportView(sqla.ModelView): +class AdvancedSoftwareView(sqla.ModelView): + inline_models = (Link,) + @action('advancedexport', 'AdvancedExport') def action_advancedexport(self, ids): try: @@ -140,7 +179,6 @@ class AdvancedExportView(sqla.ModelView): as_attachment=True, attachment_filename='data.zip' ) - flash("Done") except Exception as ex: if not self.handle_view_exception(ex): @@ -265,16 +303,15 @@ class ScreenView(sqla.ModelView): # Create admin -admin = admin.Admin(app, name='Example: SQLAlchemy', template_mode='bootstrap3') +admin = admin.Admin(app, name='Softwaresammlung: Digitale Methoden', template_mode='bootstrap3') # Add views -admin.add_view(AdvancedExportView(Software, db.session)) +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_sub_category(name="Links", parent_name="Other") admin.add_link(MenuLink(name='Back Home', url='/', category='Links')) -admin.add_link(MenuLink(name='Google', url='http://www.google.com/', category='Links')) -admin.add_link(MenuLink(name='Mozilla', url='http://mozilla.org/', category='Links')) def build_sample_db(): diff --git a/sample_db.sqlite b/sample_db.sqlite index a3fd5a17f720f47ed3eb8110a0e9f78cd29f2d5a..9f5332adfdf19c39b683be53d3b458be6f74306e 100644 Binary files a/sample_db.sqlite and b/sample_db.sqlite differ