Umzug auf Django

This commit is contained in:
Götz 2017-10-01 00:44:26 +02:00
parent e6e09e504f
commit 905db542c3
224 changed files with 17185 additions and 38140 deletions

50
.gitignore vendored Normal file
View File

@ -0,0 +1,50 @@
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff:
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/dictionaries
# Sensitive or high-churn files:
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
# Gradle:
.idea/**/gradle.xml
.idea/**/libraries
# CMake
cmake-build-debug/
# Mongo Explorer plugin:
.idea/**/mongoSettings.xml
## File-based project format:
*.iws
## Plugin-specific files:
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

8185
bootstrap.css vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,330 +0,0 @@
html {
box-sizing: border-box;
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: transparent;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
@-ms-viewport {
width: device-width;
}
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 1rem;
font-weight: normal;
line-height: 1.5;
color: #212529;
background-color: #fff;
}
[tabindex="-1"]:focus {
outline: none !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: .5rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
dfn {
font-style: italic;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre,
code,
kbd,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
a,
area,
button,
[role="button"],
input,
label,
select,
summary,
textarea {
-ms-touch-action: manipulation;
touch-action: manipulation;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #868e96;
text-align: left;
caption-side: bottom;
}
th {
text-align: left;
}
label {
display: inline-block;
margin-bottom: .5rem;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
padding: 0;
margin-bottom: .5rem;
font-size: 1.5rem;
line-height: inherit;
color: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
html{box-sizing:border-box;font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}*,::after,::before{box-sizing:inherit}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

168
food.html
View File

@ -1,168 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" bootstrap.css ">
<title>Essen an der OFU</title>
</head>
<body>
<h1>Food for Students</h1>
<p>Last execute: Sunday, 24.09.2017</p>
<div class="container">
<div class="row">
<div class="col">
<h2>Cafeteria Erba-Insel</h2>
<p><span>24.07.</span><span>Rinderhacksteak an Cognacsoße und Spätzle</span></p>
<p><span>25.07.</span><span>Gemüseschnitzel mit Kräutercreme und Kartoffeln</span></p>
<p><span>26.07.</span><span>Penne-Nudeln mit Hackfleischsoße</span></p>
<p><span>27.07.</span><span>Kaiserschmarrn mit Apfelmus</span></p>
</div>
<div class="col">
<h2>Cafeteria Markusplatz</h2>
<p><span>24.07.</span><span>Vegetarisches Chili sin Carne</span></p>
<p><span>25.07.</span><span>Gemüseschnitzel mit Kräutercreme und Kartoffeln</span></p>
<p><span>26.07.</span><span>Überbackene Zucchini an Paprikasoße mit Püree</span></p>
<p><span>27.07.</span><span>Kaiserschmarrn mit Apfelmus</span></p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Speiseplan für Austraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Pizza "Speciale"</p>
<p>Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</p>
<h3>Dienstag 19.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Schweinenackensteak vom Grill mit hausgemachter Kräuterbutter</p>
<p>Pizza "Speciale"</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<h3>Mittwoch 20.09.</h3>
<p>Rindfleisch mit Meerrettich</p>
<p>Griechischer Teller "Kreta" mit Suflaki, Calamari, Bifteki und hausgemachtem Kräuterdip</p>
<p>Nudelpfanne "Mediterrane"</p>
<h3>Donnerstag 21.09.</h3>
<p>Lasagne von der Pute</p>
<p>Apfelstrudel "Tiroler Art" mit Vanillesoße</p>
<p>Wedges mit Kräuterquark</p>
<h3>Freitag 22.09.</h3>
<p>Pangasiusfilet an fränkischer Silvanersoße mit Gemüsestreifen</p>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Schweinerückensteak mit Champignonrahmsoße</p>
<p>Blumenkohlkäsemedaillon mit Pestosoße</p>
</div>
<div class="col">
<h2>Speiseplan für Feldkirchenstraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Schwarzer Heilbutt an Krebsrahmsoße</p>
<p>Pizza "Speciale"</p>
<p>Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</p>
<h3>Dienstag 19.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Pizza "Speciale"</p>
<p>Schweinenackensteak vom Grill mit hausgemachter Kräuterbutter</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<h3>Mittwoch 20.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Rindfleisch mit Meerrettich</p>
<p>Griechischer Teller "Kreta" mit Suflaki, Calamari, Bifteki und hausgemachtem Kräuterdip</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<p>Nudelpfanne "Mediterrane"</p>
<h3>Donnerstag 21.09.</h3>
<p>Lasagne von der Pute</p>
<p>Apfelstrudel "Tiroler Art" mit Vanillesoße</p>
<p>Wedges mit Kräuterquark</p>
<h3>Freitag 22.09.</h3>
<p>Lasagne von der Pute</p>
<p>Pangasiusfilet an fränkischer Silvanersoße mit Gemüsestreifen</p>
<p>Schweinerückensteak mit Champignonrahmsoße</p>
<p>Blumenkohlkäsemedaillon mit Pestosoße</p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>Sunday, 24.09.2017</h3>
<p>Leider gibt es heute keine Happy Hours :(</p>
</div>
</div>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1,168 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" ../css/bootstrap-4.0.0-beta-dist/css/bootstrap.css ">
<title>Essen an der OFU</title>
</head>
<body>
<h1 class="text-center">Food for Students</h1>
<div class="container">
<div class="row">
<div class="col m-2 p-3 border border-info rounded">
<h2>Cafeteria Erba-Insel</h2>
<p><span>24.07.</span><span>Rinderhacksteak an Cognacsoße und Spätzle</span></p>
<p><span>25.07.</span><span>Gemüseschnitzel mit Kräutercreme und Kartoffeln</span></p>
<p><span>26.07.</span><span>Penne-Nudeln mit Hackfleischsoße</span></p>
<p><span>27.07.</span><span>Kaiserschmarrn mit Apfelmus</span></p>
</div>
<div class="col m-2 p-3 border border-info rounded">
<h2>Cafeteria Markusplatz</h2>
<p><span>24.07.</span><span>Vegetarisches Chili sin Carne</span></p>
<p><span>25.07.</span><span>Gemüseschnitzel mit Kräutercreme und Kartoffeln</span></p>
<p><span>26.07.</span><span>Überbackene Zucchini an Paprikasoße mit Püree</span></p>
<p><span>27.07.</span><span>Kaiserschmarrn mit Apfelmus</span></p>
</div>
</div>
<div class="row">
<div class="col m-2 p-3 border border-info rounded">
<h2>Speiseplan für Austraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Pizza "Speciale"</p>
<p>Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</p>
<h3>Dienstag 19.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Schweinenackensteak vom Grill mit hausgemachter Kräuterbutter</p>
<p>Pizza "Speciale"</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<h3>Mittwoch 20.09.</h3>
<p>Rindfleisch mit Meerrettich</p>
<p>Griechischer Teller "Kreta" mit Suflaki, Calamari, Bifteki und hausgemachtem Kräuterdip</p>
<p>Nudelpfanne "Mediterrane"</p>
<h3>Donnerstag 21.09.</h3>
<p>Lasagne von der Pute</p>
<p>Apfelstrudel "Tiroler Art" mit Vanillesoße</p>
<p>Wedges mit Kräuterquark</p>
<h3>Freitag 22.09.</h3>
<p>Pangasiusfilet an fränkischer Silvanersoße mit Gemüsestreifen</p>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Schweinerückensteak mit Champignonrahmsoße</p>
<p>Blumenkohlkäsemedaillon mit Pestosoße</p>
</div>
<div class="col m-2 p-3 border border-info rounded">
<h2>Speiseplan für Feldkirchenstraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Schwarzer Heilbutt an Krebsrahmsoße</p>
<p>Pizza "Speciale"</p>
<p>Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</p>
<h3>Dienstag 19.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Pizza "Speciale"</p>
<p>Schweinenackensteak vom Grill mit hausgemachter Kräuterbutter</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<h3>Mittwoch 20.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Rindfleisch mit Meerrettich</p>
<p>Griechischer Teller "Kreta" mit Suflaki, Calamari, Bifteki und hausgemachtem Kräuterdip</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<p>Nudelpfanne "Mediterrane"</p>
<h3>Donnerstag 21.09.</h3>
<p>Lasagne von der Pute</p>
<p>Apfelstrudel "Tiroler Art" mit Vanillesoße</p>
<p>Wedges mit Kräuterquark</p>
<h3>Freitag 22.09.</h3>
<p>Lasagne von der Pute</p>
<p>Pangasiusfilet an fränkischer Silvanersoße mit Gemüsestreifen</p>
<p>Schweinerückensteak mit Champignonrahmsoße</p>
<p>Blumenkohlkäsemedaillon mit Pestosoße</p>
</div>
</div>
<div class="row">
<div class="col m-2 p-3 border border-info rounded">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>Sunday, 24.09.2017</h3>
<p>Leider gibt es heute keine Happy Hours :(</p>
</div>
</div>
</div>
<p class="text-right">Last execute: Monday, 25.09.2017</p>
</body>
</html>

View File

@ -1,9 +0,0 @@
<html>
<head>
<meta http-equiv="refresh" content="60" >
</head>
<body>
<iframe src="https://isfswiaiopen.wiai.de/" width=100% height=100% frameborder=0 scrolling=no></iframe>
</body>
</html>

View File

@ -1,10 +0,0 @@
<!doctype html><html lang="de"><head><meta charset="utf-8"><meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg"><meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg"><link rel="stylesheet" href="../css/bootstrap-4.0.0-beta-dist/css/bootstrap.css"><title>Essen an der OFU</title></head><body><p>Last execute: 24.09.2017</p><div class="container"><div class="row"><div class="col"><h2>Cafeteria Erba-Insel</h2><p class="bodytext">24.07. Rinderhacksteak an Cognacsoße und Spätzle<br/>25.07.  Gemüseschnitzel mit Kräutercreme und Kartoffeln<br/>26.07.  Penne-Nudeln mit Hackfleischsoße<br/>27.07.  Kaiserschmarrn mit Apfelmus</p></div><div class="col"><h2>Cafeteria Markusplatz</h2><p class="bodytext">24.07.  Vegetarisches Chili sin Carne<br/>25.07.  Gemüseschnitzel mit Kräutercreme und Kartoffeln<br/>26.07.  Überbackene Zucchini an Paprikasoße mit Püree<br/>27.07.  Kaiserschmarrn mit Apfelmus</p></div></div><div class="row"><div class="col"><div><h2>Mensa Austraße</h2><h5>Montag 18.09.</h5><div class="title">Rindergeschnetzeltes "Provencial"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=511e047953ee1370c3b82c11a04624bb#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Pizza "Speciale"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=511e047953ee1370c3b82c11a04624bb#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=511e047953ee1370c3b82c11a04624bb#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a></div></div><div class="col"><div><h2>Feki Mensa</h2><h5>Montag 18.09.</h5><div class="title">Rindergeschnetzeltes "Provencial"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Schwarzer Heilbutt an Krebsrahmsoße</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Pizza "Speciale"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a></div></div></div><div class="row"><div class="col"><h2>Feki.de Happy Hour Guide</h2><div class="tab-pane" id="food" role="tabpanel">
<h2>Aktuelle HappyHours</h2>
<table class="table">
</table>
<p>Leider sind gerade keine HappyHours :( </p>
<h2>Kommende HappyHours</h2>
<table class="table">
</table>
<p>Leider kommen keine HappyHours mehr :( </p>
</div></div></div></div></body></html>

View File

@ -1 +0,0 @@
{"name": "Speiseplan f\u00fcr Austra\u00dfe Bamberg", "weekmenu": [{"menu": ["Rindergeschnetzeltes \"Provencial\"", "Pizza \"Speciale\"", "Gebackene Kartoffeltaschen \"Kr\u00e4uterfrischk\u00e4se\" an Salatgarnitur"], "date": "Montag 18.09."}, {"menu": ["H\u00e4hnchenpiccata an Tomatenragout", "Schweinenackensteak vom Grill mit hausgemachter Kr\u00e4uterbutter", "Pizza \"Speciale\"", "Kokos Gem\u00fcsecurry \"Thai Style\" mit Wildreis"], "date": "Dienstag 19.09."}, {"menu": ["Rindfleisch mit Meerrettich", "Griechischer Teller \"Kreta\" mit Suflaki, Calamari, Bifteki und hausgemachtem Kr\u00e4uterdip", "Nudelpfanne \"Mediterrane\""], "date": "Mittwoch 20.09."}, {"menu": ["Lasagne von der Pute", "Apfelstrudel \"Tiroler Art\" mit Vanilleso\u00dfe", "Wedges mit Kr\u00e4uterquark"], "date": "Donnerstag 21.09."}, {"menu": ["Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "Rindergeschnetzeltes \"Provencial\"", "Schweiner\u00fcckensteak mit Champignonrahmso\u00dfe", "Blumenkohlk\u00e4semedaillon mit Pestoso\u00dfe"], "date": "Freitag 22.09."}]}

View File

@ -1 +0,0 @@
{"name": "Cafeteria Erba-Insel", "weekmenu": [{"menu": ["Rinderhacksteak an Cognacso\u00dfe und Sp\u00e4tzle"], "date": "24.07."}, {"menu": ["Gem\u00fcseschnitzel mit Kr\u00e4utercreme und Kartoffeln"], "date": "25.07."}, {"menu": ["Penne-Nudeln mit Hackfleischso\u00dfe"], "date": "26.07."}, {"menu": ["Kaiserschmarrn mit Apfelmus"], "date": "27.07."}]}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"day": "Sunday, 24.09.2017", "happyhours": []}

View File

@ -1 +0,0 @@
{"name": "Speiseplan f\u00fcr Feldkirchenstra\u00dfe Bamberg", "weekmenu": [{"menu": ["Rindergeschnetzeltes \"Provencial\"", "Schwarzer Heilbutt an Krebsrahmso\u00dfe", "Pizza \"Speciale\"", "Gebackene Kartoffeltaschen \"Kr\u00e4uterfrischk\u00e4se\" an Salatgarnitur"], "date": "Montag 18.09."}, {"menu": ["H\u00e4hnchenpiccata an Tomatenragout", "Pizza \"Speciale\"", "Schweinenackensteak vom Grill mit hausgemachter Kr\u00e4uterbutter", "Kokos Gem\u00fcsecurry \"Thai Style\" mit Wildreis"], "date": "Dienstag 19.09."}, {"menu": ["H\u00e4hnchenpiccata an Tomatenragout", "Rindfleisch mit Meerrettich", "Griechischer Teller \"Kreta\" mit Suflaki, Calamari, Bifteki und hausgemachtem Kr\u00e4uterdip", "Kokos Gem\u00fcsecurry \"Thai Style\" mit Wildreis", "Nudelpfanne \"Mediterrane\""], "date": "Mittwoch 20.09."}, {"menu": ["Lasagne von der Pute", "Apfelstrudel \"Tiroler Art\" mit Vanilleso\u00dfe", "Wedges mit Kr\u00e4uterquark"], "date": "Donnerstag 21.09."}, {"menu": ["Lasagne von der Pute", "Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "Schweiner\u00fcckensteak mit Champignonrahmso\u00dfe", "Blumenkohlk\u00e4semedaillon mit Pestoso\u00dfe"], "date": "Freitag 22.09."}]}

View File

@ -1 +0,0 @@
{"name": "Cafeteria Markusplatz", "weekmenu": [{"menu": ["Vegetarisches Chili sin Carne"], "date": "24.07."}, {"menu": ["Gem\u00fcseschnitzel mit Kr\u00e4utercreme und Kartoffeln"], "date": "25.07."}, {"menu": ["\u00dcberbackene Zucchini an Paprikaso\u00dfe mit P\u00fcree"], "date": "26.07."}, {"menu": ["Kaiserschmarrn mit Apfelmus"], "date": "27.07."}]}

File diff suppressed because one or more lines are too long

View File

@ -1,144 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" bootstrap.css ">
<title>Essen an der OFU</title>
</head>
<body>
<h1>Food for Students</h1>
<p>Last execute: Sunday, 24.09.2017</p>
<div class="container">
<div class="row">
<div class="col">
<h2>Cafeteria Erba-Insel</h2>
<p><span>Essen am 24.07.</span><span>['Rinderhacksteak an Cognacsoße und Spätzle']</span></p>
<p><span>Essen am 25.07.</span><span>['Gemüseschnitzel mit Kräutercreme und Kartoffeln']</span></p>
<p><span>Essen am 26.07.</span><span>['Penne-Nudeln mit Hackfleischsoße']</span></p>
<p><span>Essen am 27.07.</span><span>['Kaiserschmarrn mit Apfelmus']</span></p>
</div>
<div class="col">
<h2>Cafeteria Markusplatz</h2>
<p><span>Essen am 24.07.</span><span>['Vegetarisches Chili sin Carne']</span></p>
<p><span>Essen am 25.07.</span><span>['Gemüseschnitzel mit Kräutercreme und Kartoffeln']</span></p>
<p><span>Essen am 26.07.</span><span>['Überbackene Zucchini an Paprikasoße mit Püree']</span></p>
<p><span>Essen am 27.07.</span><span>['Kaiserschmarrn mit Apfelmus']</span></p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Speiseplan für Austraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Dienstag 19.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Mittwoch 20.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Donnerstag 21.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Freitag 22.09.</h3>
<p>menu</p>
<p>date</p>
</div>
<div class="col">
<h2>Speiseplan für Feldkirchenstraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Dienstag 19.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Mittwoch 20.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Donnerstag 21.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Freitag 22.09.</h3>
<p>menu</p>
<p>date</p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>Sunday, 24.09.2017</h3>
<table>
<thead>
<tr>
<th>Location</th>
<th>Time</th>
<th>Description</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

View File

@ -1,868 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="9425633f-e857-40f1-8ce2-44554cae0276" name="Default" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/ofu_food$foodplan_parser_controler.coverage" NAME="foodplan-parser-controler Coverage Results" MODIFIED="1506277850230" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$mensa_page_parser.coverage" NAME="mensa-page-parser Coverage Results" MODIFIED="1506198388515" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$html_generator.coverage" NAME="html-generator Coverage Results" MODIFIED="1506561398373" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$fekide_happyhour_page_parser.coverage" NAME="fekide-happyhour-page-parser Coverage Results" MODIFIED="1506204094485" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$eventpage_parser_controller.coverage" NAME="eventpage-parser-controller Coverage Results" MODIFIED="1506558155597" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/events" />
<SUITE FILE_PATH="coverage/ofu_food$cafete_page_parser.coverage" NAME="cafete-page-parser Coverage Results" MODIFIED="1506201552685" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$ofu_food.coverage" NAME="ofu-food Coverage Results" MODIFIED="1506272180490" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$ofu_eventpage_parser.coverage" NAME="ofu-eventpage-parser Coverage Results" MODIFIED="1506559265258" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/events" />
<SUITE FILE_PATH="coverage/ofu_food$generator_food_page.coverage" NAME="generator-food-page Coverage Results" MODIFIED="1506346677743" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="fekide-eventpage-parser.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/events/fekide-eventpage-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="820">
<caret line="41" column="4" lean-forward="false" selection-start-line="41" selection-start-column="4" selection-end-line="41" selection-end-column="24" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ofu-eventpage-parser.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/events/ofu-eventpage-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="700">
<caret line="35" column="4" lean-forward="false" selection-start-line="35" selection-start-column="4" selection-end-line="35" selection-end-column="4" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="events.jinja" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/templates/events.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="12" column="54" lean-forward="false" selection-start-line="12" selection-start-column="54" selection-end-line="12" selection-end-column="54" />
<folding>
<element signature="n#style#0;n#div#0;n#div#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="eventpage-parser-controller.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/events/eventpage-parser-controller.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="10" column="0" lean-forward="true" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="html-generator.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/html-generator.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="220">
<caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="2" selection-end-line="14" selection-end-column="27" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/cafete-page-parser.py" />
<option value="$PROJECT_DIR$/mensa-page-parser.py" />
<option value="$PROJECT_DIR$/fekide-happyhour-page-parser.py" />
<option value="$PROJECT_DIR$/foodplan-parser-controler.py" />
<option value="$PROJECT_DIR$/generator-food-page.py" />
<option value="$PROJECT_DIR$/css-install-skript.py" />
<option value="$PROJECT_DIR$/ofu-food.py" />
<option value="$PROJECT_DIR$/food/foodplan-parser-controler.py" />
<option value="$PROJECT_DIR$/templates/food.jinja" />
<option value="$PROJECT_DIR$/events/fekide-eventpage-parser.py" />
<option value="$PROJECT_DIR$/food/generator-food-page.py" />
<option value="$PROJECT_DIR$/events/eventpage-parser-controller.py" />
<option value="$PROJECT_DIR$/events/ofu-eventpage-parser.py" />
<option value="$PROJECT_DIR$/templates/events.jinja" />
<option value="$PROJECT_DIR$/html-generator.py" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="ProjectFrameBounds">
<option name="y" value="27" />
<option name="width" value="1920" />
<option name="height" value="1053" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="templates" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="events" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scratches" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/food" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Python.html-generator">
<configuration default="false" name="foodplan-parser-controler" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/food/foodplan-parser-controler.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="generator-food-page" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/food/generator-food-page.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="ofu-eventpage-parser" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/events" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/events/ofu-eventpage-parser.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="eventpage-parser-controller" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/events" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/events/eventpage-parser-controller.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="html-generator" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/html-generator.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="TARGET" value="" />
<option name="SETTINGS_FILE" value="" />
<option name="CUSTOM_SETTINGS" value="false" />
<option name="USE_OPTIONS" value="false" />
<option name="OPTIONS" value="" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
<node-interpreter value="project" />
<working-dir value="" />
<envs />
<scope-kind value="ALL" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
<method />
</configuration>
<configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
<method />
</configuration>
<configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
<method />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="true" type="Tox" factoryName="Tox">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<module name="ofu-food" />
<method />
</configuration>
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<node-interpreter>project</node-interpreter>
<node-options />
<gulpfile />
<tasks />
<arguments />
<envs />
<method />
</configuration>
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run" />
<scripts />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;.&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
<method />
</configuration>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="Python.foodplan-parser-controler" />
<item index="1" class="java.lang.String" itemvalue="Python.generator-food-page" />
<item index="2" class="java.lang.String" itemvalue="Python.ofu-eventpage-parser" />
<item index="3" class="java.lang.String" itemvalue="Python.eventpage-parser-controller" />
<item index="4" class="java.lang.String" itemvalue="Python.html-generator" />
</list>
<recent_temporary>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="Python.html-generator" />
<item index="1" class="java.lang.String" itemvalue="Python.ofu-eventpage-parser" />
<item index="2" class="java.lang.String" itemvalue="Python.eventpage-parser-controller" />
<item index="3" class="java.lang.String" itemvalue="Python.generator-food-page" />
<item index="4" class="java.lang.String" itemvalue="Python.foodplan-parser-controler" />
</list>
</recent_temporary>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="9425633f-e857-40f1-8ce2-44554cae0276" name="Default" comment="" />
<created>1506172952943</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1506172952943</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="0" y="27" width="1920" height="1053" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.26549146" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.35191256" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="processedProjectFiles" value="true" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="1" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/food/mensa-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="880">
<caret line="46" column="43" lean-forward="false" selection-start-line="46" selection-start-column="34" selection-end-line="46" selection-end-column="43" />
<folding>
<element signature="e#0#15#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/css-install-skript.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="48" lean-forward="false" selection-start-line="4" selection-start-column="48" selection-end-line="4" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="54" lean-forward="false" selection-start-line="8" selection-start-column="54" selection-end-line="8" selection-end-column="54" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="18" column="0" lean-forward="false" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
<folding>
<element signature="e#0#13#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="480">
<caret line="24" column="8" lean-forward="false" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/mensa-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="880">
<caret line="46" column="43" lean-forward="false" selection-start-line="46" selection-start-column="34" selection-end-line="46" selection-end-column="43" />
<folding>
<element signature="e#0#15#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/css-install-skript.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="48" lean-forward="false" selection-start-line="4" selection-start-column="48" selection-end-line="4" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="54" lean-forward="false" selection-start-line="8" selection-start-column="54" selection-end-line="8" selection-end-column="54" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="18" column="0" lean-forward="false" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
<folding>
<element signature="e#0#13#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="480">
<caret line="24" column="8" lean-forward="false" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/mensa-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="880">
<caret line="46" column="43" lean-forward="false" selection-start-line="46" selection-start-column="34" selection-end-line="46" selection-end-column="43" />
<folding>
<element signature="e#0#15#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/css-install-skript.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="48" lean-forward="false" selection-start-line="4" selection-start-column="48" selection-end-line="4" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="54" lean-forward="false" selection-start-line="8" selection-start-column="54" selection-end-line="8" selection-end-column="54" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="980">
<caret line="49" column="39" lean-forward="false" selection-start-line="49" selection-start-column="39" selection-end-line="49" selection-end-column="39" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="18" column="0" lean-forward="false" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
<folding>
<element signature="e#0#13#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/ofu-food.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="100">
<caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
<folding>
<element signature="e#43#58#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/css-install-skript.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="48" lean-forward="false" selection-start-line="4" selection-start-column="48" selection-end-line="4" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1460">
<caret line="73" column="60" lean-forward="false" selection-start-line="73" selection-start-column="60" selection-end-line="73" selection-end-column="60" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="14" column="44" lean-forward="false" selection-start-line="14" selection-start-column="44" selection-end-line="14" selection-end-column="44" />
<folding>
<element signature="e#0#13#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/ofu-food.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="15" column="14" lean-forward="false" selection-start-line="15" selection-start-column="14" selection-end-line="15" selection-end-column="62" />
<folding>
<element signature="e#43#58#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1460">
<caret line="73" column="60" lean-forward="false" selection-start-line="73" selection-start-column="60" selection-end-line="73" selection-end-column="60" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="500">
<caret line="27" column="20" lean-forward="false" selection-start-line="27" selection-start-column="20" selection-end-line="27" selection-end-column="20" />
<folding>
<element signature="e#0#13#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="1" column="0" lean-forward="true" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Json_Files/austr-mensa.json" />
<entry file="file://$PROJECT_DIR$/food.html" />
<entry file="file://$PROJECT_DIR$/Json_Files/feki-happyhour-guide.json" />
<entry file="file://$PROJECT_DIR$/food/cafete-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="336">
<caret line="40" column="4" lean-forward="false" selection-start-line="40" selection-start-column="4" selection-end-line="44" selection-end-column="7" />
<folding>
<element signature="e#0#15#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Json_Files/erba-cafete.json" />
<entry file="file://$PROJECT_DIR$/Json_Files/feki-mensa.json" />
<entry file="file://$PROJECT_DIR$/css-install-skript.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="48" lean-forward="false" selection-start-line="4" selection-start-column="48" selection-end-line="4" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/fekide-happyhour-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-125">
<caret line="23" column="37" lean-forward="true" selection-start-line="23" selection-start-column="37" selection-end-line="23" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="320">
<caret line="16" column="0" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="62" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="940">
<caret line="59" column="6" lean-forward="false" selection-start-line="59" selection-start-column="6" selection-end-line="59" selection-end-column="6" />
<folding>
<element signature="e#0#13#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/ofu-food.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-659">
<caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/mensa-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="920">
<caret line="46" column="43" lean-forward="false" selection-start-line="46" selection-start-column="34" selection-end-line="46" selection-end-column="43" />
<folding>
<element signature="e#0#15#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/events/fekide-eventpage-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="820">
<caret line="41" column="4" lean-forward="false" selection-start-line="41" selection-start-column="4" selection-end-line="41" selection-end-column="24" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/events/eventpage-parser-controller.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="10" column="0" lean-forward="true" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="15" column="20" lean-forward="true" selection-start-line="15" selection-start-column="20" selection-end-line="15" selection-end-column="58" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/events/ofu-eventpage-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="700">
<caret line="35" column="4" lean-forward="false" selection-start-line="35" selection-start-column="4" selection-end-line="35" selection-end-column="4" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/events.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="12" column="54" lean-forward="false" selection-start-line="12" selection-start-column="54" selection-end-line="12" selection-end-column="54" />
<folding>
<element signature="n#style#0;n#div#0;n#div#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/html-generator.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="220">
<caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="2" selection-end-line="14" selection-end-column="27" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>

View File

@ -1,8 +0,0 @@
from shutil import copytree
# PI
OUTPUTFILE = "/media/data_1/www/pub-html/ofu-food.html"
CSSFILE_SRC = "../css/bootstrap-4.0.0-beta-dist"
CSSFILE_DEST = "/media/data_1/www/css/bootstrap-4.0.0-beta-dist"
copytree(CSSFILE_SRC, CSSFILE_DEST)

View File

@ -1,30 +0,0 @@
import importlib
UNIVIS_RPG_URL = "http://univis.uni-bamberg.de/prg?search=events&show=xml"
ofu_event_parser = importlib.import_module('ofu-eventpage-parser')
# fekide_event_parser = importlib.import_module('fekide-eventpage-parser')
# JSON_OUTPUT_DIR = "../../json/"
# PI
JSON_OUTPUT_DIR = "/media/data_1/www/pub-html/events/json/"
def writeToFile(jsonfile, filename):
with open((JSON_OUTPUT_DIR + filename), "w") as file:
file.write(jsonfile)
def main():
try:
ofuEventsJson = ofu_event_parser.parsePage(UNIVIS_RPG_URL)
except IndexError:
print("Error")
ofuEventsJson = {}
writeToFile(ofuEventsJson, "events-ofu.json")
# writeToFile(fekidehappyhourJson, "feki-happyhour-guide.json")
main()

View File

@ -1,53 +0,0 @@
import requests
from bs4 import BeautifulSoup
import datetime
import json
SPEISEPLAN_NAME_SELECTOR = '.csc-default .csc-header .csc-firstHeader'
def loadPage(url: str):
return requests.get(url).content
def getDay():
return datetime.datetime.today().strftime("%A, %d.%m.%Y")
def getHappyHours(soup):
happyhours = []
happyhourstable = soup.select('#food .table tr')
for tableline in happyhourstable:
happyhour = {}
linesoup = BeautifulSoup(str(tableline), "lxml")
location = linesoup.find("td", {"class": "location"}).getText()
time = linesoup.find("td", {"class": "time"}).getText()
description = linesoup.find("td", {"class": "description"}).getText()
description = str(description).strip()
happyhour['location'] = location
happyhour['time'] = time
happyhour['description'] = description
happyhours.append(happyhour)
return happyhours
def parsePage(url: str):
pagecontent = {}
# {
# happyhours:[{happyhour:{location: "",time: "",description: ""},,,,]
# }
happyhours = []
page = loadPage(url)
soup = BeautifulSoup(page, "lxml")
happyhours = getHappyHours(soup)
pagecontent['happyhours'] = happyhours
pagecontent['day'] = getDay()
jsondata = json.dumps(pagecontent)
return jsondata
# LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour/wochenuebersicht"
# parsePage(LINK_FEKIDE_GUIDE)

View File

@ -1,62 +0,0 @@
import importlib
mensapageparser = importlib.import_module('mensa-page-parser')
cafetepageparser = importlib.import_module('cafete-page-parser')
fekidehappyhourpageparser = importlib.import_module('fekide-happyhour-page-parser')
# JSON_OUTPUT_DIR = "../json/"
# PI
JSON_OUTPUT_DIR = "/media/data_1/www/pub-html/ofu-food/json/"
LINK_FEKI_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=c3fe5ebb35e5fba3794f01878e798b7c"
LINK_AUSTR_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=511e047953ee1370c3b82c11a04624bb"
LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-erba-insel.html"
LINK_MARKUS_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-markusplatz.html"
LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour"
def writeToFile(jsonfile, filename):
with open((JSON_OUTPUT_DIR + filename), "w") as file:
file.write(jsonfile)
def main():
try:
fekiMensaJson = mensapageparser.parsePage(LINK_FEKI_MENSA)
except IndexError:
print("Error")
fekiMensaJson = {}
try:
austrMensaJson = mensapageparser.parsePage(LINK_AUSTR_MENSA)
except IndexError:
print("Error")
austrMensaJson = {}
try:
erbaCafeteJson = cafetepageparser.parsePage(LINK_ERBA_CAFETE)
except IndexError:
print("Error")
erbaCafeteJson = {}
try:
markusCafeteJson = cafetepageparser.parsePage(LINK_MARKUS_CAFETE)
except IndexError:
print("Error")
markusCafeteJson = {}
try:
fekidehappyhourJson = fekidehappyhourpageparser.parsePage(LINK_FEKIDE_GUIDE)
except IndexError:
print("Error")
fekidehappyhourJson = {}
writeToFile(fekiMensaJson, "feki-mensa.json")
writeToFile(austrMensaJson, "austr-mensa.json")
writeToFile(erbaCafeteJson, "erba-cafete.json")
writeToFile(markusCafeteJson, "markus-cafete.json")
writeToFile(fekidehappyhourJson, "feki-happyhour-guide.json")
main()

View File

@ -1,60 +0,0 @@
import jinja2
import json
import datetime
from jinja2 import Environment, FileSystemLoader
# Config global
CSSFILE_WEB = "../css/bootstrap-4.0.0-beta-dist/css/bootstrap.css"
TEMPLATE_PATH = 'food.jinja'
# Config Thinkpad
# JSON_FILES_PATH = "../json/"
# OUTPUT = "../html/food.html"
# JINJA_PATH = 'templates/'
# PI
JSON_FILES_PATH = "/media/data_1/www/pub-html/ofu-food/json/"
OUTPUT = "/media/data_1/www/pub-html/ofu-food/food.html"
JINJA_PATH = '/media/data_1/skripts/ofu-app-webskripts/ofu-food/templates/'
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def main():
erbaJson = getJsonFromFile(JSON_FILES_PATH + "erba-cafete.json")
markusJson = getJsonFromFile(JSON_FILES_PATH + "markus-cafete.json")
fekiJson = getJsonFromFile(JSON_FILES_PATH + "feki-mensa.json")
austrJson = getJsonFromFile(JSON_FILES_PATH + "austr-mensa.json")
fekideJson = getJsonFromFile(JSON_FILES_PATH + "feki-happyhour-guide.json")
env = Environment(loader=FileSystemLoader(JINJA_PATH))
template = env.get_template(TEMPLATE_PATH)
templateVars = {
"cssfile": CSSFILE_WEB,
"executiontime": datetime.datetime.today().strftime("%A, %d.%m.%Y"),
"erbaCafeteTitle": erbaJson['name'],
"erbaWeekmenu": erbaJson['weekmenu'],
"markusCafeteTitle": markusJson['name'],
"markusWeekmenu": markusJson['weekmenu'],
"austrMensaTitle": austrJson['name'],
"austrWeekmenu": austrJson['weekmenu'],
"fekiMensaTitle": fekiJson['name'],
"fekiWeekmenu": fekiJson['weekmenu'],
"happyHourDay": fekideJson['day'],
"happyhours": fekideJson['happyhours'],
}
# Template Vars: cssfile, executiontime, erbaCafeteTitle, erbaWeekmenu, markusCafeteTitle, markusWeekmenu, austrMensaTitle, austrWeekmenu, fekiMensaTitle, fekiWeekmenu, happyHourDay, happyhours
html = template.render(templateVars)
with open(OUTPUT, "w") as file:
file.write(html)
main()

View File

@ -1,162 +0,0 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import datetime
CSSFILE_WEB = "../css/bootstrap-4.0.0-beta-dist/css/bootstrap.css"
# thinkpad
# OUTPUTFILE = "../html/ofu-food.html"
# PI
OUTPUTFILE = "/media/data_1/www/pub-html/ofu-food.html"
LINK_FEKI_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=c3fe5ebb35e5fba3794f01878e798b7c"
LINK_AUSTR_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=511e047953ee1370c3b82c11a04624bb"
LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-erba-insel.html"
LINK_MARKUS_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-markusplatz.html"
LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour"
def getHtmlHeader():
head = '<head>'
head += '<meta charset="utf-8">'
head += '<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">'
head += '<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">'
head += '<link rel="stylesheet" href="' + CSSFILE_WEB + '">'
head += '<title>Essen an der OFU</title>'
head += '</head>'
return head
def getExecuteTime():
return "<p>Last execute: " + datetime.datetime.today().strftime("%d.%m.%Y") + "</p>"
def getFoodHtml(erbaHtml, markusHtml, austrHtml, fekiHtml, happyHourHtml):
html = '<!doctype html>'
html += '<html lang="de">'
html += getHtmlHeader()
html += '<body>'
html += getExecuteTime()
html += '<div class="container">'
html += '<div class="row">'
html += '<div class="col">'
html += str(erbaHtml)
html += '</div>'
html += '<div class="col">'
html += str(markusHtml)
html += '</div>'
html += '</div>'
html += '<div class="row">'
html += '<div class="col">'
html += str(austrHtml)
html += '</div>'
html += '<div class="col">'
html += str(fekiHtml)
html += '</div>'
html += '</div>'
html += '<div class="row">'
html += '<div class="col">'
html += str(happyHourHtml)
html += '</div>'
html += '</div>'
html += '</div>'
html += '</body>'
html += '</html>'
return html
def getFoodDiv(html, divClass):
soup = BeautifulSoup(html, "lxml")
return soup.find("div", {"class": divClass})
def getHappyHourGuideFood(html):
soup = BeautifulSoup(html, "lxml")
return soup.find("div", {"id": "food"})
def getWebPages():
erbaCafete = requests.get(LINK_ERBA_CAFETE).content
markusCafete = requests.get(LINK_MARKUS_CAFETE).content
austrMensa = requests.get(LINK_AUSTR_MENSA).content
fekiMensa = requests.get(LINK_FEKI_MENSA).content
happyHourGuide = requests.get(LINK_FEKIDE_GUIDE).content
return (erbaCafete, markusCafete, austrMensa, fekiMensa, happyHourGuide)
def getSpecificParts():
erbaCafete, markusCafete, austrMensa, fekiMensa, happyHourGuide = getWebPages()
erbaCafeteFood = getFoodDiv(erbaCafete, "csc-default")
markusCafeteFood = getFoodDiv(markusCafete, "csc-default")
austrMensaFood = getFoodDiv(austrMensa, "day")
fekiMensaFood = getFoodDiv(fekiMensa, "day")
happyHourGuideFood = getHappyHourGuideFood(happyHourGuide)
return (erbaCafeteFood, markusCafeteFood, austrMensaFood, fekiMensaFood, happyHourGuideFood)
def writeHtml(html):
with open(OUTPUTFILE, "w") as file:
file.write(html)
def stripCafeteFood(html):
soup = BeautifulSoup(str(html), "lxml")
food = soup.find_all("p", {"class": "bodytext"})
return food[(food.__len__() - 2)]
def htmlErbaCafete(food):
html = '<h2>Cafeteria Erba-Insel</h2>'
html += str(food)
return html
def htmlMarkusCafete(food):
html = '<h2>Cafeteria Markusplatz</h2>'
html += str(food)
return html
def htmlHappyHour(food):
html = '<h2>Feki.de Happy Hour Guide</h2>'
html += str(food)
return html
def getFoodMensa(austrMensaFood, title):
html = '<div>'
html += '<h2>' + title + '</h2>'
soup = BeautifulSoup(str(austrMensaFood), "lxml")
foodDay = soup.find("div", {"class": "day"}).h5
html += str(foodDay)
foods = soup.find_all("article", {"class": "menu"})
for food in foods:
soupSingleFood = BeautifulSoup(str(food), "lxml")
singleFood = soupSingleFood.find("div", {"class": "title"})
alergenLink = soupSingleFood.find("div", {"class": "additnr"}).a
html += str(singleFood)
html += str(alergenLink)
html += '</div>'
return html
def main():
(erbaCafeteFood, markusCafeteFood, austrMensaFood, fekiMensaFood, happyHourGuideFood) = getSpecificParts()
erbaCafeteFood = stripCafeteFood(erbaCafeteFood)
erbaCafeteFood = htmlErbaCafete(erbaCafeteFood)
markusCafeteFood = stripCafeteFood(markusCafeteFood)
markusCafeteFood = htmlMarkusCafete(markusCafeteFood)
happyHourGuideFood = htmlHappyHour(happyHourGuideFood)
austrMensaFood = getFoodMensa(austrMensaFood, "Mensa Austraße")
fekiMensaFood = getFoodMensa(fekiMensaFood, "Feki Mensa")
html = getFoodHtml(erbaCafeteFood, markusCafeteFood, austrMensaFood, fekiMensaFood, happyHourGuideFood)
writeHtml(html)
main()

View File

@ -1,61 +0,0 @@
import jinja2
import json
import datetime
from jinja2 import Environment, FileSystemLoader
from pprint import pprint
# Config global
TEMPLATE_PATH = 'events.jinja'
# Config Thinkpad
# CSSFILE_WEB = "../css/bootstrap-4.0.0-beta-dist/css/bootstrap.css"
# JSON_FILES_PATH = "../json/"
# OUTPUT = "../html/event.html"
# JINJA_PATH = 'templates/'
# PI
CSSFILE_WEB = "../../css/bootstrap-4.0.0-beta-dist/css/bootstrap.css"
JSON_FILES_PATH = "/media/data_1/www/pub-html/events/json/"
OUTPUT = "/media/data_1/www/pub-html/events/index.html"
JINJA_PATH = '/media/data_1/skripts/ofu-app-webskripts/ofu-food/templates/'
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def getTemplate():
env = Environment(loader=FileSystemLoader(JINJA_PATH))
return env.get_template(TEMPLATE_PATH)
def writeHtml(html):
with open(OUTPUT, "w") as file:
file.write(html)
def resolveDates(json):
for event in json['UnivIS']['Event']:
start_datetime = datetime.datetime.strptime(event['startdate'], "%Y-%m-%d").strftime("%d.%m.%Y")
event['startdate'] = start_datetime
end_datetime = datetime.datetime.strptime(event['enddate'], "%Y-%m-%d").strftime("%d.%m.%Y")
event['enddate'] = end_datetime
def main():
ofuEventsJson = getJsonFromFile(JSON_FILES_PATH + "events-ofu.json")
resolveDates(ofuEventsJson)
template = getTemplate()
templateVars = {
"cssfile": CSSFILE_WEB,
"events_wrapper": ofuEventsJson,
}
writeHtml(template.render(templateVars))
main()

View File

@ -1,38 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für Events universitärer- oder universitäts-naher Veranstaltungen">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg, Events">
<link rel="stylesheet" href=" {{ cssfile }} ">
<title>Events an der OFU</title>
</head>
<body>
<p class="text-right">Last execute: {{ events_wrapper.last_execute }}</p>
<h1 class="text-center">Events for Students</h1>
<div class="container">
<div class="row">
{% for event in events_wrapper.UnivIS.Event %}
<div class="col-12 col-sm-6 col-md-6">
<div class="card mb-3 border border-info rounded" style="height: 99%; width: 100%;">
<div class="card-body">
<h4>{{ event.title }}</h4>
<p>Beginn: {{ event.startdate }} at {{ event.starttime }}</p>
<p>Ende: {{ event.enddate }} at {{ event.endtime }}</p>
{% if event.rooms %}
<p>Veranstaltungsort: {{ event.rooms.room.short }}</p>
{% endif %}
<p>{{ event.description }}</p>
<p>Organisator: {{ event.orgname }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</body>
</html>

View File

@ -1,81 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" {{ cssfile }} ">
<title>Essen an der OFU</title>
</head>
<body>
<h1 class="text-center">Food for Students</h1>
<div class="container">
<div class="row">
<div class="col m-2 p-3 border border-info rounded">
<h2>{{ erbaCafeteTitle }}</h2>
{% for menu in erbaWeekmenu %}
<p><span>{{ menu.date }}</span><span>{{ menu.menu[0] }}</span></p>
{% endfor %}
</div>
<div class="col m-2 p-3 border border-info rounded">
<h2>{{ markusCafeteTitle }}</h2>
{% for menu in markusWeekmenu %}
<p><span>{{ menu.date }}</span><span>{{ menu.menu[0] }}</span></p>
{% endfor %}
</div>
</div>
<div class="row">
<div class="col m-2 p-3 border border-info rounded">
<h2>{{ austrMensaTitle }}</h2>
{% for dayMenu in austrWeekmenu %}
<h3>{{ dayMenu.date }}</h3>
{% for singleFood in dayMenu.menu %}
<p>{{ singleFood }}</p>
{% endfor %}
{% endfor %}
</div>
<div class="col m-2 p-3 border border-info rounded">
<h2>{{ fekiMensaTitle }}</h2>
{% for dayMenu in fekiWeekmenu %}
<h3>{{ dayMenu.date }}</h3>
{% for singleFood in dayMenu.menu %}
<p>{{ singleFood }}</p>
{% endfor %}
{% endfor %}
</div>
</div>
<div class="row">
<div class="col m-2 p-3 border border-info rounded">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>{{ happyHourDay }}</h3>
{% if happyhours %}
<table class="table">
<thead class="thead-inverse">
<tr>
<th>Location</th>
<th>Time</th>
<th>Description</th>
</tr>
</thead>
<tbody>
{% for happyhour in happyhours %}
<tr>
<td>{{ happyhour.location }}</td>
<td>{{ happyhour.time }}</td>
<td>{{ happyhour.description }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>Leider gibt es heute keine Happy Hours :(</p>
{% endif %}
</div>
</div>
</div>
<p class="text-right">Last execute: {{ executiontime }}</p>
</body>
</html>

View File

@ -2,7 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ofu-food.iml" filepath="$PROJECT_DIR$/.idea/ofu-food.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/ofu_app.iml" filepath="$PROJECT_DIR$/.idea/ofu_app.iml" />
</modules>
</component>
</project>

24
ofu_app/.idea/ofu_app.iml generated Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="FacetManager">
<facet type="django" name="Django">
<configuration>
<option name="rootFolder" value="$MODULE_DIR$" />
<option name="settingsModule" value="ofu_app/settings.py" />
<option name="manageScript" value="$MODULE_DIR$/manage.py" />
<option name="environment" value="&lt;map/&gt;" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">
<option name="TEMPLATE_CONFIGURATION" value="Django" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

996
ofu_app/.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,996 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="f783ff92-97a9-4cab-8b91-b76bd998ba56" name="Default" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/ofu_app$controller_json_food.coverage" NAME="controller-json-food Coverage Results" MODIFIED="1506703105217" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/data_collectors/food/json_generator" />
<SUITE FILE_PATH="coverage/ofu_app$fekide_eventpage_parser.coverage" NAME="fekide-eventpage-parser Coverage Results" MODIFIED="1506732818806" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/data_collectors/events/parser" />
<SUITE FILE_PATH="coverage/ofu_app$migrate_data__1_.coverage" NAME="migrate-data (1) Coverage Results" MODIFIED="1506734928822" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/data_collectors/events" />
<SUITE FILE_PATH="coverage/ofu_app$migrate_data.coverage" NAME="migrate-data Coverage Results" MODIFIED="1506734953380" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/data_collectors/food" />
<SUITE FILE_PATH="coverage/ofu_app$controller_json_events.coverage" NAME="controller-json-events Coverage Results" MODIFIED="1506733064332" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/data_collectors/events/json_generator" />
</component>
<component name="DjangoConsoleOptions" custom-start-script="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)">
<option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="settings.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ofu_app/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2980">
<caret line="149" column="18" lean-forward="false" selection-start-line="149" selection-start-column="18" selection-end-line="149" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="models.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/food/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="12" column="12" lean-forward="false" selection-start-line="12" selection-start-column="4" selection-end-line="12" selection-end-column="12" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="daily_food.jinja" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/templates/food/daily_food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="3" selection-end-line="4" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="food.jinja" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/templates/food/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="3" column="11" lean-forward="false" selection-start-line="3" selection-start-column="11" selection-end-line="3" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="week_events.jinja" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/templates/events/week_events.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="11" lean-forward="false" selection-start-line="4" selection-start-column="11" selection-end-line="4" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="base.jinja" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/templates/base.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="460">
<caret line="23" column="24" lean-forward="false" selection-start-line="23" selection-start-column="17" selection-end-line="23" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="views.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/food/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="13" column="35" lean-forward="false" selection-start-line="13" selection-start-column="35" selection-end-line="13" selection-end-column="35" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>PIP</find>
</findStrings>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/data_collectors/food/json/controller-json-food.py" />
<option value="$PROJECT_DIR$/data_collectors/food/parser/mensa-page-parser.py" />
<option value="$PROJECT_DIR$/templates/food/daily-food.jinja" />
<option value="$PROJECT_DIR$/data_collectors/food/migrate-data.py" />
<option value="$PROJECT_DIR$/food/urls.py" />
<option value="$PROJECT_DIR$/data_collectors/events/parser/fekide-eventpage-parser.py" />
<option value="$PROJECT_DIR$/data_collectors/events/json_generator/controller-json-events.py" />
<option value="$PROJECT_DIR$/food/models.py" />
<option value="$PROJECT_DIR$/events/models.py" />
<option value="$PROJECT_DIR$/data_collectors/events/migrate-data.py" />
<option value="$PROJECT_DIR$/events/urls.py" />
<option value="$PROJECT_DIR$/ofu_app/urls.py" />
<option value="$PROJECT_DIR$/events/views.py" />
<option value="$PROJECT_DIR$/ofu_app/settings.py" />
<option value="$PROJECT_DIR$/food/views.py" />
<option value="$PROJECT_DIR$/templates/base.jinja" />
<option value="$PROJECT_DIR$/templates/events/week_events.jinja" />
<option value="$PROJECT_DIR$/templates/food/daily_food.jinja" />
<option value="$PROJECT_DIR$/templates/food/food.jinja" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="ProjectFrameBounds">
<option name="y" value="27" />
<option name="width" value="1920" />
<option name="height" value="1053" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scratches" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="templates" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="templates" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="templates" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="events" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="events" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="data_collectors" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="data_collectors" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu_app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="data_collectors" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="events" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/data_collectors/events/parser" />
<recent name="$PROJECT_DIR$/food/static" />
<recent name="$PROJECT_DIR$/data_collectors/food/parser" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Python.migrate-data">
<configuration default="false" name="migrate-data" type="PythonConfigurationType" factoryName="Python" activateToolWindowBeforeRun="false" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="/usr/bin/python3.5" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/data_collectors/food" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/data_collectors/food/migrate-data.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="controller-json-food" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/data_collectors/food/json_generator" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/data_collectors/food/json_generator/controller-json-food.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="controller-json-events" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="/usr/bin/python3.5" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/data_collectors/events/json_generator" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/data_collectors/events/json_generator/controller-json-events.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="fekide-eventpage-parser" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="/usr/bin/python3.5" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/data_collectors/events/parser" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/data_collectors/events/parser/fekide-eventpage-parser.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="migrate-data (1)" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="/usr/bin/python3.5" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/data_collectors/events" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/data_collectors/events/migrate-data.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="TARGET" value="" />
<option name="SETTINGS_FILE" value="" />
<option name="CUSTOM_SETTINGS" value="false" />
<option name="USE_OPTIONS" value="false" />
<option name="OPTIONS" value="" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
<node-interpreter value="project" />
<working-dir value="" />
<envs />
<scope-kind value="ALL" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
<method />
</configuration>
<configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
<method />
</configuration>
<configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
<method />
</configuration>
<configuration default="true" type="Python.DjangoServer" factoryName="Django server">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<option name="launchJavascriptDebuger" value="false" />
<option name="port" value="8000" />
<option name="host" value="" />
<option name="additionalOptions" value="" />
<option name="browserUrl" value="" />
<option name="runTestServer" value="false" />
<option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="false" />
<option name="customRunCommand" value="" />
<method />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="/usr/bin/python3.5" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="true" type="Tox" factoryName="Tox">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<module name="ofu_app" />
<method />
</configuration>
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<node-interpreter>project</node-interpreter>
<node-options />
<gulpfile />
<tasks />
<arguments />
<envs />
<method />
</configuration>
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run" />
<scripts />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;.&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
<method />
</configuration>
<configuration default="false" name="ofu_app" type="Python.DjangoServer" factoryName="Django server">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu_app" />
<option name="launchJavascriptDebuger" value="false" />
<option name="port" value="8000" />
<option name="host" value="" />
<option name="additionalOptions" value="" />
<option name="browserUrl" value="" />
<option name="runTestServer" value="false" />
<option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="false" />
<option name="customRunCommand" value="" />
<method />
</configuration>
<list size="6">
<item index="0" class="java.lang.String" itemvalue="Django server.ofu_app" />
<item index="1" class="java.lang.String" itemvalue="Python.migrate-data" />
<item index="2" class="java.lang.String" itemvalue="Python.controller-json-food" />
<item index="3" class="java.lang.String" itemvalue="Python.controller-json-events" />
<item index="4" class="java.lang.String" itemvalue="Python.fekide-eventpage-parser" />
<item index="5" class="java.lang.String" itemvalue="Python.migrate-data (1)" />
</list>
<recent_temporary>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="Python.migrate-data" />
<item index="1" class="java.lang.String" itemvalue="Python.migrate-data (1)" />
<item index="2" class="java.lang.String" itemvalue="Python.controller-json-events" />
<item index="3" class="java.lang.String" itemvalue="Python.fekide-eventpage-parser" />
<item index="4" class="java.lang.String" itemvalue="Python.controller-json-food" />
</list>
</recent_temporary>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="f783ff92-97a9-4cab-8b91-b76bd998ba56" name="Default" comment="" />
<created>1506687652024</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1506687652024</updated>
</task>
<servers />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="0" y="27" width="1920" height="1053" extended-state="7" />
<editor active="true" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2596154" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32896176" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32896176" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32896176" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="processedProjectFiles" value="true" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="3" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/ofu_app/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2980">
<caret line="149" column="18" lean-forward="false" selection-start-line="149" selection-start-column="18" selection-end-line="149" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="12" column="12" lean-forward="false" selection-start-line="12" selection-start-column="4" selection-end-line="12" selection-end-column="12" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="3" column="11" lean-forward="false" selection-start-line="3" selection-start-column="11" selection-end-line="3" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/events/week_events.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="11" lean-forward="false" selection-start-line="4" selection-start-column="11" selection-end-line="4" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/base.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="460">
<caret line="23" column="24" lean-forward="false" selection-start-line="23" selection-start-column="17" selection-end-line="23" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="13" column="35" lean-forward="false" selection-start-line="13" selection-start-column="35" selection-end-line="13" selection-end-column="35" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food/daily_food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="3" selection-end-line="4" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ofu_app/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="780">
<caret line="39" column="9" lean-forward="false" selection-start-line="39" selection-start-column="9" selection-end-line="39" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="480">
<caret line="24" column="69" lean-forward="false" selection-start-line="24" selection-start-column="69" selection-end-line="24" selection-end-column="69" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/food/migrate-data.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="1" column="24" lean-forward="true" selection-start-line="1" selection-start-column="24" selection-end-line="1" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/food/parser/cafete-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ofu_app/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="460">
<caret line="23" column="4" lean-forward="false" selection-start-line="23" selection-start-column="4" selection-end-line="23" selection-end-column="4" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/static/bootstrap-4.0.0-beta-dist/js/bootstrap.js" />
<entry file="file://$PROJECT_DIR$/data_collectors/food/parser/fekide-happyhour-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-564">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/food/parser/mensa-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-40">
<caret line="22" column="25" lean-forward="false" selection-start-line="22" selection-start-column="25" selection-end-line="22" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/events/parser/univis-json-prettifier.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="296">
<caret line="136" column="29" lean-forward="false" selection-start-line="136" selection-start-column="20" selection-end-line="136" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/food/json_generator/controller-json-food.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="24" lean-forward="false" selection-start-line="8" selection-start-column="24" selection-end-line="8" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/events/json_generator/controller-json-events.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="416">
<caret line="38" column="61" lean-forward="false" selection-start-line="38" selection-start-column="61" selection-end-line="38" selection-end-column="79" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/events/parser/fekide-eventpage-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1136">
<caret line="71" column="2" lean-forward="false" selection-start-line="71" selection-start-column="2" selection-end-line="71" selection-end-column="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/food/migrate-data.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="42" column="74" lean-forward="false" selection-start-line="42" selection-start-column="74" selection-end-line="42" selection-end-column="81" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/events/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="260">
<caret line="13" column="12" lean-forward="false" selection-start-line="13" selection-start-column="4" selection-end-line="13" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="478">
<caret line="24" column="0" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="24" selection-end-column="0" />
<folding>
<element signature="e#641#673#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ofu_app/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="440">
<caret line="23" column="17" lean-forward="false" selection-start-line="23" selection-start-column="17" selection-end-line="23" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/events/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="436">
<caret line="22" column="0" lean-forward="true" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
<folding>
<element signature="e#641#673#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/events/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="23" lean-forward="false" selection-start-line="8" selection-start-column="23" selection-end-line="8" selection-end-column="23" />
<folding>
<element signature="e#0#35#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/events/migrate-data.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="236">
<caret line="19" column="16" lean-forward="false" selection-start-line="19" selection-start-column="16" selection-end-line="19" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/data_collectors/food/parser/cafete-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="33" column="28" lean-forward="false" selection-start-line="33" selection-start-column="25" selection-end-line="33" selection-end-column="28" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ofu_app/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2980">
<caret line="149" column="18" lean-forward="false" selection-start-line="149" selection-start-column="18" selection-end-line="149" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="12" column="12" lean-forward="false" selection-start-line="12" selection-start-column="4" selection-end-line="12" selection-end-column="12" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="13" column="35" lean-forward="false" selection-start-line="13" selection-start-column="35" selection-end-line="13" selection-end-column="35" />
<folding>
<element signature="e#24#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/events/week_events.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="11" lean-forward="false" selection-start-line="4" selection-start-column="11" selection-end-line="4" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="3" column="11" lean-forward="false" selection-start-line="3" selection-start-column="11" selection-end-line="3" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/base.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="460">
<caret line="23" column="24" lean-forward="false" selection-start-line="23" selection-start-column="17" selection-end-line="23" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food/daily_food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="3" selection-end-line="4" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
</component>
</project>

View File

View File

@ -0,0 +1,42 @@
import importlib
# OWN MODULS
parser_event_univis = importlib.import_module('data_collectors.events.parser.univis-eventpage-parser')
parser_event_univis_pretty = importlib.import_module('data_collectors.events.parser.univis-json-prettifier')
parser_event_fekide = importlib.import_module('data_collectors.events.parser.fekide-eventpage-parser')
# CONFIG
JSON_OUTPUT_DIR_EVENTS = "./jsons/"
def writeToFile(jsonfile, root, filename):
with open((root + filename), "w") as file:
file.write(jsonfile)
def main():
try:
json_events_univis = parser_event_univis.parsePage()
except IndexError:
print("Error")
json_events_univis = {}
writeToFile(json_events_univis, JSON_OUTPUT_DIR_EVENTS, "events-univis.json")
try:
json_events_univis_pretty = parser_event_univis_pretty.prettify(JSON_OUTPUT_DIR_EVENTS + "events-univis.json")
except IndexError:
print("Error")
json_events_univis_pretty = {}
try:
json_events_fekide = parser_event_fekide.parsePage()
except IndexError:
print("Error")
json_events_fekide = {}
writeToFile(json_events_univis_pretty, JSON_OUTPUT_DIR_EVENTS, "events-univis-pretty.json")
writeToFile(json_events_fekide, JSON_OUTPUT_DIR_EVENTS, "events-fekide.json")
main()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,38 @@
import json
from pprint import pprint
import django, os
from datetime import datetime
from django.db.utils import IntegrityError
os.environ['DJANGO_SETTINGS_MODULE'] = 'ofu_app.settings'
django.setup()
from events.models import Event
JSON_FILES_PATH_EVENTS = "json_generator/jsons/"
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def writeFekideDataInDB(data):
for date in data['dates']:
for event in date['events']:
try:
time = datetime.strptime(str(event['time']).split()[1], "%H:%M")
Event.objects.create(date=datetime.strptime(date['date'], "%d.%m.%Y"), category=event['category'],
link=event['link'], location=event['location'], title=event['title'], time=time)
except IntegrityError:
# ignored
break
def main():
# get food jsons
writeFekideDataInDB(getJsonFromFile(JSON_FILES_PATH_EVENTS + "events-fekide.json"))
pprint("Event: " + str(Event.objects.count()))
main()

View File

@ -0,0 +1,72 @@
import requests
from bs4 import BeautifulSoup
import datetime
import json
from pprint import pprint
import os
import locale
os.environ['TZ'] = 'Europe/Berlin'
SPEISEPLAN_NAME_SELECTOR = '.csc-default .csc-header .csc-firstHeader'
LINK_FEKIDE_Events = "https://www.feki.de/terminkalender"
LINK_FEKIDE = "https://www.feki.de"
locale.setlocale(locale.LC_TIME, '')
def loadPage(url: str):
return requests.get(url).content
def getDay():
return datetime.datetime.today().strftime("%A, %d.%m.%Y")
def getEvents(soup):
datelist_json = []
datelist = soup.select('#feki_terminkalender_overview .event_overview_day')
for dateelement in datelist:
date = {}
datesoup = BeautifulSoup(str(dateelement), "lxml")
date['date'] = datetime.datetime.strptime(datesoup.find('h3').getText(), "%d. %B").replace(
year=datetime.datetime.now().year).strftime("%d.%m.%Y")
events = datesoup.select('div a')
events_arr = []
for event_elem in events:
event = {}
eventsoup = BeautifulSoup(str(event_elem), "lxml")
title_category = eventsoup.find('div', {'class': 'event_overview_title'})
event['title'] = title_category.getText()
event['category'] = title_category.find('span').getText()
event['location'] = eventsoup.find('div', {'class': 'event_overview_location'}).getText()
event['time'] = eventsoup.find('div', {'class': 'event_overview_time'}).getText()
event['link'] = LINK_FEKIDE + event_elem['href']
events_arr.append(event)
date['events'] = events_arr
datelist_json.append(date)
return datelist_json
def getNextPage(soup):
return soup.select('#block-system-main .pagination .next a')
def getAllDates(url: str):
page = loadPage(url)
soup = BeautifulSoup(page, "lxml")
dates = getEvents(soup)
nextPage = getNextPage(soup)
dates_nextPage = []
if nextPage:
dates_nextPage = getAllDates(LINK_FEKIDE_Events + str(nextPage[0]['href']))
return dates + dates_nextPage
def parsePage():
pagecontent = {}
pagecontent['dates'] = getAllDates(LINK_FEKIDE_Events)
jsondata = json.dumps(pagecontent)
return jsondata
# parsePage()

View File

@ -3,6 +3,9 @@ import datetime
import xmltodict
import json
# CONFIG
UNIVIS_RPG_URL = "http://univis.uni-bamberg.de/prg?search=events&show=xml"
def loadPage(url: str):
return requests.get(url).content
@ -28,15 +31,23 @@ def resolveUnivisRefs(dict: dict):
event['rooms']['room'] = detailed_room
def parsePage(url: str):
def resolveDates(json):
for event in json['UnivIS']['Event']:
start_datetime = datetime.datetime.strptime(event['startdate'], "%Y-%m-%d").strftime("%d.%m.%Y")
event['startdate'] = start_datetime
end_datetime = datetime.datetime.strptime(event['enddate'], "%Y-%m-%d").strftime("%d.%m.%Y")
event['enddate'] = end_datetime
def parsePage():
# {Univis: {'Event':[{,,,,},,,,]}}
page = loadPage(url)
page = loadPage(UNIVIS_RPG_URL)
dict = xmltodict.parse(page)
resolveUnivisRefs(dict)
# resolveUnivisRefs(dict)
json_data = json.dumps(dict)
json_data = json.loads(json_data)
resolveDates(json_data)
json_data['last_execute'] = getDay()
return json.dumps(json_data)
# UNIVIS_RPG_URL = "http://univis.uni-bamberg.de/prg?search=events&show=xml"
# parsePage(UNIVIS_RPG_URL)
# parsePage()

View File

@ -0,0 +1,143 @@
import json
from pprint import pprint
import datetime
def loadJson(path: str):
with open(path, 'r') as file:
return json.load(file)
def deleteNotCalendarElements(data):
events = []
for event in data['UnivIS']['Event']:
if 'calendar' in event:
if not event['calendar'] == 'nein':
events.append(event)
data['UnivIS']['Event'] = events
# pprint(data['UnivIS']['Event'])
def getRoom(data, id: str):
for room in data['UnivIS']['Room']:
if room['@key'] == id:
return room
def resolveRoomRefs(data):
for event in data['UnivIS']['Event']:
if 'rooms' in event:
rooms = []
# pprint(event['rooms']['room'])
if not isinstance(event['rooms']['room'], list):
single_room = {}
single_room['room'] = getRoom(data, event['rooms']['room']['UnivISRef']['@key'])['short']
rooms.append(single_room)
else:
for room_item in event['rooms']['room']:
single_room = {}
single_room['room'] = getRoom(data, room_item['UnivISRef']['@key'])['short']
rooms.append(single_room)
event['rooms'] = rooms
else:
event['rooms'] = None
def getContact(data, id: str):
for contact in data['UnivIS']['Person']:
if contact['@key'] == id:
person = {}
person['atitle'] = None
if 'atitle' in contact:
person['atitle'] = contact['atitle']
person['firstname'] = contact['firstname']
person['lastname'] = contact['lastname']
person['email'] = None
if 'email' in contact['locations']['location']:
person['email'] = contact['locations']['location']['email']
person['tel'] = None
if 'tel' in contact['locations']['location']:
person['tel'] = contact['locations']['location']['tel']
person['office'] = None
if 'office' in contact['locations']['location']:
person['office'] = contact['locations']['location']['office']
person['url'] = None
if 'url' in contact['locations']['location']:
person['url'] = contact['locations']['location']['url']
return person
def resolveContactRefs(data):
for event in data['UnivIS']['Event']:
key = event['contact']['UnivISRef']['@key']
event['contact'] = getContact(data, key)
def initalDateBoard(days: int, dateformat: str):
dates = {}
dates_arr = []
now = datetime.datetime.now()
i = 0
while i < days:
date = {}
day = now + datetime.timedelta(days=i)
date['date'] = day.strftime(dateformat)
date['events'] = []
dates_arr.append(date)
i += 1
dates['dates'] = dates_arr
return dates
def getNewEvent(event):
new_event = {}
new_event['title'] = event['title']
new_event['time'] = event['starttime']
new_event['endtime'] = event['endtime']
new_event['category'] = None
new_event['link'] = None
locations = []
if event['rooms']:
for room in event['rooms']:
location = {}
location['location'] = room
locations.append(location)
new_event['locations'] = locations
new_event['description'] = None
if 'description' in event:
new_event['description'] = event['description']
return new_event
def getDateBasedJson(data):
dateformat = "%d.%m.%Y"
dates = initalDateBoard(180, dateformat)
for event in data['UnivIS']['Event']:
startdate = datetime.datetime.strptime(event['startdate'], "%d.%m.%Y")
enddate = datetime.datetime.strptime(event['enddate'], "%d.%m.%Y")
new_event = getNewEvent(event)
while startdate <= enddate:
for date in dates['dates']:
if date['date'] == startdate.strftime(dateformat):
date['events'].append(new_event)
startdate = startdate + datetime.timedelta(days=1)
return dates
def prettify(json_path: str):
data = loadJson(json_path)
deleteNotCalendarElements(data)
resolveRoomRefs(data)
resolveContactRefs(data)
return json.dumps(getDateBasedJson(data))
# prettify("../../../static/html/events/json/events-univis.jason")

View File

View File

@ -0,0 +1,64 @@
import importlib
# OWN MODULS
parser_food_mensa = importlib.import_module('data_collectors.food.parser.mensa-page-parser')
parser_food_cafete = importlib.import_module('data_collectors.food.parser.cafete-page-parser')
parser_food_fekidehappyhour = importlib.import_module('data_collectors.food.parser.fekide-happyhour-page-parser')
# CONFIG
JSON_OUTPUT_DIR_FOOD = "./jsons/"
# CONFIG SERVICE LINKS
LINK_FEKI_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=c3fe5ebb35e5fba3794f01878e798b7c"
LINK_AUSTR_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=511e047953ee1370c3b82c11a04624bb"
LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-erba-insel.html"
LINK_MARKUS_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-markusplatz.html"
LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour"
def writeToFile(jsonfile, root, filename):
with open((root + filename), "w") as file:
file.write(jsonfile)
def main():
try:
json_food_mensa_feki = parser_food_mensa.parsePage(LINK_FEKI_MENSA)
except IndexError:
print("Error")
json_food_mensa_feki = {}
try:
json_food_mensa_austr = parser_food_mensa.parsePage(LINK_AUSTR_MENSA)
except IndexError:
print("Error")
json_food_mensa_austr = {}
try:
json_food_cafete_erba = parser_food_cafete.parsePage(LINK_ERBA_CAFETE)
except IndexError:
print("Error")
json_food_cafete_erba = {}
try:
json_food_cafete_markus = parser_food_cafete.parsePage(LINK_MARKUS_CAFETE)
except IndexError:
print("Error")
json_food_cafete_markus = {}
try:
json_food_fekidehappyhours = parser_food_fekidehappyhour.parsePage(LINK_FEKIDE_GUIDE)
except IndexError:
print("Error")
json_food_fekidehappyhours = {}
# WRITE JSONS
writeToFile(json_food_mensa_feki, JSON_OUTPUT_DIR_FOOD, "mensa-feki.json")
writeToFile(json_food_mensa_austr, JSON_OUTPUT_DIR_FOOD, "mensa-austr.json")
writeToFile(json_food_cafete_erba, JSON_OUTPUT_DIR_FOOD, "cafete-erba.json")
writeToFile(json_food_cafete_markus, JSON_OUTPUT_DIR_FOOD, "cafete-markus.json")
writeToFile(json_food_fekidehappyhours, JSON_OUTPUT_DIR_FOOD, "happyhourguide-fekide.json")
main()

View File

@ -0,0 +1 @@
{"weekmenu": [{"date": "24.07.", "menu": ["Rinderhacksteak an Cognacso\u00dfe und Sp\u00e4tzle"]}, {"date": "25.07.", "menu": ["Gem\u00fcseschnitzel mit Kr\u00e4utercreme und Kartoffeln"]}, {"date": "26.07.", "menu": ["Penne-Nudeln mit Hackfleischso\u00dfe"]}, {"date": "27.07.", "menu": ["Kaiserschmarrn mit Apfelmus"]}], "name": "Cafeteria Erba-Insel", "execution_time": "Friday, 29.09.2017"}

View File

@ -0,0 +1 @@
{"weekmenu": [{"date": "24.07.", "menu": ["Vegetarisches Chili sin Carne"]}, {"date": "25.07.", "menu": ["Gem\u00fcseschnitzel mit Kr\u00e4utercreme und Kartoffeln"]}, {"date": "26.07.", "menu": ["\u00dcberbackene Zucchini an Paprikaso\u00dfe mit P\u00fcree"]}, {"date": "27.07.", "menu": ["Kaiserschmarrn mit Apfelmus"]}], "name": "Cafeteria Markusplatz", "execution_time": "Friday, 29.09.2017"}

View File

@ -0,0 +1 @@
{"execution_time": "Friday, 29.09.2017", "day": "Friday, 29.09.2017", "happyhours": [{"time": "16:00 - 20:00", "location": "Caff\u00e8bar Kranen", "description": "Aperitivo Italiano\u00a0incl. Antipasti"}, {"time": "17:00 - 21:00", "location": "Caf\u00e9 Esspress", "description": "Steakteller f\u00fcr 11,99 \u20ac"}]}

View File

@ -0,0 +1 @@
{"weekmenu": [{"date": "25.09.", "menu": ["Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "2 St\u00fcck H\u00e4hnchenschnitzel \"Wiener Art\"", "Kasseler mit gr\u00fcnem Bohnengem\u00fcse", "Waldpilzpfanne", "Wedges mit Kr\u00e4uterquark"]}, {"date": "26.09.", "menu": ["2 St\u00fcck H\u00e4hnchenschnitzel \"Wiener Art\"", "Saftiges Rindergulasch", "Ofenfrischer Schweinekammbraten in Bierso\u00dfe", "Mensa Vital : Bohnen-Zucchini-Chili mit Vollkornreis"]}, {"date": "27.09.", "menu": ["H\u00e4hnchenkeule \"Z\u00fcricher Art\"", "Ofenfrischer Schweinekammbraten in Bierso\u00dfe", "Pulled Pork Burger mit Coleslaw", "Griechischer Kartoffelgem\u00fcseauflauf mit Paprika, Zucchini & Auberginen"]}, {"date": "28.09.", "menu": ["Moussaka vom Rind", "H\u00e4hnchenkeule \"Z\u00fcricher Art\"", "Falafelb\u00e4llchen auf Couscous Gem\u00fcse", "Pulled Pork Burger mit Coleslaw", "Rustico Triangolo \"Spinaci\" an Sahneso\u00dfe"]}, {"date": "29.09.", "menu": ["Pennenudeln mit Lachs, Spinat und Kirschtomaten", "Falafelb\u00e4llchen auf Couscous Gem\u00fcse", "Feuerspie\u00df mit Barbecueso\u00dfe", "Rustico Triangolo \"Spinaci\" an Sahneso\u00dfe", "Vegane Knusperschnitte \"Hong Kong\" mit Chop suey"]}], "name": "Speiseplan f\u00fcr Austra\u00dfe Bamberg", "execution_time": "Friday, 29.09.2017"}

View File

@ -0,0 +1 @@
{"weekmenu": [{"date": "25.09.", "menu": ["Chili con Carne", "2 St\u00fcck H\u00e4hnchenschnitzel \"Wiener Art\"", "Kasseler mit gr\u00fcnem Bohnengem\u00fcse", "Waldpilzpfanne"]}, {"date": "26.09.", "menu": ["Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "Saftiges Rindergulasch", "Kasseler mit gr\u00fcnem Bohnengem\u00fcse", "Ofenfrischer Schweinekammbraten in Bierso\u00dfe", "Blumenkohlk\u00e4semedaillon mit Pestoso\u00dfe", "Mensa Vital : Bohnen-Zucchini-Chili mit Vollkornreis"]}, {"date": "27.09.", "menu": ["Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "H\u00e4hnchenkeule \"Z\u00fcricher Art\"", "Pulled Pork Burger mit Coleslaw", "Mensa Vital : Bohnen-Zucchini-Chili mit Vollkornreis", "Griechischer Kartoffelgem\u00fcseauflauf mit Paprika, Zucchini & Auberginen"]}, {"date": "28.09.", "menu": ["Moussaka vom Rind", "Falafelb\u00e4llchen auf Couscous Gem\u00fcse", "Ofenfrischer Schweinekammbraten in Bierso\u00dfe", "Rustico Triangolo \"Spinaci\" an Sahneso\u00dfe"]}, {"date": "29.09.", "menu": ["Pennenudeln mit Lachs, Spinat und Kirschtomaten", "Falafelb\u00e4llchen auf Couscous Gem\u00fcse", "Feuerspie\u00df mit Barbecueso\u00dfe", "Vegane Knusperschnitte \"Hong Kong\" mit Chop suey"]}], "name": "Speiseplan f\u00fcr Feldkirchenstra\u00dfe Bamberg", "execution_time": "Friday, 29.09.2017"}

View File

@ -0,0 +1,64 @@
import json
from pprint import pprint
import django, os
from datetime import datetime
from django.db.utils import IntegrityError
os.environ['DJANGO_SETTINGS_MODULE'] = 'ofu_app.settings'
django.setup()
from food.models import SingleFood, Menu, HappyHour
JSON_FILES_PATH_FOOD = "json_generator/jsons/"
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def writeStudentenwerkDataInDB(data):
for menu in data['weekmenu']:
foodlist = []
for single_food in menu['menu']:
try:
foodlist.append(SingleFood.objects.create(name=single_food))
except IntegrityError:
foodlist.append(SingleFood.objects.get(name=single_food))
try:
date = datetime.strptime(str(menu['date']), "%d.%m.").replace(year=datetime.today().year)
menu = Menu.objects.create(location=data['name'],
date=date)
menu.menu = foodlist
except IntegrityError:
# ignored
break
def writeFekideDataInDB(data):
for happyhour_data in data['happyhours']:
time = str(happyhour_data['time']).replace(" ", "").split("-")
try:
HappyHour.objects.create(date=datetime.strptime(data['day'], "%A, %d.%m.%Y"),
location=happyhour_data['location'], description=happyhour_data['description'],
starttime=datetime.strptime(time[0], "%H:%M"),
endtime=datetime.strptime(time[1], "%H:%M"))
except IntegrityError:
# ignored
break
def main():
# get food jsons
writeStudentenwerkDataInDB(getJsonFromFile(JSON_FILES_PATH_FOOD + "mensa-austr.json"))
writeStudentenwerkDataInDB(getJsonFromFile(JSON_FILES_PATH_FOOD + "cafete-erba.json"))
writeStudentenwerkDataInDB(getJsonFromFile(JSON_FILES_PATH_FOOD + "cafete-markus.json"))
writeStudentenwerkDataInDB(getJsonFromFile(JSON_FILES_PATH_FOOD + "mensa-feki.json"))
json_food_fekide = getJsonFromFile(JSON_FILES_PATH_FOOD + "happyhourguide-fekide.json")
writeFekideDataInDB(json_food_fekide)
pprint("SingleFood: " + str(SingleFood.objects.count()))
pprint("Menu: " + str(Menu.objects.count()))
pprint("HappyHour: " + str(HappyHour.objects.count()))
main()

View File

@ -1,6 +1,7 @@
import requests
from bs4 import BeautifulSoup
import json
import datetime
SPEISEPLAN_NAME_SELECTOR = '.csc-default .csc-header .csc-firstHeader'
@ -52,6 +53,7 @@ def parsePage(url: str):
days = getFoodPerDay(soup)
mensaSpeiseplan['weekmenu'] = days
mensaSpeiseplan['name'] = foodplan_name
mensaSpeiseplan['execution_time'] = datetime.datetime.today().strftime("%A, %d.%m.%Y")
mensaSpeiseplanJson = json.dumps(mensaSpeiseplan)
return mensaSpeiseplanJson

View File

@ -44,10 +44,10 @@ def parsePage(url: str):
happyhours = getHappyHours(soup)
pagecontent['happyhours'] = happyhours
pagecontent['day'] = getDay()
pagecontent['execution_time'] = datetime.datetime.today().strftime("%A, %d.%m.%Y")
jsondata = json.dumps(pagecontent)
return jsondata
# LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour/wochenuebersicht"
# parsePage(LINK_FEKIDE_GUIDE)

View File

@ -1,6 +1,7 @@
import requests
from bs4 import BeautifulSoup
import json
import datetime
def loadPage(url: str):
@ -19,7 +20,7 @@ def getFoodPerDay(soup):
day = getMenuDay(daysoup)
dayMenu = [e.getText() for e in daysoup.select('.menuwrap .menu .left .title')]
dayObj['date'] = day
dayObj['date'] = str(day).split(" ")[1]
dayObj['menu'] = dayMenu
days.append(dayObj)
return days
@ -39,10 +40,11 @@ def parsePage(url: str):
days = getFoodPerDay(soup)
mensaSpeiseplan['weekmenu'] = days
mensaSpeiseplan['name'] = foodplan_name
mensaSpeiseplan['execution_time'] = datetime.datetime.today().strftime("%A, %d.%m.%Y")
mensaSpeiseplanJson = json.dumps(mensaSpeiseplan)
return mensaSpeiseplanJson
def getFoodplanName(soup):
foodplan_name = soup.select('.mensamenu h2')[0].getText()
return foodplan_name
return foodplan_name

BIN
ofu_app/db.sqlite3 Normal file

Binary file not shown.

View File

BIN
ofu_app/events/__init__.pyc Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
ofu_app/events/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

BIN
ofu_app/events/admin.pyc Normal file

Binary file not shown.

View File

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('id', models.AutoField(serialize=False, primary_key=True)),
('title', models.CharField(max_length=60)),
('category', models.CharField(max_length=60)),
('link', models.CharField(max_length=60)),
('location', models.CharField(max_length=60)),
('time', models.TimeField(default=django.utils.timezone.now)),
('date', models.DateField(default=django.utils.timezone.now)),
],
),
migrations.AlterUniqueTogether(
name='event',
unique_together=set([('date', 'location')]),
),
]

Binary file not shown.

View File

Binary file not shown.

19
ofu_app/events/models.py Normal file
View File

@ -0,0 +1,19 @@
from __future__ import unicode_literals
from django.utils import timezone
from django.db import models
MAX_LENGTH = 60
# Create your models here.
class Event(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=MAX_LENGTH)
category = models.CharField(max_length=MAX_LENGTH)
link = models.CharField(max_length=MAX_LENGTH)
location = models.CharField(max_length=MAX_LENGTH)
time = models.TimeField(default=timezone.now)
date = models.DateField(default=timezone.now)
class Meta:
unique_together = ('date', 'location')

Some files were not shown because too many files have changed in this diff Show More