Skip to content
Snippets Groups Projects
Commit c32fb9db authored by CHAMONT David's avatar CHAMONT David
Browse files

merge master

parents aff94231 f7cc6659
No related branches found
No related tags found
1 merge request!68Doctest must return an error code in case of failure
...@@ -14,28 +14,24 @@ def get_selected_elements(id_mandatory_labels: int, id_forbiden_labels: str, num ...@@ -14,28 +14,24 @@ def get_selected_elements(id_mandatory_labels: int, id_forbiden_labels: str, num
EXEMPLE EXEMPLE
------- -------
>>> print(get_selected_elements("","",0)) # si aucun labels n'est interdit ou obligatoire >>> print(get_selected_elements("","",0)) # si aucun labels n'est interdit ou obligatoire
[{'id': 4, 'name': 'peugeot, 2000'}, {'id': 3, 'name': 'renault, 2000'}, {'id': 2, 'name': 'renault, bleu, 2000'}, {'id': 1, 'name': 'renault, rouge, 2000'}] [{'id': 4, 'element_name': 'peugeot, 2000'}, {'id': 3, 'element_name': 'renault, 2000'}, {'id': 2, 'element_name': 'renault, bleu, 2000'}, {'id': 1, 'element_name': 'renault, rouge, 2000'}]
>>> print(get_selected_elements("1,2","5,9",2)) # si la voiture doit-être bleu >>> print(get_selected_elements("1,2","5,9",2)) # si la voiture doit-être bleu
[{'id': 4, 'name': 'peugeot, 2000'}] [{'id': 4, 'element_name': 'peugeot, 2000'}]
>>> print(get_selected_elements("5","",1)) >>> print(get_selected_elements("5","",1))
[{'id': 3, 'name': 'renault, 2000'}, {'id': 2, 'name': 'renault, bleu, 2000'}, {'id': 1, 'name': 'renault, rouge, 2000'}] [{'id': 3, 'element_name': 'renault, 2000'}, {'id': 2, 'element_name': 'renault, bleu, 2000'}, {'id': 1, 'element_name': 'renault, rouge, 2000'}]
>>> print(get_selected_elements("","5",0)) >>> print(get_selected_elements("","5",0))
[{'id': 4, 'name': 'peugeot, 2020'}] [{'id': 4, 'element_name': 'peugeot, 2020'}]
""" """
#query slightly vary if number_of_mandatory_labels > 0 or not #query slightly vary if number_of_mandatory_labels > 0 or not
if(number_of_mandatory_labels): if(number_of_mandatory_labels):
query = ''' query = '''
SELECT SELECT
ELEMENT.id ELEMENT.*
, element_name
FROM FROM
ELEMENT ELEMENT
INNER JOIN INNER JOIN
ELEMENT_LABEL ELEMENT_LABEL
ON ELEMENT.id=ELEMENT_LABEL.id_element ON ELEMENT.id=ELEMENT_LABEL.id_element
INNER JOIN
LABEL
ON ELEMENT_LABEL.id_label=LABEL.id
WHERE WHERE
id_label IN ({}) id_label IN ({})
AND AND
...@@ -46,10 +42,7 @@ def get_selected_elements(id_mandatory_labels: int, id_forbiden_labels: str, num ...@@ -46,10 +42,7 @@ def get_selected_elements(id_mandatory_labels: int, id_forbiden_labels: str, num
ELEMENT ELEMENT
INNER JOIN INNER JOIN
ELEMENT_LABEL ELEMENT_LABEL
ON ELEMENT.id=ELEMENT_LABEL.id_element ON ELEMENT.id=ELEMENT_LABEL.id_element
INNER JOIN
LABEL
ON ELEMENT_LABEL.id_label=LABEL.id
WHERE WHERE
id_label IN ({})) id_label IN ({}))
GROUP BY id_element GROUP BY id_element
...@@ -59,30 +52,24 @@ def get_selected_elements(id_mandatory_labels: int, id_forbiden_labels: str, num ...@@ -59,30 +52,24 @@ def get_selected_elements(id_mandatory_labels: int, id_forbiden_labels: str, num
else: else:
query = ''' query = '''
SELECT SELECT
DISTINCT ELEMENT.id ELEMENT.*
, element_name
FROM FROM
ELEMENT ELEMENT
INNER JOIN INNER JOIN
ELEMENT_LABEL ELEMENT_LABEL
ON ELEMENT.id = ELEMENT_LABEL.id_element ON ELEMENT.id = ELEMENT_LABEL.id_element
INNER JOIN
label
ON ELEMENT_LABEL.id_label=label.id
WHERE WHERE
element_name NOT IN ( id_element NOT IN (
SELECT SELECT
element_name id_element
FROM FROM
ELEMENT ELEMENT
INNER JOIN INNER JOIN
ELEMENT_LABEL ELEMENT_LABEL
ON ELEMENT.id = ELEMENT_LABEL.id_element ON ELEMENT.id = ELEMENT_LABEL.id_element
INNER JOIN WHERE id_label IN ({}) )
label GROUP BY ELEMENT.id
ON ELEMENT_LABEL.id_label = label.id ORDER BY element_name ASC
WHERE id_label IN ({}) )
ORDER BY element_name ASC
'''.format(id_forbiden_labels) '''.format(id_forbiden_labels)
selected_elements = send_query_to_db(query) selected_elements = send_query_to_db(query)
...@@ -97,7 +84,7 @@ def get_discriminating_labels(selected_elements: List[Dict[int, str]]) -> List[D ...@@ -97,7 +84,7 @@ def get_discriminating_labels(selected_elements: List[Dict[int, str]]) -> List[D
EXEMPLE EXEMPLE
------- -------
>>> get_discriminating_labels([{"id":2,"name":"renault, bleu, 2000"}, {"id":1,"name":"renault, rouge, 2000"}]) >>> get_discriminating_labels([{"id":2,"name":"renault, bleu, 2000"}, {"id":1,"name":"renault, rouge, 2000"}])
[{'id': 8, 'name': 'rouge'}, {'id': 9, 'name': 'bleu'}] [{'id': 8, 'label_name': 'rouge'}, {'id': 9, 'label_name': 'bleu'}]
>>> get_discriminating_labels([]) >>> get_discriminating_labels([])
[] []
""" """
...@@ -135,7 +122,7 @@ def get_high_discriminating_labels(discriminating_labels: List[Dict[int, str]]) ...@@ -135,7 +122,7 @@ def get_high_discriminating_labels(discriminating_labels: List[Dict[int, str]])
EXEMPLE EXEMPLE
------- -------
>>> get_high_discriminating_labels([{"id":7, "name":"couleur"}, {"id":8, "name":"rouge"}, {"id":9, "name":"bleu"}]) >>> get_high_discriminating_labels([{"id":7, "name":"couleur"}, {"id":8, "name":"rouge"}, {"id":9, "name":"bleu"}])
[{'id': 7, 'name': 'couleur'}] [{'id': 7, 'label_name': 'couleur'}]
""" """
id_discriminating_labels = get_ids(discriminating_labels) id_discriminating_labels = get_ids(discriminating_labels)
......
...@@ -11,5 +11,8 @@ def send_query_to_db(query: str) -> List[Dict[int, str]] : ...@@ -11,5 +11,8 @@ def send_query_to_db(query: str) -> List[Dict[int, str]] :
stmt = bp.db.text(query) stmt = bp.db.text(query)
response = bp.db.session.execute(stmt) response = bp.db.session.execute(stmt)
for row in response: for row in response:
result.append({"id": row[0], "name": row[1]}) record = {}
for index in range(len(row)):
record.update({str(row.keys()[index]):row[index]})
result.append(record)
return result return result
\ No newline at end of file
...@@ -14,8 +14,7 @@ class CustomFlask(Flask): ...@@ -14,8 +14,7 @@ class CustomFlask(Flask):
def create_app(): def create_app():
text_component = {"project_name": "LabelsTower", text_component = {"project_name": "LabelsTower",
"Element_name": "Element(s)",
"Label": "Label(s)" "Label": "Label(s)"
} }
app = CustomFlask(__name__) app = CustomFlask(__name__)
......
...@@ -30,7 +30,7 @@ function labels_tab_to_str(labels) { ...@@ -30,7 +30,7 @@ function labels_tab_to_str(labels) {
var result = ""; var result = "";
var inter = [] var inter = []
for (var i = 0; labels[i]; i++) for (var i = 0; labels[i]; i++)
inter.push([labels[i]['id'], labels[i]['name'], labels[i]['father_id']]); inter.push([labels[i]['id'], labels[i]['label_name'], labels[i]['father_id']]);
result = inter.join('|'); result = inter.join('|');
return (result); return (result);
} }
...@@ -46,9 +46,9 @@ function str_to_labels_tab(str) { ...@@ -46,9 +46,9 @@ function str_to_labels_tab(str) {
for (var i = 0; split[i]; i++) { for (var i = 0; split[i]; i++) {
var inter = split[i].split(',') var inter = split[i].split(',')
if (inter.length == 2) if (inter.length == 2)
result.push({'id': inter[0], 'name': inter[1]}); result.push({'id': inter[0], 'label_name': inter[1]});
else else
result.push({'id': inter[0], 'name': inter[1], 'father_id': inter[2]}); result.push({'id': inter[0], 'label_name': inter[1], 'father_id': inter[2]});
} }
return (result); return (result);
} }
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<!-- HIERARCHY.MANDATORY_LABELS --> <!-- HIERARCHY.MANDATORY_LABELS -->
<span v-for='(label, index) in mandatory_labels'> <span v-for='(label, index) in mandatory_labels'>
<img title="Deselect the elements bearing this label" class="hierarchy-icone_left" @click="rm_mandatory_label(index)" src="static/img/plus-encadre.png" onmouseover="this.src='static/img/plus-encadre-vert.png'" onmouseout="this.src='static/img/plus-encadre.png'"> <img title="Deselect the elements bearing this label" class="hierarchy-icone_left" @click="rm_mandatory_label(index)" src="static/img/plus-encadre.png" onmouseover="this.src='static/img/plus-encadre-vert.png'" onmouseout="this.src='static/img/plus-encadre.png'">
<span :title="label['name']"><b>{{ redim_labels(label['name']) }}</b></span> <span :title="label['label_name']"><b>{{ redim_labels(label['label_name']) }}</b></span>
<img class="hierarchy-icone_right" src="static/img/moins.png" style="visibility: hidden;"><br> <!-- MARQUEUR (elliot)--> <img class="hierarchy-icone_right" src="static/img/moins.png" style="visibility: hidden;"><br> <!-- MARQUEUR (elliot)-->
</span> </span>
<!-- HIERARCHY.MANDATORY_LABELS --> <!-- HIERARCHY.MANDATORY_LABELS -->
...@@ -53,21 +53,21 @@ ...@@ -53,21 +53,21 @@
<!-- HIERARCHY.FORBIDEN_LABELS --> <!-- HIERARCHY.FORBIDEN_LABELS -->
<span v-if="forbiden_labels.length != 0" v-for='(label, index) in forbiden_labels'> <span v-if="forbiden_labels.length != 0" v-for='(label, index) in forbiden_labels'>
<img class="hierarchy-icone_left" src="static/img/plus.png" style="visibility: hidden;"> <img class="hierarchy-icone_left" src="static/img/plus.png" style="visibility: hidden;">
<span :title="label['name']"><b>{{ redim_labels(label['name']) }}</b></span> <span :title="label['label_name']"><b>{{ redim_labels(label['label_name']) }}</b></span>
<img title="Authorizes elements bearing this label" class="hierarchy-icone_right" @click="rm_forbiden_label(index)" src="static/img/moins-encadre.png" onmouseover="this.src='static/img/moins-encadre-rouge.png'" onmouseout="this.src='static/img/moins-encadre.png'"> <img title="Authorizes elements bearing this label" class="hierarchy-icone_right" @click="rm_forbiden_label(index)" src="static/img/moins-encadre.png" onmouseover="this.src='static/img/moins-encadre-rouge.png'" onmouseout="this.src='static/img/moins-encadre.png'">
<br> <br>
</span> </span>
<!-- HIERARCHY.FORBIDEN_LABELS --> <!-- HIERARCHY.FORBIDEN_LABELS -->
<!-- HIERARCHY.HIGH_DISCRIMATING_LABELS --> <!-- HIERARCHY.HIGH_DISCRIMATING_LABELS -->
<div v-if="loading == 1"> <div v-if="loading == 1">
<div id="hierarchy-separator" v-if="(mandatory_labels.length > 0 || forbiden_labels.length > 0) && high_discriminating_labels.length > 0"> <div id="hierarchy-separator" v-if="(mandatory_labels.length > 0 || forbiden_labels.length > 0) && high_discriminating_labels.length > 0">
<img src="static/img/monSeparateur.png"/> <img src="static/img/monSeparateur.png"/>
</div> </div>
<transition-group name="new_labels"> <transition-group name="new_labels">
<span v-for='(label, index) in high_discriminating_labels' v-bind:key="label['name']"> <span v-for='(label, index) in high_discriminating_labels' v-bind:key="label['label_name']">
<img title="Selects elements with this label" class="hierarchy-icone_left" @click="add_mandatory_label(index, 'new')" src="static/img/plus.png" onmouseover="this.src='static/img/plus-vert.png'" onmouseout="this.src='static/img/plus.png'"> <img title="Selects elements with this label" class="hierarchy-icone_left" @click="add_mandatory_label(index, 'new')" src="static/img/plus.png" onmouseover="this.src='static/img/plus-vert.png'" onmouseout="this.src='static/img/plus.png'">
<span :title="label['name']"><b>{{ redim_labels(label['name']) }}</b></span> <span :title="label['label_name']"><b>{{ redim_labels(label['label_name']) }}</b></span>
<img title="Prohibits elements with this label" class="hierarchy-icone_right" @click="add_forbiden_label(index, 'new')" src="static/img/moins.png" onmouseover="this.src='static/img/moins-rouge.png'" onmouseout="this.src='static/img/moins.png'"> <img title="Prohibits elements with this label" class="hierarchy-icone_right" @click="add_forbiden_label(index, 'new')" src="static/img/moins.png" onmouseover="this.src='static/img/moins-rouge.png'" onmouseout="this.src='static/img/moins.png'">
<br> <br>
</span> </span>
...@@ -77,14 +77,14 @@ ...@@ -77,14 +77,14 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-9" id="result" v-cloak> <div class="col-md-9" id="result" v-cloak>
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading title"> <div class="panel-heading title">
<span id="result-title"> <span id="result-title">
<span >{{ selected_elements.length }} [[ txt['Element_name'] ]]</span> <span >{{ selected_elements.length }}{{ selected_elements.length > 1 ? " Elements":" Element"}} </span>
</span> </span>
</div> </div>
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
<ul v-if="loading == 1" class="list-group" v-bind:style="'max-height: '+((width_window > 991) ? (height_window - 151 - 70) : (450))+'px;'"> <ul v-if="loading == 1" class="list-group" v-bind:style="'max-height: '+((width_window > 991) ? (height_window - 151 - 70) : (450))+'px;'">
<li class="list-group-item" v-for='element in selected_elements' v-bind:key="element['id']"> <li class="list-group-item" v-for='element in selected_elements' v-bind:key="element['id']">
<span> <span>
<b class="single_result" v-bind:title="(redim_element(element['name']).indexOf('...') == -1) ? '' : element['name']">{{ redim_element(element['name']) }}</b> <b class="single_result" v-bind:title="(redim_element(element['element_name']).indexOf('...') == -1) ? '' : element['element_name']">{{ redim_element(element['element_name']) }}</b>
</span> </span>
</li> </li>
</ul> </ul>
...@@ -101,9 +101,8 @@ ...@@ -101,9 +101,8 @@
</div> </div>
</div> </div>
</div>
</div>
</body> </body>
<script src="static/js/search_new_elements.js"></script> <script src="static/js/search_new_elements.js"></script>
...@@ -175,9 +174,7 @@ ...@@ -175,9 +174,7 @@
update_loading(0); update_loading(0);
hierarchy.mandatory_labels.push(hierarchy.high_discriminating_labels[index]); hierarchy.mandatory_labels.push(hierarchy.high_discriminating_labels[index]);
hierarchy.high_discriminating_labels.splice(index, 1); hierarchy.high_discriminating_labels.splice(index, 1);
console.log("av")
update_elements_and_labels(); update_elements_and_labels();
console.log("ap")
save_session(); save_session();
update_loading(1); update_loading(1);
}, },
......
...@@ -7,4 +7,4 @@ cd `dirname ${SCRIPT_NAME}` ...@@ -7,4 +7,4 @@ cd `dirname ${SCRIPT_NAME}`
cd ../.. cd ../..
dist/install.sh dist/install.sh
test/instance/init_voiture_db.sh test/instance/init_voiture_db.sh # mais où se trouve ou qui génère ce script ?
\ No newline at end of file \ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment