From e289ac7f25c81d9184b83e342918dccf1bf9d556 Mon Sep 17 00:00:00 2001 From: CyrilM <mammar@lal.in2p3.fr> Date: Mon, 16 Jul 2018 16:43:50 +0200 Subject: [PATCH] Add page for add labels and alias. --- app/__pycache__/labelsTower.cpython-35.pyc | Bin 0 -> 1338 bytes app/__pycache__/sql_request.cpython-35.pyc | Bin 0 -> 479 bytes app/__pycache__/tuto.cpython-35.pyc | Bin 0 -> 332 bytes app/__pycache__/update_labels.cpython-35.pyc | Bin 0 -> 3718 bytes app/bdd_for_labels.db | Bin 0 -> 12288 bytes app/createBdd.sql | 37 +++++ app/labels | 40 +++++ app/labelsTower.py | 41 +++++ app/sql_request.py | 16 ++ app/templates/manage_labels.html | 22 +++ app/templates/print_labels.html | 101 ++++++++++++ app/update_labels.py | 152 +++++++++++++++++++ 12 files changed, 409 insertions(+) create mode 100644 app/__pycache__/labelsTower.cpython-35.pyc create mode 100644 app/__pycache__/sql_request.cpython-35.pyc create mode 100644 app/__pycache__/tuto.cpython-35.pyc create mode 100644 app/__pycache__/update_labels.cpython-35.pyc create mode 100644 app/bdd_for_labels.db create mode 100644 app/createBdd.sql create mode 100644 app/labels create mode 100644 app/labelsTower.py create mode 100644 app/sql_request.py create mode 100644 app/templates/manage_labels.html create mode 100644 app/templates/print_labels.html create mode 100644 app/update_labels.py diff --git a/app/__pycache__/labelsTower.cpython-35.pyc b/app/__pycache__/labelsTower.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb39b7f6674656d0723fc14fd520a9deed132c2b GIT binary patch literal 1338 zcmZuw&2G~`5T5l<eww7efIx7FxF8p)K5#*(s*tJz2M7q~WP~i!-KJ^Rak{&qY6Pe9 z3cLe62RBZL<6b%O3Y?hP#33LYdow%Vcs=vYH`h9ym2V%PzWVM1{D7q^MEfB=`YSFR zZw3+|o!K5p27U6P<;^S~qz^>^X#hnCX$VCP(i#+XNbA5v0HOhx4ALfuCY-DQ4`|Cn z;5GOF4r*0U-9ZiD%?fH)5Wd&~-Ui-*frnv?uL57I!a7yhx;tS5_+|xR7=t9*`ib>G zFJhK$M}Z9=$y}e>x)Ns-p^aTrV#I~Yj3~x3H^SCWbU7LxUHoG4A-!2$42^w!bbyOH z+3Tgjld=$>K{e3#XZf`qAEQ5(xhw`M)<Yw7Y$m3R^YIwHZ-mtS@?5B$@r7+23n|O& zyi}6c>3k0t@YD*f)9dj-n2hHp*YU14YB(A^80Cf7JEU~zqJM1VEVW%U-nr~fJy5s6 z02rj4XrntJ%m>2mSD0%GVc3`?s`YGbmf!SBa`5zEzu(>NK6?55S$F2OVJ?Tco^CC` zBUKh%=d|I0Ql*MKRl_vwx<+C%eI~Ox)!2c6a{t4VYEocxQDO_Xn(79x&DI$`Y8`je z)wsw<`9NgzEb4_Y$0gU+e|*rl!Hefff6*%<gc5MQdW{B>aDpT-SNB~o-kgy42>HYZ z4~R5WR$>AdjS>yv29m-S0d&aBjq1fdT{17haY&*@Pi<0)|D|iX`B&aM$EJ{qs!Uss zvTQgSPfS|Zlfy%y^<)d71nn=MbeD^+ydy?$%b|#BibQ8?v$EAHZWPU{?M%ifjs-8l zQK<^#*;hjUOLOP1ROm}{s@I5UZ-c4p=$m%pF{;eWnO?Ap5Rfn(tJESS1SuuqL|$*Y zvHX%NGh!~or7YZxxQ@4%qi^A1mF91t9jzfBXA)=Tp1O+rw6&xm8y?a4DjxyI$?PLe zaE&Y@d1aaPam;L}%83zfjGTyEd5XU9-<%q|Mad^p?2&#nsjkgd@OPWFy_><!#+~MG D68a^0 literal 0 HcmV?d00001 diff --git a/app/__pycache__/sql_request.cpython-35.pyc b/app/__pycache__/sql_request.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4849a9cd134dac57625c6c75b7840a3f4efb5e5d GIT binary patch literal 479 zcmYjOu};G<5Is9dQ&lPL0umE*7@C0<AtYAl!d8T$#CB<m6SuY_0ZOOx2Ydy;<dvxt zI}_)qL#^D?^ShV3vwb!k4t~GxpUw%u4;-xk`7MUIK;ZZhkN`6z6nFqUgiiu9;`PTg z+M@}kdn^KsdX6i?@ca(LJR?|uRrkY=z?MQwVMSpFunnLMV1)>PDdH2MPmmVv6kaLl zht3jp_7Li%+x8CIHpCf%>BniYUS}oe`CRE-7NwA8!b|OkNMje9ja*uB<zlAlS}^N+ ztkFhk7mGK+8Y@sxRkgIPKNprQ3Mmgv)gp~tti`4g#_B#6bfK@}2y=lJ<{R`0ihq~c zLRBJ@g{)q5X0V;fY-3gCC&T{vp~PhU?#4#cJU<fsm76gFkP%79kPHw<G$GoHDb?Q4 Z@vhksj4<K)*OlUp6gU1Aj6ZZj{{fzEZ5RLm literal 0 HcmV?d00001 diff --git a/app/__pycache__/tuto.cpython-35.pyc b/app/__pycache__/tuto.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f25c4371850f1e9c1259f9a15df44cce554f8d9 GIT binary patch literal 332 zcmYLDyGjHx6g`=l45AKLSu0ipVz5?J5X5SmEd(vXV4|xgn<1G|wAF9$AN-}XTlouH zc@xpS<Q~p_<lM8}H0z&-r#BYBg7QB~VrP`$h(OU}Fo0#aW?-5@7kH<lgf8(|LFH1F zP!&FqM;wY{+ScDBfR;smVY=|NWa2h8{(=!XrwkPV9htVp<gK~X#<=~RE9Z^c{en-! z6)g9}%vmi=XY9Qf;bG80==pPIVi*T^(7(owSrU;iNhAFa1px|Q6HeMX^1I~6r*2%6 ma^6`jWh}eCkKDU)(0Oxp^_TIyer%l@jXp{4v-2&sS^NN|Z$onc literal 0 HcmV?d00001 diff --git a/app/__pycache__/update_labels.cpython-35.pyc b/app/__pycache__/update_labels.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdda45a3f7e97501541df7db0cfe056dec2af501 GIT binary patch literal 3718 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 literal 0 HcmV?d00001 diff --git a/app/bdd_for_labels.db b/app/bdd_for_labels.db new file mode 100644 index 0000000000000000000000000000000000000000..dbaf72ad3b77c331b00748c706a0e4b812f3f345 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/app/createBdd.sql b/app/createBdd.sql new file mode 100644 index 0000000..7b657e6 --- /dev/null +++ b/app/createBdd.sql @@ -0,0 +1,37 @@ +/*CREATE DATABASE labels_tower CHARACTER SET 'utf8'; +USE labels_tower;*/ + +CREATE TABLE IF NOT EXISTS tutos ( + link VARCHAR(200) NOT NULL, + author_mail UNSIGNED MEDIUM INT, + date DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS labels ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(100) NOT NULL, + father_id UNISGNED MEDIUM INT DEFAULT NULL +); + +CREATE TABLE IF NOT EXISTS tutos_labels ( + link VARCHAR(200) NOT NULL, + id_label UNSIGNED MEDIUM INT +); + +CREATE TABLE IF NOT EXISTS alias ( + id_label UNSIGNED MEDIUM INT, + name VARCHAR(100) NOT NULL +); + +CREATE TABLE IF NOT EXISTS votes ( + link VARCHAR(200) NOT NULL, + mark TINYINT, + author_mail VARCHAR(100) +); + +CREATE TABLE IF NOT EXISTS comments ( + link VARCHAR(200) NOT NULL, + message VARCHAR(500), + author_mail VARCHAR(100), + date DATETIME DEFAULT CURRENT_TIMESTAMP +); diff --git a/app/labels b/app/labels new file mode 100644 index 0000000..e09f93d --- /dev/null +++ b/app/labels @@ -0,0 +1,40 @@ +Calcul + Vectorisation + Profilage + Gpu, Gpgpu, accélérateur(s), co-processeur(s) + Data Science, Big Data, Science des données + Calcul Intensif, Hpc + Machine Learning, Apprentissage, Deep Learning +Controle-Commande-Acquisition +Enseignement + Creation Plongeons + Notebooks +Génie Logiciel + Construction, Build, Make + Documentation + Test + Gestion de versions, Version, Versions + Git + test1 + test2 + test3 + Gitlab + Integration Continue + Deploiement + Gestion de paquets +Interfaces Homme-Machine, Ihm, Gui +Langages + Cpp, C++, Cplusplus + Go + Python + Ada + Scala +Programmation + Orientée Objet, Orientée Objets, OO, objet, objets + Fonctionnelle +Virtualisation + Docker + Singularity + Jupyter +Administration + Orchestration diff --git a/app/labelsTower.py b/app/labelsTower.py new file mode 100644 index 0000000..d53c796 --- /dev/null +++ b/app/labelsTower.py @@ -0,0 +1,41 @@ +import sqlite3 +from update_labels import * +from sql_request import * +from flask import Flask, request, render_template, jsonify +app = Flask(__name__) + +@app.route('/') +def home(): + return 'Home' + +@app.route('/get_datas/<string:name>') +def get_datas(name): + '''Return labels table or alias table for Ajax. + ''' + if (name == 'labels'): + return (jsonify(send_sql_request('SELECT * FROM labels'))) + elif (name == 'alias'): + return (jsonify(send_sql_request('SELECT * from alias'))) + return 'Error' + +@app.route('/manage_labels', methods=['GET', 'POST']) +def manage_labels(): + '''For manage all labels and alias register in database. + (Add new labels and alias actually) + ''' + if request.method == 'GET': + res = send_sql_request('SELECT * FROM labels') + return render_template('manage_labels.html', labels=res) + else: + update_labels(request.form['alias_input']) + return render_template('manage_labels.html', labels=request.form['alias_input'], success="Succès de l'envoie") + +@app.route('/print_labels') +def print_labels(): + '''Print labels like a tree. ex : + L> Virtualisation + L> Docker + L>Singularity + L> Others + ''' + return render_template('print_labels.html') diff --git a/app/sql_request.py b/app/sql_request.py new file mode 100644 index 0000000..94b6d47 --- /dev/null +++ b/app/sql_request.py @@ -0,0 +1,16 @@ +import sqlite3 + +def send_sql_request(request, fetchall = 1): + '''Execute sql request on bdd_for_labels database. + If second parameter is 0 return one line of the response + else return all lines. + ''' + conn = sqlite3.connect('app/bdd_for_labels.db') + c = conn.cursor() + c.execute(request) + conn.commit() + if (fetchall == 1): + res = c.fetchall() + else: + res = c.fetchone() + return (res) diff --git a/app/templates/manage_labels.html b/app/templates/manage_labels.html new file mode 100644 index 0000000..575a38b --- /dev/null +++ b/app/templates/manage_labels.html @@ -0,0 +1,22 @@ +<html> + <head> + <title>Manage Labels</title> + <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> + </head> + + <body> + <p>{{ success }}</p> + <div id='input_zone'> + <form action="" method="POST"> + <textarea class="text" type="text" name="alias_input" cols="60" rows="40">{{ labels }}</textarea> + <br> + <input type="submit" value="Envoyer"/> + </form> + </div> + </body> + + <script> + + </script> + +</html> diff --git a/app/templates/print_labels.html b/app/templates/print_labels.html new file mode 100644 index 0000000..b477e81 --- /dev/null +++ b/app/templates/print_labels.html @@ -0,0 +1,101 @@ +<html> + <head> + <title>Print labels</title> + <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> + </head> + + <body> + <ul id="tuto"> + <li v-for="(value, index) in fruits" @click="getFruit(index)"> + {{ index }} => {{ value }} + </li> + </ul> + + <!---<div> + <div id="test" v-for="value in labels" @click="clickLabel()"> + {{ value }} + </div> + </div>--> + </body> + + <script> + + function request(address) { + var xhr = new XMLHttpRequest(); + /*xhr.onreadystatechange = function () { + //if (xhr.readyState == 4) + //alert("reponse = " + xhr.responseText); + };*/ + xhr.open("GET", "http://127.0.0.1:5000/"+address, false); + xhr.send(); + return (xhr.responseText); + }; + + //add \t to the child in function + function print_elem(txt, nb_tabs) { + var new_msg = ""; + for (var i = 0; i < nb_tabs; i++) + new_msg += '\t'; + new_msg += txt; + console.log(nb_tabs + new_msg); + } + + //print the tab that represent labels with theirs childs + function print_tab(tab, nb_tabs) { + for (var i = 0; tab[i]; i++) { + if (Array.isArray(tab[i - 1])) + nb_tabs--; + if (Array.isArray(tab[i])) { + nb_tabs++; + print_tab(tab[i], nb_tabs) + } else + print_elem(tab[i], nb_tabs); + } + } + + var tab = ['addition', 'soustraction', 'complexe', ['c1', 'c2', ['lol1', 'lol2'], 'c3'], 'easy', ['un', ['deux', ['trois', ['quatre']]]], 'ok']; + var labels_tab = JSON.parse(request("get_datas/labels")) + var labels_list = [] + + for (var i = 0; labels_tab[i]; i++) { + if (labels_tab[i][2] == null) + labels_list.push(labels_tab[i][0]) + } + + console.log(labels_tab) + console.log('\n================\n', labels_list) + console.log(labels_tab[0][2]) + //crrer l'espece de liste sur la gaucje + //print_tab(tab, 0); + + /*new Vue({ + el: '#test', + data: { + labels: ['a', 'b', 'c'] + }, + methods: { + clickLabel: function() { + alert("clique"); + } + } + });*/ + + new Vue({ + el: '#tuto', + data: { + fruits: [ + 'pomme', + 'cerise', + 'abricot' + ] + }, + methods: { + getFruit: function(index) { + alert('Je suis ' + this.fruits[index]); + } + } + }); + + </script> + +</html> diff --git a/app/update_labels.py b/app/update_labels.py new file mode 100644 index 0000000..708dedd --- /dev/null +++ b/app/update_labels.py @@ -0,0 +1,152 @@ +'''Take user input and send labels and alias in database if they don't exist. +''' + +import sqlite3 +from sql_request import * +conn = sqlite3.connect('app/bdd_for_labels.db', check_same_thread=False) +c = conn.cursor() + +def get_file_content(filename): + '''For tests. Read file that contain user input. + ''' + my_file = open(filename, "r") + content = my_file.read() + content = content.split('\n') + my_file.close() + return (content) + +def put_labels_in_db(content, labels_table): + '''Send all labels contained in content if it doesn't exist + in labels table (in DB). If label line contain alias, just the + first alias is send. executemany() requiere 2D array. It's why + label is put in intermediate array 'inter'. + ''' + labels_name = [] + for line in content: + inter = [] + line = line.replace("\t", '') + line = line.split(',') + inter.append(line[0]) + if (is_in_labels_table(line[0], labels_table) != 1): + labels_name.append(inter) + c.executemany("INSERT INTO labels(name) VALUES(?)", labels_name) + conn.commit() + +def get_labels_table(): + '''Retrieve all the content in 'labels' from DB. + ''' + c.execute('SELECT * FROM labels') + all_table = c.fetchall() + return (all_table) + +def get_tab_alias_name(): + '''Select all alias in DB + ''' + c.execute('SELECT name FROM alias') + all_table = c.fetchall() + return (all_table) + +def is_in_labels_table(name, labels_table): + '''Return 1 if name is in 'labels' table or 0 if not. + ''' + name = name.lower() + for label in labels_table: + inter = label[1] + inter = inter.lower() + if (inter == name): + return (1) + return (0) + +def is_an_alias(name, tab_alias_name): + '''Return 1 if name is in 'alias' table or 0 if not. + ''' + name = name.lower() + for alias in tab_alias_name: + inter = alias[0] + inter = inter.lower() + if (inter == name): + return (1) + return (0) + +def is_alias_or_label(name, labels_table, tab_alias_name): + '''Return 1 if name is a label or and alias. + ''' + if (is_in_labels_table(name, labels_table) == 1): + return (1) + if (is_an_alias(name, tab_alias_name) == 1): + return (1) + return (0) + + +def get_last_element(tab): + '''Retrive the last element from the pile 'tab' because pop() + delete the last element when is it return. + ''' + for case in tab: + result = case + return (case) + +def get_father_id(father_name, labels_table): + '''Return the ID of an label stock in 'labels' table. + This ID will be send in 'father' column of the child. + ''' + for label in labels_table: + if (label[1] == father_name): + return (label[0]) + return (-1) + +def update_alias(content, labels_table, tab_alias_name): + '''Check the user input and add alias in alias tab if it's not + a label or an alias. + ''' + label_alias = [] + for line in content: + line = line.replace("\t", '') + line = line.replace(", ", ',') + line = line.split(',') + label = line[0] + line.remove(line[0]) + for alias in line: + inter = [] + if (is_alias_or_label(alias, labels_table, tab_alias_name) != 1): + inter.append(get_father_id(label, labels_table)) + inter.append(alias) + label_alias.append(inter) + c.executemany("INSERT INTO alias(id_label, name) VALUES(?, ?)", label_alias) + conn.commit() + +def update_father_id_in_db(content, labels_table): + '''Get the user input and with the number of '\t' behind label + dermine if the label is a father or a child. + If it's a child, the id of his father is send in his + 'father_id' column. + ''' + father_pile = ['no_father'] + prece = '' + for line in content: + line_alias = line.split(',') + label = line_alias[0] + if (line.count('\t') > prece.count('\t')): + father_pile.append(prece.replace("\t", '')) + if (line.count('\t') < prece.count('\t')): + nb_tour = prece.count('\t') - line.count('\t') + for i in range(0, nb_tour): + father_pile.pop() + father_name = get_last_element(father_pile) + father_id = get_father_id(father_name, labels_table) + if (father_id != -1): + c.execute('UPDATE labels SET father_id = ? WHERE name = ?', (father_id, label.replace("\t", ''))) + conn.commit() + prece = label + +def update_labels(content): + '''Get the user input and add new lables in 'labels' table of DB. + ''' + #content = get_file_content("labels") + content = content.split('\r\n') + labels_table = get_labels_table() + tab_alias_name = get_tab_alias_name() + put_labels_in_db(content, labels_table) + labels_table = get_labels_table() + update_father_id_in_db(content, labels_table) + update_alias(content, labels_table, tab_alias_name) -- GitLab