commit 9540d3016fb6898c4b05239b6274578e7193fa68
Author: Tomáš Ballák <balllak.tomas@gmail.com>
Date:   Sun May 3 14:10:38 2020 +0200

    rebase

diff --git a/.gitignore b/.gitignore
index 6a5a540..264aefc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,7 +9,4 @@ cache
 .idea
 dev-dump
 *.lock
-.vscode-server
-*__pycache__*
-*.CSV
-python-module/venv
+.vscode-server
\ No newline at end of file
diff --git a/modules/crawler/.gitignore b/modules/crawler/.gitignore
new file mode 100644
index 0000000..bccd59e
--- /dev/null
+++ b/modules/crawler/.gitignore
@@ -0,0 +1,3 @@
+*__pycache__*
+*.CSV
+python-module/venv
diff --git a/modules/crawler/CrawledData/JIS/ignore.txt b/modules/crawler/CrawledData/JIS/ignore.txt
new file mode 100644
index 0000000..c5df76e
--- /dev/null
+++ b/modules/crawler/CrawledData/JIS/ignore.txt
@@ -0,0 +1 @@
+ignore.txt
diff --git a/modules/crawler/CrawledData/KOLOBEZKY/ignore.txt b/modules/crawler/CrawledData/KOLOBEZKY/ignore.txt
new file mode 100644
index 0000000..c5df76e
--- /dev/null
+++ b/modules/crawler/CrawledData/KOLOBEZKY/ignore.txt
@@ -0,0 +1 @@
+ignore.txt
diff --git a/modules/crawler/CrawledData/WIFI/ignore.txt b/modules/crawler/CrawledData/WIFI/ignore.txt
new file mode 100644
index 0000000..c5df76e
--- /dev/null
+++ b/modules/crawler/CrawledData/WIFI/ignore.txt
@@ -0,0 +1 @@
+ignore.txt
diff --git a/modules/crawler/CrawlerLogs/JIS/ignore.txt b/modules/crawler/CrawlerLogs/JIS/ignore.txt
new file mode 100644
index 0000000..e69de29
diff --git a/modules/crawler/CrawlerLogs/KOLOBEZKY/ignore.txt b/modules/crawler/CrawlerLogs/KOLOBEZKY/ignore.txt
new file mode 100644
index 0000000..e69de29
diff --git a/modules/crawler/CrawlerLogs/WIFI/ignore.txt b/modules/crawler/CrawlerLogs/WIFI/ignore.txt
new file mode 100644
index 0000000..e69de29
diff --git a/modules/crawler/DatasetConfigs/JIS.yaml b/modules/crawler/DatasetConfigs/JIS.yaml
new file mode 100644
index 0000000..2731027
--- /dev/null
+++ b/modules/crawler/DatasetConfigs/JIS.yaml
@@ -0,0 +1,194 @@
+# jmeno datasetu, pod kterym bude zobrazen v aplikaci
+dataset-name: JIS
+# root slozka, ktera obsahuje odkazy na dataset
+url: https://openstore.zcu.cz/
+# volitelny parameter, ktery specifikuje vzor jmena datasetu, ktera se budou stahovat
+regex: OD_ZCU_JIS_[0-9][0-9]_[0-9][0-9][0-9][0-9]_CSV.zip
+# volitelny parametr, ktery udava jednou za kolik dní se budou nová data vyhledávat
+update-period: 24
+# pozice jednotlivych zarizeni, ktera jsou v datasetu
+devices:
+  - US 005 - z�vora vjezd:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_KL20:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - US 005 - m�� vjezd:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza4-kasa3:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - NTIS-BUFET:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Parkoviste-vjezd:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza4-kasa1:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza1-kasa-p:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza4-kasa2:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - L2:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - EP-BUFET:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - KolaBory-vnitrni:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza1-kasa-l:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Zavora-FEL:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Zavora-NTIS-vjezd:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - L-Posilovna:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_ST407:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - M16:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Zavora-Kaplirova:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Zavora-FDU:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - KolaBory-vnejsi:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_VC53:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza4-kasa4:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - KL-Posilovna:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - VC-VYJEZD:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - EXT/kola-B:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Menza4-kasa5:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - L1L2-vchod:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - VC-VJEZD:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - A3:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_UB113:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_CHEB:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_PRA1:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - L1:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_UB211:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - A1:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - EXT/kola:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - STUD_KL87:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - UV1-Bufet:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - M14:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Zavora-NTIS-vyjezd:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - B3-kolarna:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - B3-LEVY:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - MenzaKL-vydej:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - A2-Hlavni vchod:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - Parkoviste-vyjezd:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
diff --git a/modules/crawler/DatasetConfigs/KOLOBEZKY.yaml b/modules/crawler/DatasetConfigs/KOLOBEZKY.yaml
new file mode 100644
index 0000000..b1aa785
--- /dev/null
+++ b/modules/crawler/DatasetConfigs/KOLOBEZKY.yaml
@@ -0,0 +1,33 @@
+# jmeno datasetu, pod kterym bude zobrazen v aplikaci
+dataset-name: KOLOBEZKY
+# root slozka, ktera obsahuje odkazy na dataset
+url: https://openstore.zcu.cz/
+# volitelny parameter, ktery specifikuje vzor jmena datasetu, ktera se budou stahovat
+regex: OD_ZCU_KOLOBEZKY_[0-9][0-9]_[0-9][0-9][0-9][0-9]_CSV.zip
+# volitelny parametr, ktery udava jednou za kolik dní se budou nová data vyhledávat
+update-period: 24
+# pozice jednotlivych zarizeni, ktera jsou v datasetu
+devices:
+  - stojan-knihovna:
+      x: 49.725145
+      y: 13.353319
+
+  - stojan-Machovka:
+      x: 49.725197
+      y: 13.368016
+
+  -  stojan-FDU:
+      x: 49.725360
+      y: 13.347909
+
+  - stojan-bory:
+      x: 49.724576
+      y: 13.350861
+
+  - stojan-zcu:
+      x: 49.726033
+      y: 13.365958
+
+  - stojan-borska:
+      x: 49.734518
+      y: 13.359475
diff --git a/modules/crawler/DatasetConfigs/WIFI.yaml b/modules/crawler/DatasetConfigs/WIFI.yaml
new file mode 100644
index 0000000..f2edd97
--- /dev/null
+++ b/modules/crawler/DatasetConfigs/WIFI.yaml
@@ -0,0 +1,846 @@
+# jmeno datasetu, pod kterym bude zobrazen v aplikaci
+dataset-name: WIFI
+# root slozka, ktera obsahuje odkazy na dataset
+url: https://openstore.zcu.cz/
+# volitelny parameter, ktery specifikuje vzor jmena datasetu, ktera se budou stahovat
+regex: OD_ZCU_WIFI_[0-9][0-9]_[0-9][0-9][0-9][0-9]_CSV.zip
+# volitelny parametr, ktery udava jednou za kolik dní se budou nová data vyhledávat
+update-period: 24
+# pozice jednotlivych zarizeni, ktera jsou v datasetu
+devices:
+  - ul-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a1-s6-cat2960-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s1-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s3-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s3-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a1-s4-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - kl-idf1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s8-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-k-s3-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-kks-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - kl-s2-idf1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - kl-idf3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s11-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ec-s1-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-k-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-n1-nx5548-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tf-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - um-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-ui411-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ur-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s2-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - el-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ek-s2-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s8-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-n2-nx5548-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - kl-s1-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - eh-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s8-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - rj-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s6-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m16-s3-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ec-s2-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - us-idf5-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-cat2960-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-s8-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m16-s4-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - eu-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s3-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - el-z1-cat2960c-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uv-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-s1-cat4507-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - rj-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - so-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - un-idf3b-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s4-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a1-s3-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - jj-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-cat4900-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m14-s2-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - el-z2-cat2960c-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tc-s4-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uh-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-rek-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a2-s1-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - vc-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m14-s4-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tc-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - so-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s3-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-2504-wlc:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s5-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a2-s2-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tf-cat4500-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s1-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-s6-cat2960-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-kks-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-rti-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s12-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - th-s1-cat3750-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-cat2960-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-s-cat6506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - un-idf4a-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - st-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-4404-wlc:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s10-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tg-s2-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tc-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-k-s4-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - nc-s1-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tf-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - vc-s2-idf-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - vc-s1-idf-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - kl-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ko-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-kks-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - sp-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-s4-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m16-s5-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - th-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uu-kks-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s5-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s9-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-kks-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tg-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-tel2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-tel-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-u5-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s2-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tg-s1-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s7-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - kl-idf2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uf-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ek-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s1-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m14-s1-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - un-idf3a-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a1-s5-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - vc-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-kpv-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ut-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uc-idf2a-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ps-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m16-cat3560-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s7-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ek-s1-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-s3-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-kto-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tf-s2-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ts-cat4900-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s8-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m14-s3-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-ops-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-s1-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-ui411-s2-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s7-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-s2-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - un-idf4b-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-s4-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s6-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - us-z-cat2960c-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ls-s1-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a2-cat2960-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s11-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-k-s1-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tc-s6-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-5520-wlc:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - eu-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - rs-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s5-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-ui402-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tc-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s6-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uu-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s6-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-cat4500-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uc-idf1b-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s7-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-5508-wlc:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s2-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-ui403-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ep-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - pc-s1-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-k-s5-cat2960-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uc-kma-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a3-s5-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s4-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a2-s3-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s9-cat3750-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-s2-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s5-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uc-idf2b-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ls-z-cat2960c-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s4-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s4-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ub-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uc-idf1a-cat4510-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-s1-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ps-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m20-s4-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - so-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s9-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a2-s5-cat2960-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s1-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m16-s1-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m16-s2-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s2-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l2-s7-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-k-s2-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ls-s2-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-cat3750-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - lk-l1-s6-sw.lk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-u1-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - hj-s1-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a4-cat2960-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - uk-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - rti-cat4506-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - tc-s5-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-m14-cat2960-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - mk-b36-s10-sw.mk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ul-s6-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-ui121-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a1-s2-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ls-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-u3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - bk-a1-s1-sw.bk.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ic-ui411-s1-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - rj-s2-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - ko-cat3560-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - jj-s3-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - cd-s5-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
+  - vc-s3-idf-cat2960-sw.zcu.cz:
+      x: UNKNOWN!
+      y: UNKNOWN!
+
diff --git a/modules/crawler/DatasetCrawler/JISCrawler.py b/modules/crawler/DatasetCrawler/JISCrawler.py
new file mode 100644
index 0000000..adbb507
--- /dev/null
+++ b/modules/crawler/DatasetCrawler/JISCrawler.py
@@ -0,0 +1,41 @@
+from Utilities import FolderProcessor
+from Utilities.Crawler import BasicCrawlerFunctions
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "CrawledData/"
+
+
+def crawl(config):
+    """
+    Implement crawl method that downloads new data to path_for_files
+    For keeping the project structure
+    url , regex, and dataset_name from config
+    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py
+
+    Args:
+        config: loaded configuration file of dataset
+    """
+    dataset_name = config["dataset-name"]
+    url = config['url']
+    regex = config['regex']
+    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'
+
+    first_level_links = BasicCrawlerFunctions.get_all_links(url)
+    filtered_first_level_links = BasicCrawlerFunctions.filter_links(first_level_links, "^OD_ZCU")
+    absolute_first_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_first_level_links, url)
+
+    files = []
+
+    for link in absolute_first_level_links:
+        second_level_links = BasicCrawlerFunctions.get_all_links(link)
+        filtered_second_level_links = BasicCrawlerFunctions.filter_links(second_level_links, regex)
+        absolute_second_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_second_level_links, link)
+        final_links = BasicCrawlerFunctions.remove_downloaded_links(absolute_second_level_links, dataset_name)
+
+        for file_link in final_links:
+            files.append(file_link)
+
+    for file in files:
+        BasicCrawlerFunctions.download_file_from_url(file, dataset_name)
+
+    FolderProcessor.unzip_all_csv_zip_files_in_folder(path_for_files)
diff --git a/modules/crawler/DatasetCrawler/KOLOBEZKYCrawler.py b/modules/crawler/DatasetCrawler/KOLOBEZKYCrawler.py
new file mode 100644
index 0000000..adbb507
--- /dev/null
+++ b/modules/crawler/DatasetCrawler/KOLOBEZKYCrawler.py
@@ -0,0 +1,41 @@
+from Utilities import FolderProcessor
+from Utilities.Crawler import BasicCrawlerFunctions
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "CrawledData/"
+
+
+def crawl(config):
+    """
+    Implement crawl method that downloads new data to path_for_files
+    For keeping the project structure
+    url , regex, and dataset_name from config
+    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py
+
+    Args:
+        config: loaded configuration file of dataset
+    """
+    dataset_name = config["dataset-name"]
+    url = config['url']
+    regex = config['regex']
+    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'
+
+    first_level_links = BasicCrawlerFunctions.get_all_links(url)
+    filtered_first_level_links = BasicCrawlerFunctions.filter_links(first_level_links, "^OD_ZCU")
+    absolute_first_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_first_level_links, url)
+
+    files = []
+
+    for link in absolute_first_level_links:
+        second_level_links = BasicCrawlerFunctions.get_all_links(link)
+        filtered_second_level_links = BasicCrawlerFunctions.filter_links(second_level_links, regex)
+        absolute_second_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_second_level_links, link)
+        final_links = BasicCrawlerFunctions.remove_downloaded_links(absolute_second_level_links, dataset_name)
+
+        for file_link in final_links:
+            files.append(file_link)
+
+    for file in files:
+        BasicCrawlerFunctions.download_file_from_url(file, dataset_name)
+
+    FolderProcessor.unzip_all_csv_zip_files_in_folder(path_for_files)
diff --git a/modules/crawler/DatasetCrawler/WIFICrawler.py b/modules/crawler/DatasetCrawler/WIFICrawler.py
new file mode 100644
index 0000000..adbb507
--- /dev/null
+++ b/modules/crawler/DatasetCrawler/WIFICrawler.py
@@ -0,0 +1,41 @@
+from Utilities import FolderProcessor
+from Utilities.Crawler import BasicCrawlerFunctions
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "CrawledData/"
+
+
+def crawl(config):
+    """
+    Implement crawl method that downloads new data to path_for_files
+    For keeping the project structure
+    url , regex, and dataset_name from config
+    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py
+
+    Args:
+        config: loaded configuration file of dataset
+    """
+    dataset_name = config["dataset-name"]
+    url = config['url']
+    regex = config['regex']
+    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'
+
+    first_level_links = BasicCrawlerFunctions.get_all_links(url)
+    filtered_first_level_links = BasicCrawlerFunctions.filter_links(first_level_links, "^OD_ZCU")
+    absolute_first_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_first_level_links, url)
+
+    files = []
+
+    for link in absolute_first_level_links:
+        second_level_links = BasicCrawlerFunctions.get_all_links(link)
+        filtered_second_level_links = BasicCrawlerFunctions.filter_links(second_level_links, regex)
+        absolute_second_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_second_level_links, link)
+        final_links = BasicCrawlerFunctions.remove_downloaded_links(absolute_second_level_links, dataset_name)
+
+        for file_link in final_links:
+            files.append(file_link)
+
+    for file in files:
+        BasicCrawlerFunctions.download_file_from_url(file, dataset_name)
+
+    FolderProcessor.unzip_all_csv_zip_files_in_folder(path_for_files)
diff --git a/modules/crawler/DatasetProcessing/JISProcessor.py b/modules/crawler/DatasetProcessing/JISProcessor.py
new file mode 100644
index 0000000..5cbde73
--- /dev/null
+++ b/modules/crawler/DatasetProcessing/JISProcessor.py
@@ -0,0 +1,42 @@
+from Utilities.CSV import CSVDataLine, CSVutils
+from Utilities import DateFormating
+
+
+def process_file(filename):
+    """
+    Method that take path to crawled file and outputs date dictionary using method:
+    CSVutils.export_data_to_csv(filename, date_dict)
+    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)
+    and value is dictionary where keys devices (specified in configuration file)
+    and value is CSVDataLine.CSVDataLine with device,date and occurrence
+
+    Args:
+        filename: name of processed file
+
+    Returns:
+        False if not implemented
+        True when implemented
+    """
+    with open(filename, "r", encoding="utf-8") as file:
+
+        date_dict = dict()
+
+        for line in file:
+
+            array = line.split(";")
+
+            date = DateFormating.date_time_formatter(array[1][1:-1])
+            name = array[0][1:-1]
+            occurrence = array[2][:-1]
+
+            if date not in date_dict:
+                date_dict[date] = dict()
+
+            if name in date_dict[date]:
+                date_dict[date][name].occurrence += int(occurrence)
+            else:
+                date_dict[date][name] = CSVDataLine.CSVDataLine(name, date, int(occurrence))
+
+    CSVutils.export_data_to_csv(filename, date_dict)
+    return True
+
diff --git a/modules/crawler/DatasetProcessing/KOLOBEZKYProcessor.py b/modules/crawler/DatasetProcessing/KOLOBEZKYProcessor.py
new file mode 100644
index 0000000..eba863a
--- /dev/null
+++ b/modules/crawler/DatasetProcessing/KOLOBEZKYProcessor.py
@@ -0,0 +1,41 @@
+from Utilities.CSV import CSVDataLine, CSVutils
+from Utilities import DateFormating
+
+
+def process_file(filename):
+    """
+    Method that take path to crawled file and outputs date dictionary using method:
+    CSVutils.export_data_to_csv(filename, date_dict)
+    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)
+    and value is dictionary where keys devices (specified in configuration file)
+    and value is CSVDataLine.CSVDataLine with device,date and occurrence
+
+    Args:
+        filename: name of processed file
+
+    Returns:
+        False if not implemented
+        True when implemented
+    """
+    with open(filename, "r") as file:
+
+        date_dict = dict()
+
+        for line in file:
+
+            array = line.split(";")
+
+            date = DateFormating.date_time_formatter(array[0][1:-1])
+            name = array[1][1:-1]
+
+            if date not in date_dict:
+                date_dict[date] = dict()
+
+            if name in date_dict[date]:
+                date_dict[date][name].occurrence += 1
+            else:
+                date_dict[date][name] = CSVDataLine.CSVDataLine(name, date, 1)
+
+    CSVutils.export_data_to_csv(filename, date_dict)
+    return True
+
diff --git a/modules/crawler/DatasetProcessing/WIFIProcessor.py b/modules/crawler/DatasetProcessing/WIFIProcessor.py
new file mode 100644
index 0000000..e059c68
--- /dev/null
+++ b/modules/crawler/DatasetProcessing/WIFIProcessor.py
@@ -0,0 +1,42 @@
+from Utilities.CSV import CSVDataLine, CSVutils
+from Utilities import DateFormating
+
+
+def process_file(filename):
+    """
+    Method that take path to crawled file and outputs date dictionary using method:
+    CSVutils.export_data_to_csv(filename, date_dict)
+    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)
+    and value is dictionary where keys devices (specified in configuration file)
+    and value is CSVDataLine.CSVDataLine with device,date and occurrence
+
+    Args:
+        filename: name of processed file
+
+    Returns:
+        False if not implemented
+        True when implemented
+    """
+    with open(filename, "r", encoding="utf-8") as file:
+
+        date_dict = dict()
+
+        for line in file:
+
+            array = line.split(";")
+
+            date = DateFormating.date_time_formatter(array[4][1:-2])
+            name = array[1][1:-1]
+            occurrence = array[0]
+
+            if date not in date_dict:
+                date_dict[date] = dict()
+
+            if name in date_dict[date]:
+                date_dict[date][name].occurrence += int(occurrence)
+            else:
+                date_dict[date][name] = CSVDataLine.CSVDataLine(name, date, int(occurrence))
+
+    CSVutils.export_data_to_csv(filename, date_dict)
+    return True
+
diff --git a/modules/crawler/Pipeline.py b/modules/crawler/Pipeline.py
new file mode 100644
index 0000000..012e532
--- /dev/null
+++ b/modules/crawler/Pipeline.py
@@ -0,0 +1,126 @@
+from Utilities import FolderProcessor, ConfigureFunctions
+from Utilities.Database import DatabaseLoader
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "CrawledData/"
+# Path to processed data
+PROCESSED_DATA_PATH = "ProcessedData/"
+# Path to dataset crawler implementations
+CRAWLER_LIB_PATH = "DatasetCrawler."
+# Path to dataset processor implementations
+PROCESSOR_LIB_PATH = "DatasetProcessing."
+
+
+def crawl_data(config):
+    """
+      Imports dataset crawler in DatasetCrawler/"dataset_name"Crawler.py
+      runs crawler.
+
+    Args:
+        config: loaded configuration file of dataset
+    """
+    dataset_name = config["dataset-name"]
+
+    my_function = __import__(CRAWLER_LIB_PATH + dataset_name + "Crawler", globals(), locals(), ['crawl']).crawl
+    my_function(config)
+
+    dataset_name += '/'
+
+
+def process_data(dataset_name):
+    """
+    Goes trough every not processed file(not contained in CrawledData/"dataset_name"/ignore.txt)
+    Imports dataset processor in DatasetProcessing/"dataset_name"Processor.py
+    Runs processor on every file
+    After successful processing updates ignore.txt
+
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+    """
+    dataset_path = dataset_name + '/'
+
+    process_file_func = __import__(PROCESSOR_LIB_PATH + dataset_name + "Processor", globals(), locals(),
+                                   ['process_file']).process_file
+
+    not_processed_files = FolderProcessor.list_of_all_files(CRAWLED_DATA_PATH + dataset_path)
+
+    for not_processed_file in not_processed_files:
+        process_file_func(CRAWLED_DATA_PATH + dataset_path + not_processed_file)
+        FolderProcessor.update_ignore_set(CRAWLED_DATA_PATH + dataset_path, not_processed_file)
+
+
+def validate_process_data(config):
+    """
+    Function goes through newly processed data and checks theirs status
+
+    Args:
+        config: loaded configuration file of dataset
+
+    Returns:
+        boolean variable TRUE/FALSE.
+        Data processed correctly - TRUE
+        Wrong format or NEW unknown devices - FALSE
+    """
+    processed_devices_set = FolderProcessor.get_devices_set(PROCESSED_DATA_PATH + config["dataset-name"] + '/')
+    unknown_devices_set = FolderProcessor.get_unknown_devices_set(config, processed_devices_set)
+    unknown_devices_size = len(unknown_devices_set)
+
+    if unknown_devices_size != 0:
+        print("There is " + str(unknown_devices_size) + " unknown devices\n")
+        print("Adding devices to " + config["dataset-name"] + " config file\n")
+        ConfigureFunctions.update_configuration(config["dataset-name"], unknown_devices_set)
+        return False
+
+    for device in config["devices"]:
+        device = config["devices"][device]
+        if device["x"] == "UNKNOWN!" or device["y"] == "UNKNOWN!":
+            print(config["dataset-name"] + " Config file contains devices with UNKOWN! values please update them\n")
+            return False
+
+    return True
+
+
+def load_data_to_database(config):
+    """
+    Goes trough every not loaded file(not contained in ProcessedData/ignore.txt)
+    loads data appends coordination from configurations
+    and exports it into the database
+    After successful exporting updates ignore.txt
+
+    Args:
+        config: loaded configuration file of dataset
+    """
+    dataset_name = config["dataset-name"]
+    dataset_path = dataset_name + '/'
+
+    # get all unprocessed files from dataset
+    not_loaded_files = FolderProcessor.list_of_all_files(PROCESSED_DATA_PATH + dataset_path)
+
+    # load every file
+    for not_loaded_file in not_loaded_files:
+        # load processed data
+        processed_data = DatabaseLoader.get_data_from_file(not_loaded_file, config)
+        # load processed data to database
+        DatabaseLoader.load_data_to_database(dataset_name, processed_data)
+        FolderProcessor.update_ignore_set(PROCESSED_DATA_PATH + dataset_path, not_loaded_file)
+
+
+def run_full_pipeline(dataset_name):
+    """
+    Loads config file and starts full pipeline
+    -crawl data
+    -process data
+    -load data to database
+
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+    """
+    config = ConfigureFunctions.load_configuration(dataset_name)
+    crawl_data(config)
+    process_data(config["dataset-name"])
+
+    validation_test = validate_process_data(config)
+
+    if validation_test:
+        load_data_to_database(config)
+
diff --git a/modules/crawler/ProcessedData/JIS/ignore.txt b/modules/crawler/ProcessedData/JIS/ignore.txt
new file mode 100644
index 0000000..c5df76e
--- /dev/null
+++ b/modules/crawler/ProcessedData/JIS/ignore.txt
@@ -0,0 +1 @@
+ignore.txt
diff --git a/modules/crawler/ProcessedData/KOLOBEZKY/ignore.txt b/modules/crawler/ProcessedData/KOLOBEZKY/ignore.txt
new file mode 100644
index 0000000..c5df76e
--- /dev/null
+++ b/modules/crawler/ProcessedData/KOLOBEZKY/ignore.txt
@@ -0,0 +1 @@
+ignore.txt
diff --git a/modules/crawler/ProcessedData/WIFI/ignore.txt b/modules/crawler/ProcessedData/WIFI/ignore.txt
new file mode 100644
index 0000000..c5df76e
--- /dev/null
+++ b/modules/crawler/ProcessedData/WIFI/ignore.txt
@@ -0,0 +1 @@
+ignore.txt
diff --git a/modules/crawler/Scripts/PrepareNewDataset.py b/modules/crawler/Scripts/PrepareNewDataset.py
new file mode 100644
index 0000000..982b346
--- /dev/null
+++ b/modules/crawler/Scripts/PrepareNewDataset.py
@@ -0,0 +1,149 @@
+import os
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "../CrawledData/"
+# Path to processed data
+PROCESSED_DATA_PATH = "../ProcessedData/"
+# Path to crawler logs
+CRAWLER_LOGS_PATH = "../CrawlerLogs/"
+# Path for DatasetCrawlers implementations
+CRAWLER_PROGRAM_PATH = "../DatasetCrawler"
+# Path for DatasetProcessors implementations
+PROCESSOR_PROGRAM_PATH = "../DatasetProcessing"
+# Path to dataset configuration files
+CONFIG_FILES_PATH = "../DatasetConfigs"
+
+
+def create_default_config_file(dataset_name):
+    """
+    Creates default config file
+
+    Args:
+        dataset_name: Name of newly created dataset
+    """
+    with open(CONFIG_FILES_PATH + "/" + dataset_name + ".yaml", "w") as file:
+        file.write("# jmeno datasetu, pod kterym bude zobrazen v aplikaci\n")
+        file.write("dataset-name: " + dataset_name + "\n")
+        file.write("# root slozka, ktera obsahuje odkazy na dataset\n")
+        file.write("url: ZDE VLOZTE URL\n")
+        file.write("# volitelny parameter, ktery specifikuje vzor jmrna datasetu, ktera se budou stahovat\n")
+        file.write("regex: ZDE VLOZTE REGEX\n")
+        file.write("# volitelny parametr, ktery udava jak casto se budou hledat nove datasety, pokud prazdne, "
+                   "tak defaultni hodnota (dny)\n")
+        file.write("update-period: ZDE VLOZTE HODNOTU\n")
+        file.write("# pozice jednotlivych zarizeni, ktera jsou v datasetu\n")
+        file.write("devices:\n")
+
+
+def create_default_processor(dataset_name):
+    """
+    Creates default processor for dataset
+
+    Args:
+        dataset_name: Name of newly created dataset
+    """
+    with open(PROCESSOR_PROGRAM_PATH + "/" + dataset_name + "Processor.py", "w") as file:
+        file.write("from Utilities.CSV import CSVDataLine, CSVutils")
+        file.write("\n")
+        file.write("\n")
+        file.write("def process_file(filename):\n")
+        file.write("    \"\"\"\n")
+        file.write("    Method that take path to crawled file and outputs date dictionary using method:\n")
+        file.write("    CSVutils.export_data_to_csv(filename, date_dict)\n")
+        file.write("    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)\n")
+        file.write("    and value is dictionary where keys devices (specified in configuration file)\n")
+        file.write("    and value is CSVDataLine.CSVDataLine with device,date and occurrence\n")
+        file.write("\n")
+        file.write("    Args:\n")
+        file.write("    filename: name of processed file\n")
+        file.write("\n")
+        file.write("    Returns:\n")
+        file.write("    False if not implemented\n")
+        file.write("    True when implemented\n")
+        file.write("    \"\"\"\n")
+        file.write("    print(\"You must implements process_file method first!\")\n")
+        file.write("    #CSVutils.export_data_to_csv(filename, date_dict)\n")
+        file.write("    return False\n")
+
+
+def create_default_crawler(dataset_name):
+    """
+    Creates default crawler for dataset
+
+    Args:
+        dataset_name: Name of newly created dataset
+    """
+
+    with open(CRAWLER_PROGRAM_PATH + "/" + dataset_name + "Crawler.py", "w") as file:
+        file.write("# Path to crawled data\n")
+        file.write("CRAWLED_DATA_PATH = \"CrawledData/\"\n")
+        file.write("\n")
+        file.write("\n")
+        file.write("def crawl(config):\n")
+        file.write("    \"\"\"\n")
+        file.write("    Implement crawl method that downloads new data to path_for_files\n")
+        file.write("    For keeping the project structure\n")
+        file.write("    url , regex, and dataset_name from config\n")
+        file.write("    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py\n")
+        file.write("\n")
+        file.write("    Args:\n")
+        file.write("        config: loaded configuration file of dataset\n")
+        file.write("    \"\"\"\n")
+        file.write("    dataset_name = config[\"dataset-name\"]\n")
+        file.write("    url = config['url']\n")
+        file.write("    regex = config['regex']\n")
+        file.write("    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'\n")
+        file.write("    print(\"You must implements Crawl method first!\")\n")
+
+
+def create_ignore_file(path, text):
+    """
+    Creates ignore file
+    Args:
+        path: path to directory for creating ignore.txt
+        text: text that will be on first line of ignore.txt can be None
+    """
+    with open(path + "/ignore.txt", "w") as file:
+        if text is not None:
+            file.write(text + "\n")
+
+
+def prepare_dataset_structure(dataset_name):
+    """
+    Prepares folders for new dataset
+    Args:
+        dataset_name: Name of newly created dataset
+    """
+    jump_folder = "../"
+
+    # create folder for crawled data
+    try:
+        path = CRAWLED_DATA_PATH+dataset_name
+        os.mkdir(path)
+        create_ignore_file(path, "ignore.txt")
+    except os.error as e:
+        print(e)
+        print("Creation of the directory %s failed" % path)
+
+    # create folder for processed data
+    try:
+        path = PROCESSED_DATA_PATH + dataset_name
+        os.mkdir(path)
+        create_ignore_file(path, "ignore.txt")
+    except OSError:
+        print("Creation of the directory %s failed" % path)
+
+    # create folder for crawler logs
+    try:
+        path = CRAWLER_LOGS_PATH + dataset_name
+        os.mkdir(path)
+        create_ignore_file(path, None)
+    except OSError:
+        print("Creation of the directory %s failed" % path)
+
+    create_default_crawler(dataset_name)
+    create_default_processor(dataset_name)
+    create_default_config_file(dataset_name)
+
+
+prepare_dataset_structure("TEST")
diff --git a/modules/crawler/Scripts/RemoveDataset.py b/modules/crawler/Scripts/RemoveDataset.py
new file mode 100644
index 0000000..3737de0
--- /dev/null
+++ b/modules/crawler/Scripts/RemoveDataset.py
@@ -0,0 +1,34 @@
+import os
+import shutil
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "../CrawledData/"
+# Path to processed data
+PROCESSED_DATA_PATH = "../ProcessedData/"
+# Path to crawler logs
+CRAWLER_LOGS_PATH = "../CrawlerLogs/"
+# Path to dataset configuration files
+CONFIG_FILES_PATH = "../DatasetConfigs"
+# Path for DatasetCrawlers implementations
+CRAWLER_PROGRAM_PATH = "../DatasetCrawler"
+# Path for DatasetProcessors implementations
+PROCESSOR_PROGRAM_PATH = "../DatasetProcessing"
+
+
+def remove_dataset(dataset_name):
+    """
+    Remove dataset
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+    """
+    shutil.rmtree(CRAWLED_DATA_PATH + dataset_name + "/")
+    shutil.rmtree(PROCESSED_DATA_PATH + dataset_name + "/")
+    shutil.rmtree(CRAWLER_LOGS_PATH + dataset_name + "/")
+
+    os.remove(CONFIG_FILES_PATH + "/" + dataset_name + ".yaml")
+    os.remove(CRAWLER_PROGRAM_PATH + "/" + dataset_name + "Crawler.py")
+    os.remove(PROCESSOR_PROGRAM_PATH + "/" + dataset_name + "Processor.py")
+
+    print("Dataset: " + dataset_name + " removed");
+
+remove_dataset("TEST");
diff --git a/modules/crawler/Scripts/RemoveDatasetDatabase.py b/modules/crawler/Scripts/RemoveDatasetDatabase.py
new file mode 100644
index 0000000..4e28442
--- /dev/null
+++ b/modules/crawler/Scripts/RemoveDatasetDatabase.py
@@ -0,0 +1,32 @@
+from Utilities.Database import DatabaseLoader
+
+
+def remove_dataset_database(dataset_name):
+    """
+    Removes dataset entries from database
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+    """
+    # Creating connection
+    mydb = DatabaseLoader.create_database_connection();
+
+    # collection where are specified aviable datasets
+    collection_datasets = mydb[DatabaseLoader.MONGODB_DATASET_COLLECTION]
+
+    collection_datasets.delete_one({"name": dataset_name})
+    print("Removing record from DATASETS collection")
+
+
+    # Retrieve list of all collections
+    collections = mydb.list_collection_names()
+
+    # Drop of all collections
+    for name in collections:
+        if name.startswith(dataset_name):
+            mydb[name].drop()
+            print("Dropping: " + name)
+
+    print("Database Cleaned")
+
+
+remove_dataset_database("KOLOBEZKY")
\ No newline at end of file
diff --git a/modules/crawler/Scripts/ResetDatabaseData.py b/modules/crawler/Scripts/ResetDatabaseData.py
new file mode 100644
index 0000000..a85ffc9
--- /dev/null
+++ b/modules/crawler/Scripts/ResetDatabaseData.py
@@ -0,0 +1,21 @@
+from Utilities.Database import DatabaseLoader
+
+
+def clean_database():
+    """
+    Deletes all collections from database
+    """
+    # Create connection
+    mydb = DatabaseLoader.create_database_connection()
+
+    # Retrieve list of all collections
+    collections = mydb.list_collection_names()
+
+    # Drop of all collections
+    for name in collections:
+        mydb[name].drop()
+
+    print("Database Cleaned")
+
+
+clean_database();
\ No newline at end of file
diff --git a/modules/crawler/Scripts/ResetDataset.py b/modules/crawler/Scripts/ResetDataset.py
new file mode 100644
index 0000000..f27379f
--- /dev/null
+++ b/modules/crawler/Scripts/ResetDataset.py
@@ -0,0 +1,55 @@
+import os
+from Utilities import FolderProcessor
+
+# Path to crawled data
+CRAWLED_DATA_PATH = "../CrawledData/"
+# Path to processed data
+PROCESSED_DATA_PATH = "../ProcessedData/"
+# Path to crawler logs
+CRAWLER_LOGS_PATH = "../CrawlerLogs/"
+# Path to dataset configuration files
+CONFIG_FILES_PATH = "../DatasetConfigs"
+
+
+def create_ignore_file(path, text):
+    """
+    Creates ignore file
+    Args:
+        path: path to directory for creating ignore.txt
+        text: text that will be on first line of ignore.txt can be None
+    """
+    with open(path + "/ignore.txt", "w") as file:
+        if text is not None:
+            file.write(text + "\n")
+
+
+def reset_dataset(dataset_name):
+    """
+    Resets all saved data in dataset except config and implementation
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+    """
+    path = CRAWLED_DATA_PATH + dataset_name + "/"
+    FolderProcessor.clean_folder(path)
+    create_ignore_file(path, "ignore.txt")
+
+    path = PROCESSED_DATA_PATH + dataset_name + "/"
+    FolderProcessor.clean_folder(path)
+    create_ignore_file(path, "ignore.txt")
+
+    path = CRAWLER_LOGS_PATH + dataset_name + "/"
+    FolderProcessor.clean_folder(path)
+    create_ignore_file(path, None)
+
+
+def reset_all_datasets():
+    """
+    Resets all saved data in all datasets with config file except configs and implementation
+    """
+    datasets = os.listdir(CONFIG_FILES_PATH)
+
+    for dataset in datasets:
+        reset_dataset(dataset.split('.')[0])
+
+
+reset_all_datasets()
diff --git a/modules/crawler/Utilities/CSV/CSVDataLine.py b/modules/crawler/Utilities/CSV/CSVDataLine.py
new file mode 100644
index 0000000..577af78
--- /dev/null
+++ b/modules/crawler/Utilities/CSV/CSVDataLine.py
@@ -0,0 +1,13 @@
+class CSVDataLine:
+    """
+    Class that specifies the look of data line in processed csv file
+    prepared for database
+    """
+    def __init__(self, name, date, occurrence):
+        self.name = name
+        self.date = date
+        self.occurrence = occurrence
+
+    def to_csv(self):
+        return self.name + ";" + str(self.occurrence) + ";" + self.date
+
diff --git a/modules/crawler/Utilities/CSV/CSVutils.py b/modules/crawler/Utilities/CSV/CSVutils.py
new file mode 100644
index 0000000..c68e2f6
--- /dev/null
+++ b/modules/crawler/Utilities/CSV/CSVutils.py
@@ -0,0 +1,40 @@
+# Path to processed data
+PROCESSED_DATA_PATH = "ProcessedData/"
+
+
+def get_unique_names_from_file(filename, column_number):
+    """
+        Extract set of unique names from file
+    Args:
+        filename: path to processed file
+        column_number: unique names are expected in csv file on column_number
+
+    Returns:
+        set of unique names
+    """
+    # create set of unique names
+    name_set = set()
+
+    with open(filename, "r") as file:
+        # go through every line of line
+        for x in file:
+            # split by csv splitter ;
+            array = x.split(";")
+            # add string from chosen column to set
+            name_set.add(array[column_number])
+
+    return name_set
+
+
+def export_data_to_csv(filename, data_dict):
+    """
+        Takes data_dict and export it into a csv file
+    Args:
+        filename: name of exported file
+        data_dict: dictionary containing data from DatasetProcessor
+    """
+    with open(PROCESSED_DATA_PATH + filename[12:], "w+") as file:
+
+        for date in data_dict:
+            for data in data_dict[date]:
+                file.write(data_dict[date][data].to_csv() + '\n')
\ No newline at end of file
diff --git a/modules/crawler/Utilities/ConfigureFunctions.py b/modules/crawler/Utilities/ConfigureFunctions.py
new file mode 100644
index 0000000..1864337
--- /dev/null
+++ b/modules/crawler/Utilities/ConfigureFunctions.py
@@ -0,0 +1,46 @@
+import yaml
+
+# Path to dataset configuration files
+CONFIG_FILES_PATH = "DatasetConfigs/"
+# Config file type
+CONFIG_FILE_TYPE = ".yaml"
+
+
+def load_configuration(dataset_name):
+    """
+    Loads yaml configuration file into memory
+
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+
+    Returns:
+        yaml configuration file as dictionary
+    """
+    with open(CONFIG_FILES_PATH + dataset_name + CONFIG_FILE_TYPE, "r") as f:
+        data = yaml.load(f, Loader=yaml.FullLoader)
+
+    devices_dic = dict()
+
+    if data["devices"] is not None:
+        for item in data["devices"]:
+            devices_dic.update(item)
+
+    data["devices"] = devices_dic
+
+    return data
+
+
+def update_configuration(dataset_name, new_devices):
+    """
+    Open dataset and appends new_devices to the end
+
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+        new_devices: list or set of new devices for dataset
+    """
+    with open(CONFIG_FILES_PATH + dataset_name + CONFIG_FILE_TYPE, "a") as file:
+        for device in new_devices:
+            file.write("  - "+device+":\n")
+            file.write("      x: UNKNOWN!\n")
+            file.write("      y: UNKNOWN!\n")
+            file.write("\n")
diff --git a/modules/crawler/Utilities/Crawler/BasicCrawlerFunctions.py b/modules/crawler/Utilities/Crawler/BasicCrawlerFunctions.py
new file mode 100644
index 0000000..c94a1b4
--- /dev/null
+++ b/modules/crawler/Utilities/Crawler/BasicCrawlerFunctions.py
@@ -0,0 +1,115 @@
+import requests
+import re
+from Utilities import FolderProcessor
+from bs4 import BeautifulSoup
+
+# Path to crawler logs
+CRAWLER_LOGS_PATH = "CrawlerLogs/"
+# Path to crawled data
+CRAWLED_DATA_PATH = "CrawledData/"
+
+
+def get_all_links(url):
+    """
+    Sends http request to url, downloads all data,
+    extract links
+
+    Args:
+        url: url of website we want to search
+
+    Returns:
+        list of all links
+    """
+    # create response object
+    r = requests.get(url)
+
+    # create beautiful-soup object
+    soup = BeautifulSoup(r.content, 'html5lib')
+    links = []
+
+    for link in soup.findAll('a'):
+        links.append(link.get('href'))
+
+    return links
+
+
+def filter_links(links, regex):
+    """
+    Filters list of links using regex
+
+    Args:
+        links: list of links
+        regex: regex used for filtering
+
+    Returns:
+        filtered list of links
+    """
+    filtered_links = []
+
+    for link in links:
+        if re.search(regex, link):
+            filtered_links.append(link)
+
+    return filtered_links
+
+
+def create_absolute_links(links, archive):
+    """
+        Appends archive path to every link in links
+    Args:
+        links: list of relative links
+        archive: archive url
+
+    Returns:
+        list of absolute links
+    """
+    absolute_links = []
+
+    for link in links:
+        absolute_links.append(archive + link)
+
+    return absolute_links
+
+
+def remove_downloaded_links(links, dataset_name):
+    """
+    Loads already downloaded links from CRAWLER_LOGS_PATH ignore.txt
+    Args:
+        links: list of links
+        dataset_name: name of dataset that has existing configuration file
+
+    Returns:
+        List of links without already downloaded links
+    """
+    downloaded_links = FolderProcessor.load_ignore_set(CRAWLER_LOGS_PATH + dataset_name + "/")
+    final_links = set(links) - downloaded_links
+
+    return final_links
+
+
+def download_file_from_url(url, dataset_name):
+    """
+    Downloads file on provided url and saves it to path
+    Args:
+        url: url file we want to download
+        dataset_name: name of dataset that has existing configuration file
+    """
+    r = requests.get(url, stream=True)
+
+    # splits url and extract last part that contains filename
+    url_parts = url.split("/")
+    file_name = url_parts[len(url_parts)-1]
+
+    log_path = CRAWLER_LOGS_PATH + dataset_name + '/'
+    data_path = CRAWLED_DATA_PATH + dataset_name + '/'
+
+    # download file chunk by chunk so we can download large files
+    with open(data_path + file_name, "wb") as file:
+        for chunk in r.iter_content(chunk_size=1024):
+
+            # writing one chunk at a time to file
+            if chunk:
+                file.write(chunk)
+
+    # after successful download update list of already downloaded files
+    FolderProcessor.update_ignore_set(CRAWLER_LOGS_PATH + dataset_name + "/", url)
diff --git a/modules/crawler/Utilities/Database/DatabaseDataLine.py b/modules/crawler/Utilities/Database/DatabaseDataLine.py
new file mode 100644
index 0000000..47e53d8
--- /dev/null
+++ b/modules/crawler/Utilities/Database/DatabaseDataLine.py
@@ -0,0 +1,14 @@
+class DatabaseDataLine:
+    """
+    Class that specifies the look of data line in database
+    """
+    def __init__(self, name, longitude, latitude, date, occurrence):
+        self.name = name
+        self.latitude = latitude
+        self.longitude = longitude
+        self.date = date
+        self.occurrence = occurrence
+
+    def to_dictionary(self):
+        return {"place": self.name, "x": self.longitude, "y": self.latitude, "number": self.occurrence,
+                "date": self.date}
diff --git a/modules/crawler/Utilities/Database/DatabaseLoader.py b/modules/crawler/Utilities/Database/DatabaseLoader.py
new file mode 100644
index 0000000..cea5dec
--- /dev/null
+++ b/modules/crawler/Utilities/Database/DatabaseLoader.py
@@ -0,0 +1,106 @@
+from Utilities.Database import DatabaseDataLine
+import pymongo
+
+# specify mongodb connection
+MONGODB_CONNECTION = "mongodb://localhost:27017/"
+# mongodb account name
+MONGODB_ACC_NAME = "root"
+# mongodb account password
+MONGODB_ACC_PASSWORD = "root"
+# mongodb data database
+MONGODB_DATA_DATABASE = "DATA"
+# mongodb collection with aviable datasets
+MONGODB_DATASET_COLLECTION = "DATASETS"
+
+# Path to processed data
+PROCESSED_DATA_PATH = "ProcessedData/"
+
+
+def create_database_connection():
+    """
+    Creates connection to mongoDB
+    
+    Returns:
+        Connection to mongoDB
+    """
+    client = pymongo.MongoClient(MONGODB_CONNECTION)
+
+    # Authenticating
+    client.admin.authenticate(MONGODB_ACC_NAME, MONGODB_ACC_PASSWORD)
+
+    database = client[MONGODB_DATA_DATABASE]
+
+    return database
+
+
+def get_data_from_file(filename, config):
+    """
+        Opens processed file, reads it line by line
+        name, ocurrence, date
+        searches name in config and adds device map coordinates
+        than creates a dictionary with date without hours as key
+        and list of data lines as value.
+    Args:
+        filename: name of processed file
+        config: loaded configuration file of dataset
+
+    Returns:
+        dictionary with date without hours as key
+        and list of Datalines as value
+    """
+    dataset_name = config["dataset-name"]
+    dataset_path = PROCESSED_DATA_PATH + dataset_name + '/'
+
+    f = open(dataset_path + filename, "r")
+
+    devices = config["devices"]
+    date_dict = dict()
+
+    for line in f:
+        line = line[:-1]
+
+        csv_column = line.split(";")
+
+        name = csv_column[0]
+        occurrence = csv_column[1]
+        date = csv_column[2]
+
+        database_data_line = DatabaseDataLine.DatabaseDataLine(name, devices[name]["x"]
+                                                               , devices[name]["y"], date, occurrence)
+
+        # if you want to change table split by hours or months change this
+        date_without_hours = date[:-2]
+        if date_without_hours not in date_dict:
+            date_dict[date_without_hours] = list()
+
+        date_dict[date_without_hours].append(database_data_line.to_dictionary())
+
+    return date_dict
+
+
+def load_data_to_database(dataset_name, data_dic):
+    """
+    Takes data_dic created in method get_data_from_file
+    and loads into into database where collection name is dataset_name + data_dic key
+    and data lines are line in collection
+
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+        data_dic: dictionary of data lines created in get_data_from_file
+    """
+    database = create_database_connection()
+
+    # collection where are specified aviable datasets
+    collection_datasets = database[MONGODB_DATASET_COLLECTION]
+
+    # check if newly added data already have a dataset specified in collection
+    dataset_present = collection_datasets.find_one({}, {'name': dataset_name})
+
+    if dataset_present is None:
+        collection_datasets.insert_one({'name': dataset_name})
+
+    for date in data_dic:
+        dataset_collections = database[dataset_name]
+        dataset_collections.insert_one({'name': dataset_name+date})
+        date_dataset = database[dataset_name + date]
+        date_dataset.insert_many(data_dic[date])
diff --git a/modules/crawler/Utilities/DateFormating.py b/modules/crawler/Utilities/DateFormating.py
new file mode 100644
index 0000000..d7b8d9a
--- /dev/null
+++ b/modules/crawler/Utilities/DateFormating.py
@@ -0,0 +1,54 @@
+def date_formatter(string_date):
+    """
+
+    Args:
+        string_date: string containing date in format 22.08.2018 12:27:00
+
+    Returns:
+        string of date in format 0804201814 ddmmYYYY
+    """
+    if string_date[11].isspace():
+        pos = 0
+        srr = ""
+        for i in string_date:
+
+            if pos == 10:
+                srr = srr + '0'
+            else:
+                srr = srr + i
+
+            pos = pos + 1
+
+        string_date = srr
+
+    return_date = string_date[:2] + string_date[3:5] + string_date[6:10]
+
+    return return_date
+
+
+def date_time_formatter(string_date):
+    """
+    Converts one type of date format "dd.mm.yyyy hh.mm.ss" to date format ddmmYYYYhh
+    Args:
+        string_date: string containing date in format 22.08.2018 12:27:00
+
+    Returns:
+        string of date in format 0804201814 ddmmYYYYhh
+    """
+    if string_date[11].isspace():
+        pos = 0
+        srr = ""
+        for i in string_date:
+
+            if pos == 10:
+                srr = srr + '0'
+            else:
+                srr = srr + i
+
+            pos = pos + 1
+
+        string_date = srr
+
+    return_date = string_date[:2] + string_date[3:5] + string_date[6:10] + string_date[11:13]
+
+    return return_date
diff --git a/modules/crawler/Utilities/FolderProcessor.py b/modules/crawler/Utilities/FolderProcessor.py
new file mode 100644
index 0000000..5a23171
--- /dev/null
+++ b/modules/crawler/Utilities/FolderProcessor.py
@@ -0,0 +1,124 @@
+import os
+import zipfile
+from Utilities.CSV import CSVutils
+
+
+def list_of_all_files(path):
+    """
+    Get all files from directory and all files written in ignore.txt
+    and return the difference
+    Args:
+        path: path to Directory
+
+    Returns:
+        list with names of all files in directory
+    """
+    files_in_dir = os.listdir(path)
+
+    ignore_set = load_ignore_set(path)
+
+    return set(files_in_dir).difference(ignore_set)
+
+
+def load_ignore_set(path):
+    """
+    Reads ignore.txt line by line and add it to a set
+    Args:
+        path: Path to directory containing ignore.txt file
+
+    Returns:
+        list of names contained in ignore.txt file
+    """
+    ignore_set = set()
+
+    with open(path + "ignore.txt", "r") as file:
+
+        for line in file:
+            ignore_set.add(line[:-1])
+
+    return ignore_set
+
+
+def update_ignore_set(path, file_name):
+    """
+    Adds file_name to the ignore file
+    Args:
+        path: Path to directory containing ignore.txt file
+        file_name: name of file you want to add to ignore file
+    """
+    with open(path + "ignore.txt", "a") as file:
+        file.write(file_name + '\n')
+
+
+def get_devices_set(path):
+    """
+     Goes trough every not loaded file(not contained in ProcessedData/ignore.txt)
+     Extracts names from not loaded file which should be in first column
+     Creates set of unique devices_names
+
+    Args:
+        path: Path to Processed directory containing ignore.txt file
+
+    Returns:
+        set of unique names contained in not loaded files
+    """
+    files_in_dir = list_of_all_files(path)
+
+    unique_names = set()
+
+    for file_path in files_in_dir:
+        unique_names.update(CSVutils.get_unique_names_from_file(path+file_path, 0))
+
+    return unique_names
+
+
+def get_unknown_devices_set(config, devices):
+    """
+    Compares config and devices a return difference
+
+    Args:
+        config:  loaded configuration file of dataset
+        devices: set of unique devices contained in dataset
+
+    Returns:
+
+    """
+    devices_set = set(config["devices"].keys())
+    unknown_devices_set = devices.difference(devices_set)
+
+    return unknown_devices_set
+
+
+def unzip_all_csv_zip_files_in_folder(path):
+    """
+    Load all files from directory and unzip those which end by .zip
+    After unziping deletes the zip file
+    Args:
+        path: Path to CrawledData directory containing ignore.txt file
+    """
+    files_in_dir = os.listdir(path)
+    zips = []
+
+    for file in files_in_dir:
+        if file.endswith(".zip"):
+            zips.append(path + file)
+
+    for zip_file in zips:
+
+        with zipfile.ZipFile(zip_file, "r") as unziped_file:
+            unziped_file.extractall(path)
+
+        os.remove(zip_file)
+
+
+def clean_folder(path):
+    """
+    Deletes all files in folder
+
+    Args:
+        path: path to folder
+    """
+    files = os.listdir(path)
+
+    for file in files:
+        os.remove(path+file)
diff --git a/modules/crawler/main.py b/modules/crawler/main.py
new file mode 100644
index 0000000..f2b5629
--- /dev/null
+++ b/modules/crawler/main.py
@@ -0,0 +1,29 @@
+import Pipeline
+import os
+
+# Path to configuration files
+CONFIG_FILES_PATH = "DatasetConfigs/"
+
+
+def run_pipeline_for_all_datasets():
+    """
+    Runs whole DataScript pipeline for every dataset that has existing configuration file
+    """
+    files_in_dir = os.listdir(CONFIG_FILES_PATH)
+
+    for file in files_in_dir:
+        name = file.split('.')
+        Pipeline.run_full_pipeline(name[0])
+
+
+def run_pipeline_for_one_dataset(dataset_name):
+    """
+    Runs whole DataScript pipeline for only one dataset
+
+    Args:
+        dataset_name: name of dataset that has existing configuration file
+    """
+    Pipeline.run_full_pipeline(dataset_name)
+
+
+run_pipeline_for_all_datasets()
diff --git a/modules/crawler/requirements.txt b/modules/crawler/requirements.txt
index 8518c3f..88e8614 100644
--- a/modules/crawler/requirements.txt
+++ b/modules/crawler/requirements.txt
@@ -1,3 +1,14 @@
-emoji===0.5.4
-pylint===2.4.4
+beautifulsoup4==4.9.0
+certifi==2020.4.5.1
+chardet==3.0.4
+html5lib==1.0.1
+idna==2.9
+pymongo==3.10.1
+PyYAML==5.3.1
+requests==2.23.0
+six==1.14.0
+soupsieve==2.0
+urllib3==1.25.9
+webencodings==0.5.1
+pylint===2.4.4
 yapf===0.30.0
