diff --git a/app.py b/app.py index 493dc54d09aa275fb41eb32aa91c1fc84653aa83..0ce9c304b1b015beb499248f6d578929cfcad3e7 100644 --- a/app.py +++ b/app.py @@ -85,6 +85,8 @@ class Programminglanguage(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Unicode(64)) + version = db.Column(db.String(100)) + def __str__(self): return "{}".format(self.name) @@ -121,6 +123,8 @@ class Software(db.Model): programminglanguages = db.relationship('Programminglanguage', secondary=software_programminglanguages_table) + architecture = db.Column(db.Enum('standalone', 'package', 'framework', 'app', 'SaaS', 'other', name='software_types')) + def __str__(self): return "{}".format(self.name) @@ -167,10 +171,11 @@ 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', ) + column_sortable_list = ('name', ('license', ("license.name", "license.version")) , ('softwarecategory', 'softwarecategory.name'), 'lastchanged', ) + column_list = ('name', 'license', 'softwarecategory', 'links', 'architecture','programminglanguages', ) inline_models = (Link,) column_hide_backrefs = False + page_size = 100 def _links_formatter(view, context, model, name): form_links = [] @@ -188,13 +193,25 @@ class AdvancedSoftwareView(sqla.ModelView): @action('advancedexport', 'AdvancedExport') def action_advancedexport(self, ids): try: + # Generate sub pages with open('templates/export/software.jinja2', "r", encoding="utf-8") as file_: template = Template(file_.read()) softwares = Software.query.filter(Software.id.in_(ids)) for software_tool in softwares: - template.stream(name=software_tool.name).dump('./data/' + software_tool.name + '.asciidoc', encoding='utf-8') + template.stream(name=software_tool.name).dump('../digitale-Methoden-wiki/Tool_' + software_tool.name.replace(' ','') + '.asciidoc', encoding='utf-8') - base_path = pathlib.Path('./data/') + softwareincategory = [] + software_categorys = SoftwareCategory.query.all() + for software_category in software_categorys: + softwares = Software.query.filter(Software.softwarecategory_id == software_category.id) + softwareincategory.append((software_category,softwares)) + + # Generate overview page + with open('templates/export/softwares.jinja2', "r", encoding="utf-8") as file_: + template = Template(file_.read()) + template.stream(softwareincategory=softwareincategory).dump('../digitale-Methoden-wiki/Softwareübersicht.asciidoc', encoding='utf-8') + + base_path = pathlib.Path('../digitale-Methoden-wiki/') data = io.BytesIO() with zipfile.ZipFile(data, mode='w') as z: for f_name in base_path.iterdir(): @@ -354,23 +371,45 @@ def build_sample_db(): db.drop_all() db.create_all() + lic_bsd = License(name="BSD") + lic_gpl2 = License(name="GPL", version="2.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_apache2 = License(name="Apache", version="2.0") lic_mit = License(name="MIT") lic_prop = License(name="Proprietär") db.session.add(lic_gpl3) + db.session.add(lic_gpl3) db.session.add(lic_agpl3) - db.session.add(lic_apache) + db.session.add(lic_apache2) db.session.add(lic_mit) db.session.add(lic_prop) + prol_r = Programminglanguage(name="R") + prol_py = Programminglanguage(name="Python") + prol_cy = Programminglanguage(name="Cython") + prol_java = Programminglanguage(name="Java") + prol_objc = Programminglanguage(name="Objective-C") + db.session.add(prol_r) + db.session.add(prol_py) + db.session.add(prol_java) + db.session.add(prol_objc) + cat_tracking = SoftwareCategory(name="datenschutzkonformes Tracking", short_description="Sammlung von Sensordaten/Logdaten oder Nutzungsdaten mit expliziter Einverständnis mittels Software auf dem Gerät.") 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_tm = SoftwareCategory(name="Automatisierte Inhaltsanalyse/Text Mining", short_description="") + + cat_senti = SoftwareCategory(name="Sentiment Analysis", short_description="") + cat_topic = SoftwareCategory(name="Topic-Modellierung", short_description="") cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") + cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") + cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") + cat_esmema = SoftwareCategory(name="ESM/EMA-Studien", short_description="Datenerhebung in 'natürlicher' Umgebung.") + cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") + cat_misc = SoftwareCategory(name="Weiteres", short_description="Zu speziell zum Einordnen..") db.session.add(cat_tracking) db.session.add(cat_scraping) @@ -379,8 +418,10 @@ def build_sample_db(): aware = Software(name="AWARE", short_description="", developer="", + maintainer="", softwarecategory=cat_tracking, - license=lic_apache) + architecture="framework", + license=lic_apache2) 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")) @@ -391,16 +432,22 @@ def build_sample_db(): meili = Software(name="MEILI", short_description="", developer="Adrian C. Prelipcean", + maintainer="Adrian C. Prelipcean", softwarecategory=cat_tracking, + architecture="framework", 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", + short_description="", developer="Chris Karr", + maintainer="Chris Karr", softwarecategory=cat_tracking, - license=lic_apache) + architecture="framework", + license=lic_apache2, + programminglanguages=[prol_py,prol_java]) 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")) @@ -411,6 +458,7 @@ def build_sample_db(): developer="John Harrison", maintainer="Ju Yeong Kim", softwarecategory=cat_scraping, + architecture="package", license=lic_agpl3) db.session.add(rselenium) db.session.add(Link(software=rselenium, type="repository", url="https://github.com/ropensci/RSelenium", comment="")) @@ -420,6 +468,7 @@ def build_sample_db(): developer="Chris Karr", maintainer="Ju Yeong Kim", softwarecategory=cat_int, + architecture="SaaS", license=lic_agpl3) db.session.add(amcat) db.session.add(Link(software=amcat, type="website", url="http://vanatteveldt.com/amcat/", comment="entwickler")) @@ -431,6 +480,7 @@ def build_sample_db(): developer="", maintainer="", softwarecategory=cat_int, + architecture="standalone", license=lic_prop) db.session.add(cosmos) db.session.add(Link(software=cosmos, type="website", url="http://socialdatalab.net/COSMOS", comment="")) @@ -441,6 +491,7 @@ def build_sample_db(): developer="Gregor Wiedeman, Andreas Niekler", maintainer="", softwarecategory=cat_int, + architecture="framework", 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="")) @@ -449,6 +500,7 @@ def build_sample_db(): 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="", + architecture="SaaS", softwarecategory=cat_int, license=lic_lgpl) db.session.add(ilcm) @@ -459,6 +511,7 @@ def build_sample_db(): developer="", maintainer="", softwarecategory=cat_qda, + architecture="standalone", 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="")) @@ -468,40 +521,347 @@ def build_sample_db(): developer="", maintainer="", softwarecategory=cat_qda, + architecture="standalone", license=lic_prop) db.session.add(leximancer) db.session.add(Link(software=leximancer, type="website", url="https://info.leximancer.com/", comment="")) - maxqda = Software(name="MAXQDA", + tool = Software(name="MAXQDA", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_qda, + architecture="standalone", + license=lic_prop) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://www.rrz.uni-hamburg.de/services/software/alphabetisch/maxqda.html", comment="")) + + tool = Software(name="NVivo", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_qda, + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://www.qsrinternational.com/nvivo/who-uses-nvivo/academics", comment="")) + + tool = Software(name="QDAMiner", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_qda, + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://provalisresearch.com/products/qualitative-data-analysis-software/", comment="")) + + tool = Software(name="ORA Pro", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_qda, + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://netanomics.com/", comment="")) + + tool = Software(name="Quirkos", short_description="", developer="", maintainer="", - softwarecategory=cat_transkript, - license=lic_prop) - db.session.add(maxqda) - db.session.add(Link(software=maxqda, type="website", url="https://www.rrz.uni-hamburg.de/services/software/alphabetisch/maxqda.html", comment="")) + softwarecategory=cat_qda, + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://www.quirkos.com/", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="RQDA", + short_description="It includes a number of standard Computer-Aided Qualitative Data Analysis features. In addition it seamlessly integrates with R, which means that a) statistical analysis on the coding is possible, and b) functions for data manipulation and analysis can be easily extended by writing R functions. To some extent, RQDA and R make an integrated platform for both quantitative and qualitative data analysis.", + developer="Ronggui Huang", + maintainer="Ronggui Huang", + softwarecategory=cat_qda, + license=lic_bsd, + programminglanguages=[prol_r]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://rqda.r-forge.r-project.org/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/Ronggui/RQDA", comment="")) + + tool = Software(name="TAMS", + short_description="Text Analysis Markup System (TAMS) is both a system of marking documents for qualitative analysis and a series of tools for mining information based on that syntax.", + developer="", + maintainer="", + softwarecategory=cat_qda, + license=lic_gpl2, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://sourceforge.net/projects/tamsys", comment="")) + + tool = Software(name="Apache OpenNLP", + short_description="OpenNLP supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, language detection and coreference resolution.", + developer="", + maintainer="", + softwarecategory=cat_tm, + license=lic_apache2, + architecture="package", + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://opennlp.apache.org/", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="GATE", + short_description="GATE - General Architecture for Text Engineering", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="package", + license=lic_lgpl, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://gate.ac.uk/overview.html", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/GateNLP/gate-core", comment="")) + + tool = Software(name="NLTK", + short_description="NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for industrial-strength NLP libraries, and an active discussion forum.", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="package", + license=lic_apache2, + programminglanguages=[prol_py]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://www.nltk.org/index.html", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/nltk/nltk", comment="")) + + tool = Software(name="Gensim", + short_description="Gensim is a Python library for topic modelling, document indexing and similarity retrieval with large corpora. Target audience is the natural language processing (NLP) and information retrieval (IR) community.", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="package", + license=lic_lgpl, + programminglanguages=[prol_py]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://pypi.org/project/gensim/", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="Pandas", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="package", + license=lic_bsd, + programminglanguages=[prol_py]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://pandas.pydata.org/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/pandas-dev/pandas", comment="")) + + tool = Software(name="spaCy", + short_description=" spaCy excels at large-scale information extraction tasks. It's written from the ground up in carefully memory-managed Cython. Independent research has confirmed that spaCy is the fastest in the world. If your application needs to process entire web dumps, spaCy is the library you want to be using.", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="package", + license=lic_mit, + programminglanguages=[prol_cy]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://spacy.io/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/explosion/spaCy", comment="")) + + tool = Software(name="RapidMiner", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="framework", + license=lic_agpl3, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://rapidminer.com/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/rapidminer/rapidminer-studio", comment="")) + + tool = Software(name="tm", + short_description="", + developer="Ingo Feinerer, Kurt Hornik", + maintainer="Ingo Feinerer, Kurt Hornik", + softwarecategory=cat_tm, + architecture="package", + license=lic_gpl3, + programminglanguages=[prol_r]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://tm.r-forge.r-project.org/", comment="")) + db.session.add(Link(software=tool, type="website", url="https://cran.r-project.org/package=tm", comment="cran")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="Stanford CoreNLP", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="framework", + license=lic_gpl3, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://stanfordnlp.github.io/CoreNLP/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/stanfordnlp/CoreNLP", comment="")) + + tool = Software(name="xtas", + short_description="the eXtensible Text Analysis Suite(xtas) is a collection of natural language processing and text mining tools, brought together in a single software package with built-in distributed computing and support for the Elasticsearch document store.", + developer="", + maintainer="", + softwarecategory=cat_tm, + architecture="framework", + license=lic_apache2, + programminglanguages=[prol_py]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://nlesc.github.io/xtas/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/NLeSC/xtas", comment="")) + + tool = Software(name="Stm", + short_description="The Structural Topic Model (STM) allows researchers to estimate topic models with document-level covariates. The package also includes tools for model selection, visualization, and estimation of topic-covariate regressions. Methods developed in Roberts et al (2014) <doi:10.1111/ajps.12103> and Roberts et al (2016) <doi:10.1080/01621459.2016.1141684>.", + developer="", + maintainer="", + softwarecategory=cat_topic, + architecture="package", + license=lic_mit, + programminglanguages=[prol_r]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://structuraltopicmodel.com", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/bstewart/stm", comment="")) + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) ''' tool = Software(name="", - short_description="", - developer="", - maintainer="", - softwarecategory=, - license=lic_) + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) db.session.add(tool) db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) ''' + paco = Software(name="paco", + short_description="", + developer="Bob Evans", + maintainer="Bob Evans", + softwarecategory=cat_esmema, + architecture="framework", + license=lic_apache2, + programminglanguages=[prol_objc, prol_java]) + db.session.add(paco) + db.session.add(Link(software=paco, type="website", url="https://www.pacoapp.com/", comment="")) + db.session.add(Link(software=paco, type="repository", url="https://github.com/google/paco", comment="")) f4analyse = Software(name="f4analyse", short_description="", developer="", maintainer="", softwarecategory=cat_transkript, + architecture="standalone", license=lic_prop) db.session.add(f4analyse) - db.session.add(Link(software=f4analyse, type="website", url="", comment="")) + db.session.add(Link(software=f4analyse, type="website", url="https://www.audiotranskription.de/f4-analyse", comment="")) db.session.commit() return diff --git a/sample_db.sqlite b/sample_db.sqlite index d94e828b6dace831930de402a07592a3bef3dc3d..81c755dbc5d1178004e2e2b7319413fd5bbc7d35 100644 Binary files a/sample_db.sqlite and b/sample_db.sqlite differ diff --git a/templates/export/softwares.jinja2 b/templates/export/softwares.jinja2 new file mode 100644 index 0000000000000000000000000000000000000000..7515a18bb67d78164012f75775030f37317d25bc --- /dev/null +++ b/templates/export/softwares.jinja2 @@ -0,0 +1,7 @@ +{% for softwarecategory in softwareincategory %} +== {{ softwarecategory[0].name }} +_{{softwarecategory[0].short_description}}_ +{% for software in softwarecategory[1] %} +link:Tool_{{ software.name.replace(' ','') }}.asciidoc[{{ software.name }}] ({% for link in software.links %}link:{{link.url}}[{{link.type}}{{'-'+link.comment if link.comment else '' }}] {% endfor %}):: {{software.short_description}} < {{software.license}} | {{software.architecture}} | {% for prol in software.programminglanguages %}{{prol.name}} {% endfor %} > +{% endfor %} +{% endfor %} \ No newline at end of file