From 4aad6894e7eca1071d6876192e3d6d3189134790 Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 10:27:52 -0700 Subject: [PATCH 01/12] show alt id and allow searching by it --- viewer/pages/toppage.py | 35 ++++++++++++++++++++++++++ viewer/templates/components_table.html | 3 +++ 2 files changed, 38 insertions(+) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index b438b6aa5..61942321d 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -9,6 +9,7 @@ import shutil import traceback from datetime import datetime +import arrow import itkdb import itksn from bson.objectid import ObjectId @@ -244,6 +245,14 @@ def show_comps(view_type="module"): "$elemMatch": {"$regex": regex_pattern, "$options": "i"} } }, + { + "properties": { + "$elemMatch": { + "code": "ALTERNATIVE_IDENTIFIER", + "value": {"$regex": regex_pattern, "$options": "i"}, + } + } + }, ] ) else: @@ -252,6 +261,14 @@ def show_comps(view_type="module"): {"serialNumber": {"$in": keywords}}, {"children": {"$elemMatch": {"$in": keywords}}}, {"parents": {"$elemMatch": {"$in": keywords}}}, + { + "properties": { + "$elemMatch": { + "code": "ALTERNATIVE_IDENTIFIER", + "value": {"$in": keywords}, + } + } + }, ] ) @@ -427,6 +444,16 @@ def show_comps(view_type="module"): for r in results: result = r + # Extract alternative ID from properties + altID = next( + ( + prop["value"] + for prop in component.get("properties", []) + if prop["code"] == "ALTERNATIVE_IDENTIFIER" and prop.get("value") + ), + None, + ) + component_data = { "_id": cmp_id, "name": name, @@ -436,6 +463,7 @@ def show_comps(view_type="module"): "proDB": component.get("proDB", False), "component_tag_candidate": tag_candidates, "component_tag": tags, + "altID": altID, } if qcStatus: @@ -476,6 +504,13 @@ def show_comps(view_type="module"): # end for component in components: + # Sort components by date (newest first) + table_docs["components"] = sorted( + table_docs["components"], + key=lambda x: x.get("datetime", arrow.get(0).datetime), + reverse=True, + ) + table_docs.update({"pagingInfo": pagingInfo}) table_docs["title"] = f"{view.upper()} List" diff --git a/viewer/templates/components_table.html b/viewer/templates/components_table.html index c07db106a..2afa228ce 100644 --- a/viewer/templates/components_table.html +++ b/viewer/templates/components_table.html @@ -80,6 +80,9 @@ title="{{ component['typeinfo'] }}" >{{ component['name'] }} + {% if component['altID'] %} +
{{ component['altID'] }} + {% endif %} {% if component['name'].find( '20U' ) != 0 %}
Not ATLAS SN!
{% endif %} -- GitLab From 220336fc440aa4f04b3955b151e82ae6c9e60534 Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 10:35:19 -0700 Subject: [PATCH 02/12] add debugging information --- viewer/pages/toppage.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index 61942321d..bacd70b41 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -454,6 +454,14 @@ def show_comps(view_type="module"): None, ) + # Debug: dump the whole component + logger.info( + "DEBUG Component dump for %s: %s", + component.get("serialNumber"), + pprint.pformat(component), + ) + logger.info("DEBUG altID extracted: '%s'", altID) + component_data = { "_id": cmp_id, "name": name, -- GitLab From 5be1b416ca486641c0d5681538e90a37cd2f818d Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 10:41:36 -0700 Subject: [PATCH 03/12] project altID --- viewer/pages/toppage.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index bacd70b41..e4fb78347 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -208,6 +208,27 @@ def show_comps(view_type="module"): "_id": 1, "serialNumber": 1, "componentType": 1, + "altID": { + "$arrayElemAt": [ + { + "$map": { + "input": { + "$filter": { + "input": "$properties", + "cond": { + "$eq": [ + "$$this.code", + "ALTERNATIVE_IDENTIFIER", + ] + }, + } + }, + "in": "$$this.value", + } + }, + 0, + ] + }, "children": { "$map": { "input": "$children", @@ -444,24 +465,6 @@ def show_comps(view_type="module"): for r in results: result = r - # Extract alternative ID from properties - altID = next( - ( - prop["value"] - for prop in component.get("properties", []) - if prop["code"] == "ALTERNATIVE_IDENTIFIER" and prop.get("value") - ), - None, - ) - - # Debug: dump the whole component - logger.info( - "DEBUG Component dump for %s: %s", - component.get("serialNumber"), - pprint.pformat(component), - ) - logger.info("DEBUG altID extracted: '%s'", altID) - component_data = { "_id": cmp_id, "name": name, @@ -471,7 +474,6 @@ def show_comps(view_type="module"): "proDB": component.get("proDB", False), "component_tag_candidate": tag_candidates, "component_tag": tags, - "altID": altID, } if qcStatus: -- GitLab From b5143aebf44642d1cd5888f12b93a6bebdc1e1ca Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 10:47:07 -0700 Subject: [PATCH 04/12] put altID in component data --- viewer/pages/toppage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index e4fb78347..42dbdfc6d 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -474,6 +474,7 @@ def show_comps(view_type="module"): "proDB": component.get("proDB", False), "component_tag_candidate": tag_candidates, "component_tag": tags, + "altID": component.get("altID"), } if qcStatus: -- GitLab From 70b064e04719dce7ee8279eb9a0b788a2adee18f Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 10:53:47 -0700 Subject: [PATCH 05/12] debug --- viewer/pages/toppage.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index 42dbdfc6d..e428b8472 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -477,6 +477,12 @@ def show_comps(view_type="module"): "altID": component.get("altID"), } + # Debug: print whole component and component_data + logger.info("DEBUG COMPONENT for %s: %s", name, pprint.pformat(component)) + logger.info( + "DEBUG COMPONENT_DATA for %s: %s", name, pprint.pformat(component_data) + ) + if qcStatus: component_data.update({"stage": qcStatus["stage"]}) -- GitLab From 478890c0b5672376e9e6c51f96cb857e9706afe2 Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 11:11:19 -0700 Subject: [PATCH 06/12] need to add missing projection --- viewer/pages/toppage.py | 52 ++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index e428b8472..fa47fa3fb 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -171,6 +171,7 @@ def show_comps(view_type="module"): "_id": 1, "componentType": 1, "serialNumber": 1, + "properties": 1, "children_oids": { "$map": { "input": "$children_oids", @@ -208,6 +209,25 @@ def show_comps(view_type="module"): "_id": 1, "serialNumber": 1, "componentType": 1, + "properties": 1, + "children": { + "$map": { + "input": "$children", + "as": "child", + "in": "$$child.serialNumber", + } + }, + "parents": { + "$map": { + "input": "$parents", + "as": "parent", + "in": "$$parent.serialNumber", + } + }, + } + }, + { + "$addFields": { "altID": { "$arrayElemAt": [ { @@ -228,21 +248,17 @@ def show_comps(view_type="module"): }, 0, ] - }, - "children": { - "$map": { - "input": "$children", - "as": "child", - "in": "$$child.serialNumber", - } - }, - "parents": { - "$map": { - "input": "$parents", - "as": "parent", - "in": "$$parent.serialNumber", - } - }, + } + } + }, + { + "$project": { + "_id": 1, + "serialNumber": 1, + "componentType": 1, + "altID": 1, + "children": 1, + "parents": 1, } }, ] @@ -477,12 +493,6 @@ def show_comps(view_type="module"): "altID": component.get("altID"), } - # Debug: print whole component and component_data - logger.info("DEBUG COMPONENT for %s: %s", name, pprint.pformat(component)) - logger.info( - "DEBUG COMPONENT_DATA for %s: %s", name, pprint.pformat(component_data) - ) - if qcStatus: component_data.update({"stage": qcStatus["stage"]}) -- GitLab From 80c3cfb110e8b5c3f0499a9161f480ce5f45d23b Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 11:31:35 -0700 Subject: [PATCH 07/12] fix pagination to be better icons --- viewer/templates/components_table.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/viewer/templates/components_table.html b/viewer/templates/components_table.html index 2afa228ce..49c4eb496 100644 --- a/viewer/templates/components_table.html +++ b/viewer/templates/components_table.html @@ -162,15 +162,15 @@ Previous First
  • + > Previous
  • {% for index in pagingInfo['range'] %}
  • @@ -189,14 +189,14 @@ + > Next
  • Next Last
  • -- GitLab From 73917fd4f9bf3cf91f9d077e8ee88a91d3bde8d8 Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 11:36:07 -0700 Subject: [PATCH 08/12] clean up pagination to be quite consistent --- viewer/templates/components_table.html | 180 +++++++++++++++++++------ viewer/templates/scan_table.html | 180 ++++++++++++++++++++----- 2 files changed, 282 insertions(+), 78 deletions(-) diff --git a/viewer/templates/components_table.html b/viewer/templates/components_table.html index 49c4eb496..3cae87ed6 100644 --- a/viewer/templates/components_table.html +++ b/viewer/templates/components_table.html @@ -1,5 +1,12 @@ {% import 'widgets/datetime.html' as datetime %} + +
    @@ -156,50 +163,139 @@
    {% if pagingInfo["minPage"] != pagingInfo["maxPage"] %} -
    -
      -
    • - First -
    • -
    • - Previous -
    • - {% for index in pagingInfo['range'] %} -
    • - {% if index == pagingInfo['thisPage'] %} - {{ index }} +
      +
      +
    + + + +
    + + Showing page {{ pagingInfo['thisPage'] }} of {{ pagingInfo['maxPage'] }} ({{ pagingInfo['entries'] }} total results) + +
    +
    {% endif %} diff --git a/viewer/templates/scan_table.html b/viewer/templates/scan_table.html index 7b97c89b6..be163e25b 100644 --- a/viewer/templates/scan_table.html +++ b/viewer/templates/scan_table.html @@ -1,5 +1,12 @@ {% import 'widgets/datetime.html' as datetime %} + +
    @@ -170,42 +177,143 @@

    -
    -
      - {% if table_docs['now_cnt']!=0 %} -
    • - Previous -
    • - {% endif %} - {% for i in table_docs['cnt'] %} - {% if i==table_docs['now_cnt'] %} - {% set li_class="text-center" %} - {% else %} - {% set li_class="d-inline" %} - {% endif %} -
    • - {{ i+1 }} -
    • - {% endfor %} - {% if table_docs['now_cnt']!=table_docs['max_cnt'] %} -
    • - Next -
    • - {% endif %} -
    -
    + {% if table_docs['max_cnt'] > 0 %} +
    +
    + + + +
    + + Showing page {{ table_docs['now_cnt'] + 1 }} of {{ table_docs['max_cnt'] + 1 }} ({{ table_docs["run"]|length }} results on + this page) + +
    +
    +
    + {% endif %}
    -- GitLab From 34ee6d8239956e902ce09930de60406e3c75a1ef Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 11:43:07 -0700 Subject: [PATCH 09/12] fix timestamping --- viewer/pages/toppage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/viewer/pages/toppage.py b/viewer/pages/toppage.py index fa47fa3fb..dcc8bdac6 100644 --- a/viewer/pages/toppage.py +++ b/viewer/pages/toppage.py @@ -534,7 +534,7 @@ def show_comps(view_type="module"): # Sort components by date (newest first) table_docs["components"] = sorted( table_docs["components"], - key=lambda x: x.get("datetime", arrow.get(0).datetime), + key=lambda x: arrow.get(x.get("datetime") or 0).int_timestamp, reverse=True, ) -- GitLab From ea160df6e89cdb80bc30fcd31cbdd9fd332b6f55 Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 11:49:10 -0700 Subject: [PATCH 10/12] add single column for the show all and move it up to form --- viewer/templates/components_table.html | 11 ----------- viewer/templates/scan_table.html | 11 ----------- viewer/templates/toppage.html | 13 ++++++++++++- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/viewer/templates/components_table.html b/viewer/templates/components_table.html index 3cae87ed6..381a85261 100644 --- a/viewer/templates/components_table.html +++ b/viewer/templates/components_table.html @@ -19,17 +19,6 @@
    -

    - Found {{ pagingInfo['entries'] }} {{ table_docs['view'].upper() }} components in LocalDB. - {% if table_docs['doShowAll'] == False %} - - {% else %} - - {% endif %} - -

    -
    diff --git a/viewer/templates/scan_table.html b/viewer/templates/scan_table.html index be163e25b..b677a9e6e 100644 --- a/viewer/templates/scan_table.html +++ b/viewer/templates/scan_table.html @@ -13,17 +13,6 @@ -

    - Found {{ table_docs["run"]|length }} scans in LocalDB. - {% if table_docs['doShowAll'] == False %} - - {% else %} - - {% endif %} - -

    -
    diff --git a/viewer/templates/toppage.html b/viewer/templates/toppage.html index e0e2f08b1..150db7ac7 100644 --- a/viewer/templates/toppage.html +++ b/viewer/templates/toppage.html @@ -76,7 +76,18 @@ - + {% if request.endpoint == 'toppage_api.show_comps' %} +
    + + {% if table_docs['doShowAll'] == False %} + + {% else %} + + {% endif %} +
    + {% else %} + + {% endif %}
    -- GitLab From 38a3bb013d0ef9d947a6279e42e278609b206d7d Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 11:52:57 -0700 Subject: [PATCH 11/12] fix up buttons at top --- viewer/templates/toppage.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/viewer/templates/toppage.html b/viewer/templates/toppage.html index 150db7ac7..2e3e6fcb9 100644 --- a/viewer/templates/toppage.html +++ b/viewer/templates/toppage.html @@ -47,7 +47,7 @@ class="form-control" /> -
    +
    Match:
    @@ -77,12 +77,11 @@
    {% if request.endpoint == 'toppage_api.show_comps' %} -
    - +
    {% if table_docs['doShowAll'] == False %} - + {% else %} - + {% endif %}
    {% else %} -- GitLab From 43427f1a792ffc4a2a3bce0f0b4dc25b37ad4d0f Mon Sep 17 00:00:00 2001 From: Giordon Stark Date: Wed, 24 Sep 2025 12:01:45 -0700 Subject: [PATCH 12/12] update release notes --- docs/release-note.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/release-note.md b/docs/release-note.md index 8b7e953a3..c4d90bd15 100644 --- a/docs/release-note.md +++ b/docs/release-note.md @@ -74,6 +74,8 @@ - Add links to other useful resources (!318) - Improved any remaining bugs due to the statefulness of the application by making it as stateless as possible (!318) +- Alternative IDentifiers can be searched and show up on component listing pages + (!320) ## [v2.6.7](https://gitlab.cern.ch/YARR/localdb-tools/-/tree/v2.6.7) -- GitLab