\ No newline at end of file
diff --git a/modules/crawler/test.py b/modules/crawler/test.py
deleted file mode 100644
index 295d961..0000000
--- a/modules/crawler/test.py
+++ /dev/null
@@ -1,3 +0,0 @@
-import emoji
-print(emoji.emojize("Python is :thumbs_up:"))
-print("test")
diff --git a/python-module/CrawledData/JIS/ignore.txt b/python-module/CrawledData/JIS/ignore.txt
deleted file mode 100644
index c5df76e..0000000
--- a/python-module/CrawledData/JIS/ignore.txt
+++ /dev/null
@@ -1 +0,0 @@
-ignore.txt
diff --git a/python-module/CrawledData/KOLOBEZKY/ignore.txt b/python-module/CrawledData/KOLOBEZKY/ignore.txt
deleted file mode 100644
index c5df76e..0000000
--- a/python-module/CrawledData/KOLOBEZKY/ignore.txt
+++ /dev/null
@@ -1 +0,0 @@
-ignore.txt
diff --git a/python-module/CrawledData/WIFI/ignore.txt b/python-module/CrawledData/WIFI/ignore.txt
deleted file mode 100644
index c5df76e..0000000
--- a/python-module/CrawledData/WIFI/ignore.txt
+++ /dev/null
@@ -1 +0,0 @@
-ignore.txt
diff --git a/python-module/CrawlerLogs/JIS/ignore.txt b/python-module/CrawlerLogs/JIS/ignore.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/python-module/CrawlerLogs/KOLOBEZKY/ignore.txt b/python-module/CrawlerLogs/KOLOBEZKY/ignore.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/python-module/CrawlerLogs/WIFI/ignore.txt b/python-module/CrawlerLogs/WIFI/ignore.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/python-module/DatasetConfigs/JIS.yaml b/python-module/DatasetConfigs/JIS.yaml
deleted file mode 100644
index 2731027..0000000
--- a/python-module/DatasetConfigs/JIS.yaml
+++ /dev/null
@@ -1,194 +0,0 @@
-# jmeno datasetu, pod kterym bude zobrazen v aplikaci
-dataset-name: JIS
-# root slozka, ktera obsahuje odkazy na dataset
-url: https://openstore.zcu.cz/
-# volitelny parameter, ktery specifikuje vzor jmena datasetu, ktera se budou stahovat
-regex: OD_ZCU_JIS_[0-9][0-9]_[0-9][0-9][0-9][0-9]_CSV.zip
-# volitelny parametr, ktery udava jednou za kolik dní se budou nová data vyhledávat
-update-period: 24
-# pozice jednotlivych zarizeni, ktera jsou v datasetu
-devices:
-  - US 005 - z�vora vjezd:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_KL20:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - US 005 - m�� vjezd:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza4-kasa3:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - NTIS-BUFET:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Parkoviste-vjezd:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza4-kasa1:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza1-kasa-p:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza4-kasa2:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - L2:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - EP-BUFET:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - KolaBory-vnitrni:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza1-kasa-l:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Zavora-FEL:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Zavora-NTIS-vjezd:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - L-Posilovna:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_ST407:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - M16:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Zavora-Kaplirova:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Zavora-FDU:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - KolaBory-vnejsi:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_VC53:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza4-kasa4:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - KL-Posilovna:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - VC-VYJEZD:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - EXT/kola-B:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Menza4-kasa5:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - L1L2-vchod:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - VC-VJEZD:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - A3:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_UB113:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_CHEB:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_PRA1:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - L1:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_UB211:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - A1:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - EXT/kola:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - STUD_KL87:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - UV1-Bufet:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - M14:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Zavora-NTIS-vyjezd:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - B3-kolarna:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - B3-LEVY:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - MenzaKL-vydej:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - A2-Hlavni vchod:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - Parkoviste-vyjezd:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
diff --git a/python-module/DatasetConfigs/KOLOBEZKY.yaml b/python-module/DatasetConfigs/KOLOBEZKY.yaml
deleted file mode 100644
index b1aa785..0000000
--- a/python-module/DatasetConfigs/KOLOBEZKY.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-# jmeno datasetu, pod kterym bude zobrazen v aplikaci
-dataset-name: KOLOBEZKY
-# root slozka, ktera obsahuje odkazy na dataset
-url: https://openstore.zcu.cz/
-# volitelny parameter, ktery specifikuje vzor jmena datasetu, ktera se budou stahovat
-regex: OD_ZCU_KOLOBEZKY_[0-9][0-9]_[0-9][0-9][0-9][0-9]_CSV.zip
-# volitelny parametr, ktery udava jednou za kolik dní se budou nová data vyhledávat
-update-period: 24
-# pozice jednotlivych zarizeni, ktera jsou v datasetu
-devices:
-  - stojan-knihovna:
-      x: 49.725145
-      y: 13.353319
-
-  - stojan-Machovka:
-      x: 49.725197
-      y: 13.368016
-
-  -  stojan-FDU:
-      x: 49.725360
-      y: 13.347909
-
-  - stojan-bory:
-      x: 49.724576
-      y: 13.350861
-
-  - stojan-zcu:
-      x: 49.726033
-      y: 13.365958
-
-  - stojan-borska:
-      x: 49.734518
-      y: 13.359475
diff --git a/python-module/DatasetConfigs/WIFI.yaml b/python-module/DatasetConfigs/WIFI.yaml
deleted file mode 100644
index f2edd97..0000000
--- a/python-module/DatasetConfigs/WIFI.yaml
+++ /dev/null
@@ -1,846 +0,0 @@
-# jmeno datasetu, pod kterym bude zobrazen v aplikaci
-dataset-name: WIFI
-# root slozka, ktera obsahuje odkazy na dataset
-url: https://openstore.zcu.cz/
-# volitelny parameter, ktery specifikuje vzor jmena datasetu, ktera se budou stahovat
-regex: OD_ZCU_WIFI_[0-9][0-9]_[0-9][0-9][0-9][0-9]_CSV.zip
-# volitelny parametr, ktery udava jednou za kolik dní se budou nová data vyhledávat
-update-period: 24
-# pozice jednotlivych zarizeni, ktera jsou v datasetu
-devices:
-  - ul-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a1-s6-cat2960-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s1-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s3-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s3-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a1-s4-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - kl-idf1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s8-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-k-s3-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-kks-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - kl-s2-idf1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - kl-idf3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s11-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ec-s1-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-k-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-n1-nx5548-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tf-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - um-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-ui411-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ur-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s2-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - el-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ek-s2-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s8-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-n2-nx5548-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - kl-s1-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - eh-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s8-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - rj-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s6-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m16-s3-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ec-s2-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - us-idf5-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-cat2960-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-s8-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m16-s4-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - eu-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s3-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - el-z1-cat2960c-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uv-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-s1-cat4507-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - rj-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - so-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - un-idf3b-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s4-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a1-s3-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - jj-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-cat4900-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m14-s2-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - el-z2-cat2960c-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tc-s4-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uh-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-rek-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a2-s1-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - vc-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m14-s4-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tc-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - so-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s3-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-2504-wlc:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s5-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a2-s2-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tf-cat4500-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s1-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-s6-cat2960-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-kks-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-rti-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s12-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - th-s1-cat3750-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-cat2960-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-s-cat6506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - un-idf4a-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - st-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-4404-wlc:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s10-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tg-s2-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tc-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-k-s4-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - nc-s1-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tf-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - vc-s2-idf-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - vc-s1-idf-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - kl-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ko-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-kks-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - sp-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-s4-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m16-s5-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - th-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uu-kks-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s5-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s9-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-kks-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tg-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-tel2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-tel-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-u5-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s2-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tg-s1-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s7-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - kl-idf2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uf-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ek-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s1-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m14-s1-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - un-idf3a-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a1-s5-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - vc-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-kpv-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ut-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uc-idf2a-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ps-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m16-cat3560-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s7-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ek-s1-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-s3-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-kto-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tf-s2-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ts-cat4900-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s8-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m14-s3-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-ops-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-s1-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-ui411-s2-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s7-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-s2-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - un-idf4b-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-s4-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s6-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - us-z-cat2960c-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ls-s1-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a2-cat2960-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s11-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-k-s1-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tc-s6-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-5520-wlc:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - eu-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - rs-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s5-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-ui402-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tc-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s6-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uu-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s6-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-cat4500-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uc-idf1b-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s7-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-5508-wlc:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s2-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-ui403-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ep-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - pc-s1-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-k-s5-cat2960-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uc-kma-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a3-s5-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s4-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a2-s3-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s9-cat3750-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-s2-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s5-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uc-idf2b-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ls-z-cat2960c-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s4-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s4-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ub-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uc-idf1a-cat4510-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-s1-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ps-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m20-s4-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - so-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s9-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a2-s5-cat2960-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s1-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m16-s1-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m16-s2-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s2-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l2-s7-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-k-s2-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ls-s2-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-cat3750-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - lk-l1-s6-sw.lk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-u1-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - hj-s1-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a4-cat2960-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - uk-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - rti-cat4506-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - tc-s5-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-m14-cat2960-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - mk-b36-s10-sw.mk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ul-s6-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-ui121-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a1-s2-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ls-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-u3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - bk-a1-s1-sw.bk.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ic-ui411-s1-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - rj-s2-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - ko-cat3560-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - jj-s3-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - cd-s5-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
-  - vc-s3-idf-cat2960-sw.zcu.cz:
-      x: UNKNOWN!
-      y: UNKNOWN!
-
diff --git a/python-module/DatasetCrawler/JISCrawler.py b/python-module/DatasetCrawler/JISCrawler.py
deleted file mode 100644
index adbb507..0000000
--- a/python-module/DatasetCrawler/JISCrawler.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from Utilities import FolderProcessor
-from Utilities.Crawler import BasicCrawlerFunctions
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "CrawledData/"
-
-
-def crawl(config):
-    """
-    Implement crawl method that downloads new data to path_for_files
-    For keeping the project structure
-    url , regex, and dataset_name from config
-    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py
-
-    Args:
-        config: loaded configuration file of dataset
-    """
-    dataset_name = config["dataset-name"]
-    url = config['url']
-    regex = config['regex']
-    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'
-
-    first_level_links = BasicCrawlerFunctions.get_all_links(url)
-    filtered_first_level_links = BasicCrawlerFunctions.filter_links(first_level_links, "^OD_ZCU")
-    absolute_first_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_first_level_links, url)
-
-    files = []
-
-    for link in absolute_first_level_links:
-        second_level_links = BasicCrawlerFunctions.get_all_links(link)
-        filtered_second_level_links = BasicCrawlerFunctions.filter_links(second_level_links, regex)
-        absolute_second_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_second_level_links, link)
-        final_links = BasicCrawlerFunctions.remove_downloaded_links(absolute_second_level_links, dataset_name)
-
-        for file_link in final_links:
-            files.append(file_link)
-
-    for file in files:
-        BasicCrawlerFunctions.download_file_from_url(file, dataset_name)
-
-    FolderProcessor.unzip_all_csv_zip_files_in_folder(path_for_files)
diff --git a/python-module/DatasetCrawler/KOLOBEZKYCrawler.py b/python-module/DatasetCrawler/KOLOBEZKYCrawler.py
deleted file mode 100644
index adbb507..0000000
--- a/python-module/DatasetCrawler/KOLOBEZKYCrawler.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from Utilities import FolderProcessor
-from Utilities.Crawler import BasicCrawlerFunctions
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "CrawledData/"
-
-
-def crawl(config):
-    """
-    Implement crawl method that downloads new data to path_for_files
-    For keeping the project structure
-    url , regex, and dataset_name from config
-    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py
-
-    Args:
-        config: loaded configuration file of dataset
-    """
-    dataset_name = config["dataset-name"]
-    url = config['url']
-    regex = config['regex']
-    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'
-
-    first_level_links = BasicCrawlerFunctions.get_all_links(url)
-    filtered_first_level_links = BasicCrawlerFunctions.filter_links(first_level_links, "^OD_ZCU")
-    absolute_first_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_first_level_links, url)
-
-    files = []
-
-    for link in absolute_first_level_links:
-        second_level_links = BasicCrawlerFunctions.get_all_links(link)
-        filtered_second_level_links = BasicCrawlerFunctions.filter_links(second_level_links, regex)
-        absolute_second_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_second_level_links, link)
-        final_links = BasicCrawlerFunctions.remove_downloaded_links(absolute_second_level_links, dataset_name)
-
-        for file_link in final_links:
-            files.append(file_link)
-
-    for file in files:
-        BasicCrawlerFunctions.download_file_from_url(file, dataset_name)
-
-    FolderProcessor.unzip_all_csv_zip_files_in_folder(path_for_files)
diff --git a/python-module/DatasetCrawler/WIFICrawler.py b/python-module/DatasetCrawler/WIFICrawler.py
deleted file mode 100644
index adbb507..0000000
--- a/python-module/DatasetCrawler/WIFICrawler.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from Utilities import FolderProcessor
-from Utilities.Crawler import BasicCrawlerFunctions
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "CrawledData/"
-
-
-def crawl(config):
-    """
-    Implement crawl method that downloads new data to path_for_files
-    For keeping the project structure
-    url , regex, and dataset_name from config
-    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py
-
-    Args:
-        config: loaded configuration file of dataset
-    """
-    dataset_name = config["dataset-name"]
-    url = config['url']
-    regex = config['regex']
-    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'
-
-    first_level_links = BasicCrawlerFunctions.get_all_links(url)
-    filtered_first_level_links = BasicCrawlerFunctions.filter_links(first_level_links, "^OD_ZCU")
-    absolute_first_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_first_level_links, url)
-
-    files = []
-
-    for link in absolute_first_level_links:
-        second_level_links = BasicCrawlerFunctions.get_all_links(link)
-        filtered_second_level_links = BasicCrawlerFunctions.filter_links(second_level_links, regex)
-        absolute_second_level_links = BasicCrawlerFunctions.create_absolute_links(filtered_second_level_links, link)
-        final_links = BasicCrawlerFunctions.remove_downloaded_links(absolute_second_level_links, dataset_name)
-
-        for file_link in final_links:
-            files.append(file_link)
-
-    for file in files:
-        BasicCrawlerFunctions.download_file_from_url(file, dataset_name)
-
-    FolderProcessor.unzip_all_csv_zip_files_in_folder(path_for_files)
diff --git a/python-module/DatasetProcessing/JISProcessor.py b/python-module/DatasetProcessing/JISProcessor.py
deleted file mode 100644
index 5cbde73..0000000
--- a/python-module/DatasetProcessing/JISProcessor.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from Utilities.CSV import CSVDataLine, CSVutils
-from Utilities import DateFormating
-
-
-def process_file(filename):
-    """
-    Method that take path to crawled file and outputs date dictionary using method:
-    CSVutils.export_data_to_csv(filename, date_dict)
-    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)
-    and value is dictionary where keys devices (specified in configuration file)
-    and value is CSVDataLine.CSVDataLine with device,date and occurrence
-
-    Args:
-        filename: name of processed file
-
-    Returns:
-        False if not implemented
-        True when implemented
-    """
-    with open(filename, "r", encoding="utf-8") as file:
-
-        date_dict = dict()
-
-        for line in file:
-
-            array = line.split(";")
-
-            date = DateFormating.date_time_formatter(array[1][1:-1])
-            name = array[0][1:-1]
-            occurrence = array[2][:-1]
-
-            if date not in date_dict:
-                date_dict[date] = dict()
-
-            if name in date_dict[date]:
-                date_dict[date][name].occurrence += int(occurrence)
-            else:
-                date_dict[date][name] = CSVDataLine.CSVDataLine(name, date, int(occurrence))
-
-    CSVutils.export_data_to_csv(filename, date_dict)
-    return True
-
diff --git a/python-module/DatasetProcessing/KOLOBEZKYProcessor.py b/python-module/DatasetProcessing/KOLOBEZKYProcessor.py
deleted file mode 100644
index eba863a..0000000
--- a/python-module/DatasetProcessing/KOLOBEZKYProcessor.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from Utilities.CSV import CSVDataLine, CSVutils
-from Utilities import DateFormating
-
-
-def process_file(filename):
-    """
-    Method that take path to crawled file and outputs date dictionary using method:
-    CSVutils.export_data_to_csv(filename, date_dict)
-    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)
-    and value is dictionary where keys devices (specified in configuration file)
-    and value is CSVDataLine.CSVDataLine with device,date and occurrence
-
-    Args:
-        filename: name of processed file
-
-    Returns:
-        False if not implemented
-        True when implemented
-    """
-    with open(filename, "r") as file:
-
-        date_dict = dict()
-
-        for line in file:
-
-            array = line.split(";")
-
-            date = DateFormating.date_time_formatter(array[0][1:-1])
-            name = array[1][1:-1]
-
-            if date not in date_dict:
-                date_dict[date] = dict()
-
-            if name in date_dict[date]:
-                date_dict[date][name].occurrence += 1
-            else:
-                date_dict[date][name] = CSVDataLine.CSVDataLine(name, date, 1)
-
-    CSVutils.export_data_to_csv(filename, date_dict)
-    return True
-
diff --git a/python-module/DatasetProcessing/WIFIProcessor.py b/python-module/DatasetProcessing/WIFIProcessor.py
deleted file mode 100644
index e059c68..0000000
--- a/python-module/DatasetProcessing/WIFIProcessor.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from Utilities.CSV import CSVDataLine, CSVutils
-from Utilities import DateFormating
-
-
-def process_file(filename):
-    """
-    Method that take path to crawled file and outputs date dictionary using method:
-    CSVutils.export_data_to_csv(filename, date_dict)
-    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)
-    and value is dictionary where keys devices (specified in configuration file)
-    and value is CSVDataLine.CSVDataLine with device,date and occurrence
-
-    Args:
-        filename: name of processed file
-
-    Returns:
-        False if not implemented
-        True when implemented
-    """
-    with open(filename, "r", encoding="utf-8") as file:
-
-        date_dict = dict()
-
-        for line in file:
-
-            array = line.split(";")
-
-            date = DateFormating.date_time_formatter(array[4][1:-2])
-            name = array[1][1:-1]
-            occurrence = array[0]
-
-            if date not in date_dict:
-                date_dict[date] = dict()
-
-            if name in date_dict[date]:
-                date_dict[date][name].occurrence += int(occurrence)
-            else:
-                date_dict[date][name] = CSVDataLine.CSVDataLine(name, date, int(occurrence))
-
-    CSVutils.export_data_to_csv(filename, date_dict)
-    return True
-
diff --git a/python-module/Pipeline.py b/python-module/Pipeline.py
deleted file mode 100644
index 012e532..0000000
--- a/python-module/Pipeline.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from Utilities import FolderProcessor, ConfigureFunctions
-from Utilities.Database import DatabaseLoader
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "CrawledData/"
-# Path to processed data
-PROCESSED_DATA_PATH = "ProcessedData/"
-# Path to dataset crawler implementations
-CRAWLER_LIB_PATH = "DatasetCrawler."
-# Path to dataset processor implementations
-PROCESSOR_LIB_PATH = "DatasetProcessing."
-
-
-def crawl_data(config):
-    """
-      Imports dataset crawler in DatasetCrawler/"dataset_name"Crawler.py
-      runs crawler.
-
-    Args:
-        config: loaded configuration file of dataset
-    """
-    dataset_name = config["dataset-name"]
-
-    my_function = __import__(CRAWLER_LIB_PATH + dataset_name + "Crawler", globals(), locals(), ['crawl']).crawl
-    my_function(config)
-
-    dataset_name += '/'
-
-
-def process_data(dataset_name):
-    """
-    Goes trough every not processed file(not contained in CrawledData/"dataset_name"/ignore.txt)
-    Imports dataset processor in DatasetProcessing/"dataset_name"Processor.py
-    Runs processor on every file
-    After successful processing updates ignore.txt
-
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-    """
-    dataset_path = dataset_name + '/'
-
-    process_file_func = __import__(PROCESSOR_LIB_PATH + dataset_name + "Processor", globals(), locals(),
-                                   ['process_file']).process_file
-
-    not_processed_files = FolderProcessor.list_of_all_files(CRAWLED_DATA_PATH + dataset_path)
-
-    for not_processed_file in not_processed_files:
-        process_file_func(CRAWLED_DATA_PATH + dataset_path + not_processed_file)
-        FolderProcessor.update_ignore_set(CRAWLED_DATA_PATH + dataset_path, not_processed_file)
-
-
-def validate_process_data(config):
-    """
-    Function goes through newly processed data and checks theirs status
-
-    Args:
-        config: loaded configuration file of dataset
-
-    Returns:
-        boolean variable TRUE/FALSE.
-        Data processed correctly - TRUE
-        Wrong format or NEW unknown devices - FALSE
-    """
-    processed_devices_set = FolderProcessor.get_devices_set(PROCESSED_DATA_PATH + config["dataset-name"] + '/')
-    unknown_devices_set = FolderProcessor.get_unknown_devices_set(config, processed_devices_set)
-    unknown_devices_size = len(unknown_devices_set)
-
-    if unknown_devices_size != 0:
-        print("There is " + str(unknown_devices_size) + " unknown devices\n")
-        print("Adding devices to " + config["dataset-name"] + " config file\n")
-        ConfigureFunctions.update_configuration(config["dataset-name"], unknown_devices_set)
-        return False
-
-    for device in config["devices"]:
-        device = config["devices"][device]
-        if device["x"] == "UNKNOWN!" or device["y"] == "UNKNOWN!":
-            print(config["dataset-name"] + " Config file contains devices with UNKOWN! values please update them\n")
-            return False
-
-    return True
-
-
-def load_data_to_database(config):
-    """
-    Goes trough every not loaded file(not contained in ProcessedData/ignore.txt)
-    loads data appends coordination from configurations
-    and exports it into the database
-    After successful exporting updates ignore.txt
-
-    Args:
-        config: loaded configuration file of dataset
-    """
-    dataset_name = config["dataset-name"]
-    dataset_path = dataset_name + '/'
-
-    # get all unprocessed files from dataset
-    not_loaded_files = FolderProcessor.list_of_all_files(PROCESSED_DATA_PATH + dataset_path)
-
-    # load every file
-    for not_loaded_file in not_loaded_files:
-        # load processed data
-        processed_data = DatabaseLoader.get_data_from_file(not_loaded_file, config)
-        # load processed data to database
-        DatabaseLoader.load_data_to_database(dataset_name, processed_data)
-        FolderProcessor.update_ignore_set(PROCESSED_DATA_PATH + dataset_path, not_loaded_file)
-
-
-def run_full_pipeline(dataset_name):
-    """
-    Loads config file and starts full pipeline
-    -crawl data
-    -process data
-    -load data to database
-
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-    """
-    config = ConfigureFunctions.load_configuration(dataset_name)
-    crawl_data(config)
-    process_data(config["dataset-name"])
-
-    validation_test = validate_process_data(config)
-
-    if validation_test:
-        load_data_to_database(config)
-
diff --git a/python-module/ProcessedData/JIS/ignore.txt b/python-module/ProcessedData/JIS/ignore.txt
deleted file mode 100644
index c5df76e..0000000
--- a/python-module/ProcessedData/JIS/ignore.txt
+++ /dev/null
@@ -1 +0,0 @@
-ignore.txt
diff --git a/python-module/ProcessedData/KOLOBEZKY/ignore.txt b/python-module/ProcessedData/KOLOBEZKY/ignore.txt
deleted file mode 100644
index c5df76e..0000000
--- a/python-module/ProcessedData/KOLOBEZKY/ignore.txt
+++ /dev/null
@@ -1 +0,0 @@
-ignore.txt
diff --git a/python-module/ProcessedData/WIFI/ignore.txt b/python-module/ProcessedData/WIFI/ignore.txt
deleted file mode 100644
index c5df76e..0000000
--- a/python-module/ProcessedData/WIFI/ignore.txt
+++ /dev/null
@@ -1 +0,0 @@
-ignore.txt
diff --git a/python-module/Scripts/PrepareNewDataset.py b/python-module/Scripts/PrepareNewDataset.py
deleted file mode 100644
index 982b346..0000000
--- a/python-module/Scripts/PrepareNewDataset.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import os
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "../CrawledData/"
-# Path to processed data
-PROCESSED_DATA_PATH = "../ProcessedData/"
-# Path to crawler logs
-CRAWLER_LOGS_PATH = "../CrawlerLogs/"
-# Path for DatasetCrawlers implementations
-CRAWLER_PROGRAM_PATH = "../DatasetCrawler"
-# Path for DatasetProcessors implementations
-PROCESSOR_PROGRAM_PATH = "../DatasetProcessing"
-# Path to dataset configuration files
-CONFIG_FILES_PATH = "../DatasetConfigs"
-
-
-def create_default_config_file(dataset_name):
-    """
-    Creates default config file
-
-    Args:
-        dataset_name: Name of newly created dataset
-    """
-    with open(CONFIG_FILES_PATH + "/" + dataset_name + ".yaml", "w") as file:
-        file.write("# jmeno datasetu, pod kterym bude zobrazen v aplikaci\n")
-        file.write("dataset-name: " + dataset_name + "\n")
-        file.write("# root slozka, ktera obsahuje odkazy na dataset\n")
-        file.write("url: ZDE VLOZTE URL\n")
-        file.write("# volitelny parameter, ktery specifikuje vzor jmrna datasetu, ktera se budou stahovat\n")
-        file.write("regex: ZDE VLOZTE REGEX\n")
-        file.write("# volitelny parametr, ktery udava jak casto se budou hledat nove datasety, pokud prazdne, "
-                   "tak defaultni hodnota (dny)\n")
-        file.write("update-period: ZDE VLOZTE HODNOTU\n")
-        file.write("# pozice jednotlivych zarizeni, ktera jsou v datasetu\n")
-        file.write("devices:\n")
-
-
-def create_default_processor(dataset_name):
-    """
-    Creates default processor for dataset
-
-    Args:
-        dataset_name: Name of newly created dataset
-    """
-    with open(PROCESSOR_PROGRAM_PATH + "/" + dataset_name + "Processor.py", "w") as file:
-        file.write("from Utilities.CSV import CSVDataLine, CSVutils")
-        file.write("\n")
-        file.write("\n")
-        file.write("def process_file(filename):\n")
-        file.write("    \"\"\"\n")
-        file.write("    Method that take path to crawled file and outputs date dictionary using method:\n")
-        file.write("    CSVutils.export_data_to_csv(filename, date_dict)\n")
-        file.write("    Date dictionary is a dictionary where keys are dates in format ddmmYYYYhh (0804201815)\n")
-        file.write("    and value is dictionary where keys devices (specified in configuration file)\n")
-        file.write("    and value is CSVDataLine.CSVDataLine with device,date and occurrence\n")
-        file.write("\n")
-        file.write("    Args:\n")
-        file.write("    filename: name of processed file\n")
-        file.write("\n")
-        file.write("    Returns:\n")
-        file.write("    False if not implemented\n")
-        file.write("    True when implemented\n")
-        file.write("    \"\"\"\n")
-        file.write("    print(\"You must implements process_file method first!\")\n")
-        file.write("    #CSVutils.export_data_to_csv(filename, date_dict)\n")
-        file.write("    return False\n")
-
-
-def create_default_crawler(dataset_name):
-    """
-    Creates default crawler for dataset
-
-    Args:
-        dataset_name: Name of newly created dataset
-    """
-
-    with open(CRAWLER_PROGRAM_PATH + "/" + dataset_name + "Crawler.py", "w") as file:
-        file.write("# Path to crawled data\n")
-        file.write("CRAWLED_DATA_PATH = \"CrawledData/\"\n")
-        file.write("\n")
-        file.write("\n")
-        file.write("def crawl(config):\n")
-        file.write("    \"\"\"\n")
-        file.write("    Implement crawl method that downloads new data to path_for_files\n")
-        file.write("    For keeping the project structure\n")
-        file.write("    url , regex, and dataset_name from config\n")
-        file.write("    You can use already implemented functions from Utilities/Crawler/BasicCrawlerFunctions.py\n")
-        file.write("\n")
-        file.write("    Args:\n")
-        file.write("        config: loaded configuration file of dataset\n")
-        file.write("    \"\"\"\n")
-        file.write("    dataset_name = config[\"dataset-name\"]\n")
-        file.write("    url = config['url']\n")
-        file.write("    regex = config['regex']\n")
-        file.write("    path_for_files = CRAWLED_DATA_PATH + dataset_name + '/'\n")
-        file.write("    print(\"You must implements Crawl method first!\")\n")
-
-
-def create_ignore_file(path, text):
-    """
-    Creates ignore file
-    Args:
-        path: path to directory for creating ignore.txt
-        text: text that will be on first line of ignore.txt can be None
-    """
-    with open(path + "/ignore.txt", "w") as file:
-        if text is not None:
-            file.write(text + "\n")
-
-
-def prepare_dataset_structure(dataset_name):
-    """
-    Prepares folders for new dataset
-    Args:
-        dataset_name: Name of newly created dataset
-    """
-    jump_folder = "../"
-
-    # create folder for crawled data
-    try:
-        path = CRAWLED_DATA_PATH+dataset_name
-        os.mkdir(path)
-        create_ignore_file(path, "ignore.txt")
-    except os.error as e:
-        print(e)
-        print("Creation of the directory %s failed" % path)
-
-    # create folder for processed data
-    try:
-        path = PROCESSED_DATA_PATH + dataset_name
-        os.mkdir(path)
-        create_ignore_file(path, "ignore.txt")
-    except OSError:
-        print("Creation of the directory %s failed" % path)
-
-    # create folder for crawler logs
-    try:
-        path = CRAWLER_LOGS_PATH + dataset_name
-        os.mkdir(path)
-        create_ignore_file(path, None)
-    except OSError:
-        print("Creation of the directory %s failed" % path)
-
-    create_default_crawler(dataset_name)
-    create_default_processor(dataset_name)
-    create_default_config_file(dataset_name)
-
-
-prepare_dataset_structure("TEST")
diff --git a/python-module/Scripts/RemoveDataset.py b/python-module/Scripts/RemoveDataset.py
deleted file mode 100644
index 3737de0..0000000
--- a/python-module/Scripts/RemoveDataset.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import os
-import shutil
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "../CrawledData/"
-# Path to processed data
-PROCESSED_DATA_PATH = "../ProcessedData/"
-# Path to crawler logs
-CRAWLER_LOGS_PATH = "../CrawlerLogs/"
-# Path to dataset configuration files
-CONFIG_FILES_PATH = "../DatasetConfigs"
-# Path for DatasetCrawlers implementations
-CRAWLER_PROGRAM_PATH = "../DatasetCrawler"
-# Path for DatasetProcessors implementations
-PROCESSOR_PROGRAM_PATH = "../DatasetProcessing"
-
-
-def remove_dataset(dataset_name):
-    """
-    Remove dataset
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-    """
-    shutil.rmtree(CRAWLED_DATA_PATH + dataset_name + "/")
-    shutil.rmtree(PROCESSED_DATA_PATH + dataset_name + "/")
-    shutil.rmtree(CRAWLER_LOGS_PATH + dataset_name + "/")
-
-    os.remove(CONFIG_FILES_PATH + "/" + dataset_name + ".yaml")
-    os.remove(CRAWLER_PROGRAM_PATH + "/" + dataset_name + "Crawler.py")
-    os.remove(PROCESSOR_PROGRAM_PATH + "/" + dataset_name + "Processor.py")
-
-    print("Dataset: " + dataset_name + " removed");
-
-remove_dataset("TEST");
diff --git a/python-module/Scripts/RemoveDatasetDatabase.py b/python-module/Scripts/RemoveDatasetDatabase.py
deleted file mode 100644
index 4e28442..0000000
--- a/python-module/Scripts/RemoveDatasetDatabase.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from Utilities.Database import DatabaseLoader
-
-
-def remove_dataset_database(dataset_name):
-    """
-    Removes dataset entries from database
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-    """
-    # Creating connection
-    mydb = DatabaseLoader.create_database_connection();
-
-    # collection where are specified aviable datasets
-    collection_datasets = mydb[DatabaseLoader.MONGODB_DATASET_COLLECTION]
-
-    collection_datasets.delete_one({"name": dataset_name})
-    print("Removing record from DATASETS collection")
-
-
-    # Retrieve list of all collections
-    collections = mydb.list_collection_names()
-
-    # Drop of all collections
-    for name in collections:
-        if name.startswith(dataset_name):
-            mydb[name].drop()
-            print("Dropping: " + name)
-
-    print("Database Cleaned")
-
-
-remove_dataset_database("KOLOBEZKY")
\ No newline at end of file
diff --git a/python-module/Scripts/ResetDatabaseData.py b/python-module/Scripts/ResetDatabaseData.py
deleted file mode 100644
index a85ffc9..0000000
--- a/python-module/Scripts/ResetDatabaseData.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from Utilities.Database import DatabaseLoader
-
-
-def clean_database():
-    """
-    Deletes all collections from database
-    """
-    # Create connection
-    mydb = DatabaseLoader.create_database_connection()
-
-    # Retrieve list of all collections
-    collections = mydb.list_collection_names()
-
-    # Drop of all collections
-    for name in collections:
-        mydb[name].drop()
-
-    print("Database Cleaned")
-
-
-clean_database();
\ No newline at end of file
diff --git a/python-module/Scripts/ResetDataset.py b/python-module/Scripts/ResetDataset.py
deleted file mode 100644
index f27379f..0000000
--- a/python-module/Scripts/ResetDataset.py
+++ /dev/null
@@ -1,55 +0,0 @@
-import os
-from Utilities import FolderProcessor
-
-# Path to crawled data
-CRAWLED_DATA_PATH = "../CrawledData/"
-# Path to processed data
-PROCESSED_DATA_PATH = "../ProcessedData/"
-# Path to crawler logs
-CRAWLER_LOGS_PATH = "../CrawlerLogs/"
-# Path to dataset configuration files
-CONFIG_FILES_PATH = "../DatasetConfigs"
-
-
-def create_ignore_file(path, text):
-    """
-    Creates ignore file
-    Args:
-        path: path to directory for creating ignore.txt
-        text: text that will be on first line of ignore.txt can be None
-    """
-    with open(path + "/ignore.txt", "w") as file:
-        if text is not None:
-            file.write(text + "\n")
-
-
-def reset_dataset(dataset_name):
-    """
-    Resets all saved data in dataset except config and implementation
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-    """
-    path = CRAWLED_DATA_PATH + dataset_name + "/"
-    FolderProcessor.clean_folder(path)
-    create_ignore_file(path, "ignore.txt")
-
-    path = PROCESSED_DATA_PATH + dataset_name + "/"
-    FolderProcessor.clean_folder(path)
-    create_ignore_file(path, "ignore.txt")
-
-    path = CRAWLER_LOGS_PATH + dataset_name + "/"
-    FolderProcessor.clean_folder(path)
-    create_ignore_file(path, None)
-
-
-def reset_all_datasets():
-    """
-    Resets all saved data in all datasets with config file except configs and implementation
-    """
-    datasets = os.listdir(CONFIG_FILES_PATH)
-
-    for dataset in datasets:
-        reset_dataset(dataset.split('.')[0])
-
-
-reset_all_datasets()
diff --git a/python-module/Utilities/CSV/CSVDataLine.py b/python-module/Utilities/CSV/CSVDataLine.py
deleted file mode 100644
index 577af78..0000000
--- a/python-module/Utilities/CSV/CSVDataLine.py
+++ /dev/null
@@ -1,13 +0,0 @@
-class CSVDataLine:
-    """
-    Class that specifies the look of data line in processed csv file
-    prepared for database
-    """
-    def __init__(self, name, date, occurrence):
-        self.name = name
-        self.date = date
-        self.occurrence = occurrence
-
-    def to_csv(self):
-        return self.name + ";" + str(self.occurrence) + ";" + self.date
-
diff --git a/python-module/Utilities/CSV/CSVutils.py b/python-module/Utilities/CSV/CSVutils.py
deleted file mode 100644
index c68e2f6..0000000
--- a/python-module/Utilities/CSV/CSVutils.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Path to processed data
-PROCESSED_DATA_PATH = "ProcessedData/"
-
-
-def get_unique_names_from_file(filename, column_number):
-    """
-        Extract set of unique names from file
-    Args:
-        filename: path to processed file
-        column_number: unique names are expected in csv file on column_number
-
-    Returns:
-        set of unique names
-    """
-    # create set of unique names
-    name_set = set()
-
-    with open(filename, "r") as file:
-        # go through every line of line
-        for x in file:
-            # split by csv splitter ;
-            array = x.split(";")
-            # add string from chosen column to set
-            name_set.add(array[column_number])
-
-    return name_set
-
-
-def export_data_to_csv(filename, data_dict):
-    """
-        Takes data_dict and export it into a csv file
-    Args:
-        filename: name of exported file
-        data_dict: dictionary containing data from DatasetProcessor
-    """
-    with open(PROCESSED_DATA_PATH + filename[12:], "w+") as file:
-
-        for date in data_dict:
-            for data in data_dict[date]:
-                file.write(data_dict[date][data].to_csv() + '\n')
\ No newline at end of file
diff --git a/python-module/Utilities/ConfigureFunctions.py b/python-module/Utilities/ConfigureFunctions.py
deleted file mode 100644
index 1864337..0000000
--- a/python-module/Utilities/ConfigureFunctions.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import yaml
-
-# Path to dataset configuration files
-CONFIG_FILES_PATH = "DatasetConfigs/"
-# Config file type
-CONFIG_FILE_TYPE = ".yaml"
-
-
-def load_configuration(dataset_name):
-    """
-    Loads yaml configuration file into memory
-
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-
-    Returns:
-        yaml configuration file as dictionary
-    """
-    with open(CONFIG_FILES_PATH + dataset_name + CONFIG_FILE_TYPE, "r") as f:
-        data = yaml.load(f, Loader=yaml.FullLoader)
-
-    devices_dic = dict()
-
-    if data["devices"] is not None:
-        for item in data["devices"]:
-            devices_dic.update(item)
-
-    data["devices"] = devices_dic
-
-    return data
-
-
-def update_configuration(dataset_name, new_devices):
-    """
-    Open dataset and appends new_devices to the end
-
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-        new_devices: list or set of new devices for dataset
-    """
-    with open(CONFIG_FILES_PATH + dataset_name + CONFIG_FILE_TYPE, "a") as file:
-        for device in new_devices:
-            file.write("  - "+device+":\n")
-            file.write("      x: UNKNOWN!\n")
-            file.write("      y: UNKNOWN!\n")
-            file.write("\n")
diff --git a/python-module/Utilities/Crawler/BasicCrawlerFunctions.py b/python-module/Utilities/Crawler/BasicCrawlerFunctions.py
deleted file mode 100644
index c94a1b4..0000000
--- a/python-module/Utilities/Crawler/BasicCrawlerFunctions.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import requests
-import re
-from Utilities import FolderProcessor
-from bs4 import BeautifulSoup
-
-# Path to crawler logs
-CRAWLER_LOGS_PATH = "CrawlerLogs/"
-# Path to crawled data
-CRAWLED_DATA_PATH = "CrawledData/"
-
-
-def get_all_links(url):
-    """
-    Sends http request to url, downloads all data,
-    extract links
-
-    Args:
-        url: url of website we want to search
-
-    Returns:
-        list of all links
-    """
-    # create response object
-    r = requests.get(url)
-
-    # create beautiful-soup object
-    soup = BeautifulSoup(r.content, 'html5lib')
-    links = []
-
-    for link in soup.findAll('a'):
-        links.append(link.get('href'))
-
-    return links
-
-
-def filter_links(links, regex):
-    """
-    Filters list of links using regex
-
-    Args:
-        links: list of links
-        regex: regex used for filtering
-
-    Returns:
-        filtered list of links
-    """
-    filtered_links = []
-
-    for link in links:
-        if re.search(regex, link):
-            filtered_links.append(link)
-
-    return filtered_links
-
-
-def create_absolute_links(links, archive):
-    """
-        Appends archive path to every link in links
-    Args:
-        links: list of relative links
-        archive: archive url
-
-    Returns:
-        list of absolute links
-    """
-    absolute_links = []
-
-    for link in links:
-        absolute_links.append(archive + link)
-
-    return absolute_links
-
-
-def remove_downloaded_links(links, dataset_name):
-    """
-    Loads already downloaded links from CRAWLER_LOGS_PATH ignore.txt
-    Args:
-        links: list of links
-        dataset_name: name of dataset that has existing configuration file
-
-    Returns:
-        List of links without already downloaded links
-    """
-    downloaded_links = FolderProcessor.load_ignore_set(CRAWLER_LOGS_PATH + dataset_name + "/")
-    final_links = set(links) - downloaded_links
-
-    return final_links
-
-
-def download_file_from_url(url, dataset_name):
-    """
-    Downloads file on provided url and saves it to path
-    Args:
-        url: url file we want to download
-        dataset_name: name of dataset that has existing configuration file
-    """
-    r = requests.get(url, stream=True)
-
-    # splits url and extract last part that contains filename
-    url_parts = url.split("/")
-    file_name = url_parts[len(url_parts)-1]
-
-    log_path = CRAWLER_LOGS_PATH + dataset_name + '/'
-    data_path = CRAWLED_DATA_PATH + dataset_name + '/'
-
-    # download file chunk by chunk so we can download large files
-    with open(data_path + file_name, "wb") as file:
-        for chunk in r.iter_content(chunk_size=1024):
-
-            # writing one chunk at a time to file
-            if chunk:
-                file.write(chunk)
-
-    # after successful download update list of already downloaded files
-    FolderProcessor.update_ignore_set(CRAWLER_LOGS_PATH + dataset_name + "/", url)
diff --git a/python-module/Utilities/Database/DatabaseDataLine.py b/python-module/Utilities/Database/DatabaseDataLine.py
deleted file mode 100644
index 47e53d8..0000000
--- a/python-module/Utilities/Database/DatabaseDataLine.py
+++ /dev/null
@@ -1,14 +0,0 @@
-class DatabaseDataLine:
-    """
-    Class that specifies the look of data line in database
-    """
-    def __init__(self, name, longitude, latitude, date, occurrence):
-        self.name = name
-        self.latitude = latitude
-        self.longitude = longitude
-        self.date = date
-        self.occurrence = occurrence
-
-    def to_dictionary(self):
-        return {"place": self.name, "x": self.longitude, "y": self.latitude, "number": self.occurrence,
-                "date": self.date}
diff --git a/python-module/Utilities/Database/DatabaseLoader.py b/python-module/Utilities/Database/DatabaseLoader.py
deleted file mode 100644
index cea5dec..0000000
--- a/python-module/Utilities/Database/DatabaseLoader.py
+++ /dev/null
@@ -1,106 +0,0 @@
-from Utilities.Database import DatabaseDataLine
-import pymongo
-
-# specify mongodb connection
-MONGODB_CONNECTION = "mongodb://localhost:27017/"
-# mongodb account name
-MONGODB_ACC_NAME = "root"
-# mongodb account password
-MONGODB_ACC_PASSWORD = "root"
-# mongodb data database
-MONGODB_DATA_DATABASE = "DATA"
-# mongodb collection with aviable datasets
-MONGODB_DATASET_COLLECTION = "DATASETS"
-
-# Path to processed data
-PROCESSED_DATA_PATH = "ProcessedData/"
-
-
-def create_database_connection():
-    """
-    Creates connection to mongoDB
-    
-    Returns:
-        Connection to mongoDB
-    """
-    client = pymongo.MongoClient(MONGODB_CONNECTION)
-
-    # Authenticating
-    client.admin.authenticate(MONGODB_ACC_NAME, MONGODB_ACC_PASSWORD)
-
-    database = client[MONGODB_DATA_DATABASE]
-
-    return database
-
-
-def get_data_from_file(filename, config):
-    """
-        Opens processed file, reads it line by line
-        name, ocurrence, date
-        searches name in config and adds device map coordinates
-        than creates a dictionary with date without hours as key
-        and list of data lines as value.
-    Args:
-        filename: name of processed file
-        config: loaded configuration file of dataset
-
-    Returns:
-        dictionary with date without hours as key
-        and list of Datalines as value
-    """
-    dataset_name = config["dataset-name"]
-    dataset_path = PROCESSED_DATA_PATH + dataset_name + '/'
-
-    f = open(dataset_path + filename, "r")
-
-    devices = config["devices"]
-    date_dict = dict()
-
-    for line in f:
-        line = line[:-1]
-
-        csv_column = line.split(";")
-
-        name = csv_column[0]
-        occurrence = csv_column[1]
-        date = csv_column[2]
-
-        database_data_line = DatabaseDataLine.DatabaseDataLine(name, devices[name]["x"]
-                                                               , devices[name]["y"], date, occurrence)
-
-        # if you want to change table split by hours or months change this
-        date_without_hours = date[:-2]
-        if date_without_hours not in date_dict:
-            date_dict[date_without_hours] = list()
-
-        date_dict[date_without_hours].append(database_data_line.to_dictionary())
-
-    return date_dict
-
-
-def load_data_to_database(dataset_name, data_dic):
-    """
-    Takes data_dic created in method get_data_from_file
-    and loads into into database where collection name is dataset_name + data_dic key
-    and data lines are line in collection
-
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-        data_dic: dictionary of data lines created in get_data_from_file
-    """
-    database = create_database_connection()
-
-    # collection where are specified aviable datasets
-    collection_datasets = database[MONGODB_DATASET_COLLECTION]
-
-    # check if newly added data already have a dataset specified in collection
-    dataset_present = collection_datasets.find_one({}, {'name': dataset_name})
-
-    if dataset_present is None:
-        collection_datasets.insert_one({'name': dataset_name})
-
-    for date in data_dic:
-        dataset_collections = database[dataset_name]
-        dataset_collections.insert_one({'name': dataset_name+date})
-        date_dataset = database[dataset_name + date]
-        date_dataset.insert_many(data_dic[date])
diff --git a/python-module/Utilities/DateFormating.py b/python-module/Utilities/DateFormating.py
deleted file mode 100644
index d7b8d9a..0000000
--- a/python-module/Utilities/DateFormating.py
+++ /dev/null
@@ -1,54 +0,0 @@
-def date_formatter(string_date):
-    """
-
-    Args:
-        string_date: string containing date in format 22.08.2018 12:27:00
-
-    Returns:
-        string of date in format 0804201814 ddmmYYYY
-    """
-    if string_date[11].isspace():
-        pos = 0
-        srr = ""
-        for i in string_date:
-
-            if pos == 10:
-                srr = srr + '0'
-            else:
-                srr = srr + i
-
-            pos = pos + 1
-
-        string_date = srr
-
-    return_date = string_date[:2] + string_date[3:5] + string_date[6:10]
-
-    return return_date
-
-
-def date_time_formatter(string_date):
-    """
-    Converts one type of date format "dd.mm.yyyy hh.mm.ss" to date format ddmmYYYYhh
-    Args:
-        string_date: string containing date in format 22.08.2018 12:27:00
-
-    Returns:
-        string of date in format 0804201814 ddmmYYYYhh
-    """
-    if string_date[11].isspace():
-        pos = 0
-        srr = ""
-        for i in string_date:
-
-            if pos == 10:
-                srr = srr + '0'
-            else:
-                srr = srr + i
-
-            pos = pos + 1
-
-        string_date = srr
-
-    return_date = string_date[:2] + string_date[3:5] + string_date[6:10] + string_date[11:13]
-
-    return return_date
diff --git a/python-module/Utilities/FolderProcessor.py b/python-module/Utilities/FolderProcessor.py
deleted file mode 100644
index 5a23171..0000000
--- a/python-module/Utilities/FolderProcessor.py
+++ /dev/null
@@ -1,124 +0,0 @@
-import os
-import zipfile
-from Utilities.CSV import CSVutils
-
-
-def list_of_all_files(path):
-    """
-    Get all files from directory and all files written in ignore.txt
-    and return the difference
-    Args:
-        path: path to Directory
-
-    Returns:
-        list with names of all files in directory
-    """
-    files_in_dir = os.listdir(path)
-
-    ignore_set = load_ignore_set(path)
-
-    return set(files_in_dir).difference(ignore_set)
-
-
-def load_ignore_set(path):
-    """
-    Reads ignore.txt line by line and add it to a set
-    Args:
-        path: Path to directory containing ignore.txt file
-
-    Returns:
-        list of names contained in ignore.txt file
-    """
-    ignore_set = set()
-
-    with open(path + "ignore.txt", "r") as file:
-
-        for line in file:
-            ignore_set.add(line[:-1])
-
-    return ignore_set
-
-
-def update_ignore_set(path, file_name):
-    """
-    Adds file_name to the ignore file
-    Args:
-        path: Path to directory containing ignore.txt file
-        file_name: name of file you want to add to ignore file
-    """
-    with open(path + "ignore.txt", "a") as file:
-        file.write(file_name + '\n')
-
-
-def get_devices_set(path):
-    """
-     Goes trough every not loaded file(not contained in ProcessedData/ignore.txt)
-     Extracts names from not loaded file which should be in first column
-     Creates set of unique devices_names
-
-    Args:
-        path: Path to Processed directory containing ignore.txt file
-
-    Returns:
-        set of unique names contained in not loaded files
-    """
-    files_in_dir = list_of_all_files(path)
-
-    unique_names = set()
-
-    for file_path in files_in_dir:
-        unique_names.update(CSVutils.get_unique_names_from_file(path+file_path, 0))
-
-    return unique_names
-
-
-def get_unknown_devices_set(config, devices):
-    """
-    Compares config and devices a return difference
-
-    Args:
-        config:  loaded configuration file of dataset
-        devices: set of unique devices contained in dataset
-
-    Returns:
-
-    """
-    devices_set = set(config["devices"].keys())
-    unknown_devices_set = devices.difference(devices_set)
-
-    return unknown_devices_set
-
-
-def unzip_all_csv_zip_files_in_folder(path):
-    """
-    Load all files from directory and unzip those which end by .zip
-    After unziping deletes the zip file
-    Args:
-        path: Path to CrawledData directory containing ignore.txt file
-    """
-    files_in_dir = os.listdir(path)
-    zips = []
-
-    for file in files_in_dir:
-        if file.endswith(".zip"):
-            zips.append(path + file)
-
-    for zip_file in zips:
-
-        with zipfile.ZipFile(zip_file, "r") as unziped_file:
-            unziped_file.extractall(path)
-
-        os.remove(zip_file)
-
-
-def clean_folder(path):
-    """
-    Deletes all files in folder
-
-    Args:
-        path: path to folder
-    """
-    files = os.listdir(path)
-
-    for file in files:
-        os.remove(path+file)
diff --git a/python-module/main.py b/python-module/main.py
deleted file mode 100644
index f2b5629..0000000
--- a/python-module/main.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import Pipeline
-import os
-
-# Path to configuration files
-CONFIG_FILES_PATH = "DatasetConfigs/"
-
-
-def run_pipeline_for_all_datasets():
-    """
-    Runs whole DataScript pipeline for every dataset that has existing configuration file
-    """
-    files_in_dir = os.listdir(CONFIG_FILES_PATH)
-
-    for file in files_in_dir:
-        name = file.split('.')
-        Pipeline.run_full_pipeline(name[0])
-
-
-def run_pipeline_for_one_dataset(dataset_name):
-    """
-    Runs whole DataScript pipeline for only one dataset
-
-    Args:
-        dataset_name: name of dataset that has existing configuration file
-    """
-    Pipeline.run_full_pipeline(dataset_name)
-
-
-run_pipeline_for_all_datasets()
diff --git a/python-module/requirements.txt b/python-module/requirements.txt
deleted file mode 100644
index ceac05a..0000000
--- a/python-module/requirements.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-beautifulsoup4==4.9.0
-certifi==2020.4.5.1
-chardet==3.0.4
-html5lib==1.0.1
-idna==2.9
-pymongo==3.10.1
-PyYAML==5.3.1
-requests==2.23.0
-six==1.14.0
-soupsieve==2.0
-urllib3==1.25.9
-webencodings==0.5.1
