Skip to content
Snippets Groups Projects
Commit 9961b9d7 authored by Gallenkamp, Fabian's avatar Gallenkamp, Fabian
Browse files

Added further Tools; Minor improvements

parent 20d9397f
Branches
No related tags found
No related merge requests found
...@@ -3,12 +3,13 @@ import os.path as op ...@@ -3,12 +3,13 @@ import os.path as op
import zipfile import zipfile
import io import io
import pathlib import pathlib
from flask import Flask, flash, send_file from flask import Flask, flash, send_file, url_for
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from jinja2 import Template from jinja2 import Template
from markupsafe import Markup from markupsafe import Markup
from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.sql import expression, functions from sqlalchemy.sql import expression, functions
from werkzeug.utils import redirect
from wtforms import validators from wtforms import validators
...@@ -88,14 +89,6 @@ class Programminglanguage(db.Model): ...@@ -88,14 +89,6 @@ class Programminglanguage(db.Model):
return "{}".format(self.name) return "{}".format(self.name)
class Matterofexpense(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
def __str__(self):
return "{}".format(self.name)
class SoftwareCategory(db.Model): class SoftwareCategory(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120)) name = db.Column(db.String(120))
...@@ -110,17 +103,18 @@ class Software(db.Model): ...@@ -110,17 +103,18 @@ class Software(db.Model):
name = db.Column(db.String(120)) name = db.Column(db.String(120))
short_description = db.Column(db.String(120)) short_description = db.Column(db.String(120))
developer = db.Column(db.String(120)) developer = db.Column(db.String(120))
maintainer = db.Column(db.String(120))
lastchanged = db.Column(db.Date) lastchanged = db.Column(db.Date)
price = db.Column(db.Integer())
modelprice = type = db.Column(db.Enum('yearly', 'once', name='modelprice'))
license_id = db.Column(db.Integer(), db.ForeignKey(License.id)) license_id = db.Column(db.Integer(), db.ForeignKey(License.id))
license = db.relationship(License, backref='softwares') license = db.relationship(License, backref='softwares')
softwarecategory_id = db.Column(db.Integer(), db.ForeignKey(SoftwareCategory.id)) softwarecategory_id = db.Column(db.Integer(), db.ForeignKey(SoftwareCategory.id))
softwarecategory = db.relationship(SoftwareCategory, backref='software') 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) features = db.relationship('Feature', secondary=software_features_table)
languages = db.relationship('Language', secondary=software_languages_table) languages = db.relationship('Language', secondary=software_languages_table)
...@@ -133,7 +127,7 @@ class Software(db.Model): ...@@ -133,7 +127,7 @@ class Software(db.Model):
class Link(db.Model): class Link(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
type = db.Column(db.Enum('repository', 'website', 'developer', 'tutorial', 'faq', 'other', name='link_types')) type = db.Column(db.Enum('repository', 'website', 'developer', 'tutorial', 'wiki', 'faq', 'other', name='link_types'))
url = db.Column(db.String(120)) url = db.Column(db.String(120))
...@@ -149,7 +143,7 @@ class Link(db.Model): ...@@ -149,7 +143,7 @@ class Link(db.Model):
# Flask views # Flask views
@app.route('/') @app.route('/')
def index(): def index():
return '<a href="/admin/">Click me to get to Admin!</a>' return redirect(url_for("admin.index"))
# Custom filter class # Custom filter class
...@@ -178,12 +172,18 @@ class AdvancedSoftwareView(sqla.ModelView): ...@@ -178,12 +172,18 @@ class AdvancedSoftwareView(sqla.ModelView):
inline_models = (Link,) inline_models = (Link,)
column_hide_backrefs = False column_hide_backrefs = False
#def _user_formatter(view, context, model, name): def _links_formatter(view, context, model, name):
# return Markup(for link in model.links) form_links = []
for link in model.links:
#column_formatters = { form_link = "<a href='{}' target='_blank'>{}</a>".format(link.url,link.type)
# 'links': _user_formatter if link.comment:
#} form_link = "<a href='{}' target='_blank'>{}-{}</a>".format(link.url,link.type,link.comment)
form_links.append(form_link)
return Markup(','.join(form_links))
column_formatters = {
'links': _links_formatter
}
@action('advancedexport', 'AdvancedExport') @action('advancedexport', 'AdvancedExport')
def action_advancedexport(self, ids): def action_advancedexport(self, ids):
...@@ -338,8 +338,10 @@ admin.add_view(sqla.ModelView(Feature, db.session)) ...@@ -338,8 +338,10 @@ admin.add_view(sqla.ModelView(Feature, db.session))
admin.add_view(sqla.ModelView(License, db.session, category="Other")) 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(Link, db.session, category="Other"))
admin.add_view(sqla.ModelView(SoftwareCategory, 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_sub_category(name="Andere Sammlungen", parent_name="Other")
admin.add_link(MenuLink(name='Back Home', url='/', category='Links')) admin.add_link(MenuLink(name="CRAN-R", url='https://cran.r-project.org/web/views/', category='Andere Sammlungen', target="_blank"))
admin.add_link(MenuLink(name="ROpenSci", url='https://ropensci.org/packages/', category='Andere Sammlungen', target="_blank"))
def build_sample_db(): def build_sample_db():
...@@ -352,17 +354,33 @@ def build_sample_db(): ...@@ -352,17 +354,33 @@ def build_sample_db():
db.drop_all() db.drop_all()
db.create_all() db.create_all()
lic_gpl = License(name="GPL", version="3.0") lic_gpl3 = License(name="GPL", version="3.0")
lic_agpl3 = License(name="AGPL", version="3.0")
lic_lgpl = License(name="LGPL")
lic_apache = License(name="Apache", version="2.0") lic_apache = License(name="Apache", version="2.0")
lic_mit = License(name="MIT") lic_mit = License(name="MIT")
db.session.add(lic_gpl) lic_prop = License(name="Proprietär")
db.session.add(lic_gpl3)
db.session.add(lic_agpl3)
db.session.add(lic_apache) db.session.add(lic_apache)
db.session.add(lic_mit) db.session.add(lic_mit)
db.session.add(lic_prop)
cat_tracking = SoftwareCategory(name="Tracking", short_description="") cat_tracking = SoftwareCategory(name="datenschutzkonformes Tracking", short_description="Sammlung von Sensordaten/Logdaten oder Nutzungsdaten mit expliziter Einverständnis mittels Software auf dem Gerät.")
db.session.add(cat_tracking) cat_scraping = SoftwareCategory(name="Scraping", short_description="Tools im Zusammenhang mit Web-Scraping.")
cat_int = SoftwareCategory(name="Forschungsplattformen", short_description="Integrierte Forschungsumgebungen/Plattformen für sozialwissenschaftliche Forschung.")
cat_qda = SoftwareCategory(name="QDA-Software", short_description="Computer-gestützte Analyse qualitativer Daten.")
cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware")
aware = Software(name="AWARE", softwarecategory=cat_tracking, license=lic_apache) db.session.add(cat_tracking)
db.session.add(cat_scraping)
db.session.add(cat_int)
aware = Software(name="AWARE",
short_description="",
developer="",
softwarecategory=cat_tracking,
license=lic_apache)
db.session.add(aware) 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="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/denzilferreira/aware-client", comment="android"))
...@@ -370,6 +388,112 @@ def build_sample_db(): ...@@ -370,6 +388,112 @@ def build_sample_db():
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/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.add(Link(software=aware, type="repository", url="https://github.com/denzilferreira/aware-server", comment="server"))
meili = Software(name="MEILI",
short_description="",
developer="Adrian C. Prelipcean",
softwarecategory=cat_tracking,
license=lic_gpl3)
db.session.add(meili)
db.session.add(Link(software=meili, type="repository", url="https://github.com/Badger-MEILI",
comment="group"))
passivedatakit = Software(name="Passive Data Kit",
developer="Chris Karr",
softwarecategory=cat_tracking,
license=lic_apache)
db.session.add(passivedatakit)
db.session.add(Link(software=passivedatakit, type="website", url="https://passivedatakit.org/", comment=""))
db.session.add(Link(software=passivedatakit, type="repository", url="https://github.com/audaciouscode/PassiveDataKit-Django", comment="djangoserver"))
db.session.add(Link(software=passivedatakit, type="repository", url="https://github.com/audaciouscode/PassiveDataKit-Android", comment="android"))
db.session.add(Link(software=passivedatakit, type="repository", url="https://github.com/audaciouscode/PassiveDataKit-iOS", comment="iOS"))
rselenium = Software(name="RSelenium",
developer="John Harrison",
maintainer="Ju Yeong Kim",
softwarecategory=cat_scraping,
license=lic_agpl3)
db.session.add(rselenium)
db.session.add(Link(software=rselenium, type="repository", url="https://github.com/ropensci/RSelenium", comment=""))
amcat = Software(name="AmCAT",
short_description="The Amsterdam Content Analysis Toolkit (AmCAT) is an open source infrastructure that makes it easy to do large-scale automatic and manual content analysis (text analysis) for the social sciences and humanities.",
developer="Chris Karr",
maintainer="Ju Yeong Kim",
softwarecategory=cat_int,
license=lic_agpl3)
db.session.add(amcat)
db.session.add(Link(software=amcat, type="website", url="http://vanatteveldt.com/amcat/", comment="entwickler"))
db.session.add(Link(software=amcat, type="repository", url="https://github.com/amcat/amcat", comment=""))
db.session.add(Link(software=amcat, type="wiki", url="http://wiki.amcat.nl/3.4:AmCAT_Navigator_3", comment=""))
cosmos = Software(name="COSMOS",
short_description="COSMOS Open Data Analytics software",
developer="",
maintainer="",
softwarecategory=cat_int,
license=lic_prop)
db.session.add(cosmos)
db.session.add(Link(software=cosmos, type="website", url="http://socialdatalab.net/COSMOS", comment=""))
lcm = Software(name="LCM",
short_description="Leipzig Corpus Miner a decentralized SaaS application for the analysis of very large amounts of news texts ",
developer="Gregor Wiedeman, Andreas Niekler",
maintainer="",
softwarecategory=cat_int,
license=lic_lgpl)
db.session.add(lcm)
db.session.add(Link(software=lcm, type="website", url="http://lcm.informatik.uni-leipzig.de/generic.html", comment=""))
ilcm = Software(name="iLCM",
short_description="The iLCM(LCM=Leipzig Corpus Miner) project pursues the development of an integrated research environment for the analysis of structured and unstructured data in a ‘Software as a Service’ architecture (SaaS). The research environment addresses requirements for the quantitative evaluation of large amounts of qualitative data using text mining methods and requirements for the reproducibility of data-driven research designs in the social sciences.",
developer="Gregor Wiedeman, Andreas Niekler",
maintainer="",
softwarecategory=cat_int,
license=lic_lgpl)
db.session.add(ilcm)
db.session.add(Link(software=ilcm, type="website", url="https://ilcm.informatik.uni-leipzig.de/", comment=""))
atlasti = Software(name="ATLAS.ti",
short_description="",
developer="",
maintainer="",
softwarecategory=cat_qda,
license=lic_prop)
db.session.add(atlasti)
db.session.add(Link(software=atlasti, type="website", url="https://atlasti.com/de/produkt/what-is-atlas-ti/", comment=""))
tool = Software(name="",
short_description="",
developer="",
maintainer="",
softwarecategory=,
license=lic_)
db.session.add(tool)
db.session.add(Link(software=tool, type="website", url="", comment=""))
'''
tool = Software(name="",
short_description="",
developer="",
maintainer="",
softwarecategory=,
license=lic_)
db.session.add(tool)
db.session.add(Link(software=tool, type="website", url="", comment=""))
'''
f4analyse = Software(name="f4analyse",
short_description="",
developer="",
maintainer="",
softwarecategory=cat_transkript,
license=lic_prop)
db.session.add(f4analyse)
db.session.add(Link(software=f4analyse, type="website", url="", comment=""))
db.session.commit() db.session.commit()
return return
......
No preview for this file type
...@@ -4,17 +4,11 @@ ...@@ -4,17 +4,11 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-sm-10 col-sm-offset-1"> <div class="col-sm-10 col-sm-offset-1">
<h1>Flask-Admin example</h1> <h1>Digitale Methoden WiSo-Fakultät</h1>
<p class="lead"> <p class="lead">
Basic SQLAlchemy model views. Weitere Infos zum Projekt finden sich <a href="https://www.wiso.uni-hamburg.de/forschung/forschungslabor/aktuelleprojekte/digitale-methoden.html" target="_blank">hier</a>
</p> </p>
<p> <!--<a class="btn btn-primary" href="/"><i class="glyphicon glyphicon-chevron-left"></i> Back</a>-->
This example shows how to add basic CRUD-views for your SQLAlchemy models.
</p>
<p>
The views are generated automatically, but it is perfectly possible to customize them to suit your needs.
</p>
<a class="btn btn-primary" href="/"><i class="glyphicon glyphicon-chevron-left"></i> Back</a>
</div> </div>
</div> </div>
</div> </div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment