From cffdc2772470258b8e688bc339e79c1a5378065c Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Fri, 13 Jun 2025 16:16:56 -0500 Subject: [PATCH] Enhance search functionality with pagination and improve eager loading in utils --- __pycache__/routes.cpython-313.pyc | Bin 29123 -> 29563 bytes __pycache__/utils.cpython-313.pyc | Bin 2316 -> 2344 bytes routes.py | 8 ++- templates/search.html | 88 +++++++++++++++-------------- utils.py | 6 +- 5 files changed, 56 insertions(+), 46 deletions(-) diff --git a/__pycache__/routes.cpython-313.pyc b/__pycache__/routes.cpython-313.pyc index 1b0adbbbb1ace4a9e5fede77641c7fd54e0f9fed..71adfaa3dee59b40b8b5feb86cdb25d961c7b09a 100644 GIT binary patch delta 1315 zcmX^7nDO^BM!wIyyj%0N%Qzi&Ik3HHH!ou!4rf8wb5A7u<@6{2RygG@C8}2=*MIZ+VP5zY>tjmF9 zd=uPw&S-Od#!p_5tj@?f`9!kXM`dDM0>(44(1Ey4;2Vy2o|tpQDG=%QeY@%%HvIgu)rY%WuuDn zVHM?1W6%`zyEQo|eJP{r*X9O`8Pwvf7VicUbAw!g(&oi$qHLoPU zsM0YfGqHH`kqm!UK?Vi}g~{TXa@@L%3=E)*SzN&~*&(x&OH^h~3pjnSntx5+oy<0Fn?*V49qq z9h!85N9sC{=0zUO>pc1wdGt3ZZgAaTzC&>X&t)E4u$wcC>KA#`S17JpU74c{ElSt_WS>zQJ&X%w-<4&%ErMT%VaaM7bM$zX)wUmTk(& zd?6}+^6wlY_w&kX!Kz#rI0b_hgf2*Ng4pJ2!3I1RWd(z^MK0=b1{?5P;#Lc`=DTDl z7;GkXnTa#ln(wj#Yp^QUWo_1A1D?xftijfsOL7|-<#ibu7>W)uFfbJ9f(UH}28LT4 kHo5sJr8%i~MOK?d@@F%N*f1tCer9H16932qVuF_}!5!Oh@^HpgPdzGQVqmdVeO)h2tSWFx!A zpBbXslo3MbaUz*I8Ez_9C~LG0L?K0`5+FoTCB14I7q z$qN1=JP4&hj*~CSO63VNgz*$JLDg|FFyx<6VhH7i*%`p(%frCH&7iR=X3+B;d31yFVg1dnO?gm~oH{6A|0j?CE8+eI!18*n?*bSV~E^s$+ z!QH@z=7x75H%xw&#?1&0fO@O}z(=&@e4$(*%Y%9KnDh9f-C+(0<_qSJ_z)~$$)dtg z%mfL(GzbeEY*02+o-z-V2@>XovYGObMfoPjWUOXXnaq)?DaFUYz)&OsBE&$%4G^&w zMDR@Z&J3HpEK^QYpa?9W!pOi-qzWS5GcYhrewpddA^>98X325uFfuTJd|3R9d2(7- z=jNYT6B#)#ixgZJDZeOEKKV#aDBovx7EZ3u%&el^4ZdG^Hdp7GGEUx{XXJiXMlDd5 z>l~9{poGvlVNMX+KrK*%=e(F;pt8t$bs^J#4OTfU|;|M D8rIls diff --git a/__pycache__/utils.cpython-313.pyc b/__pycache__/utils.cpython-313.pyc index a73e036e71e2a52cb5170a5aa57b7d778ba5b8cd..bcce93ef649acd8cb61ec0231a05af14b18f81d2 100644 GIT binary patch delta 629 zcmeAXS|P;ynU|M~fq{WxU!PBg%tT(vTrUO&hN%p}48e@v3|@>yj9yGdObQIaOu@|F z%w8--EMBZdtX^zIY+md|>WO6CXG)C^p2F!Y5 z(ICS?E@g;j0aFYN3_*O816WmEKr)&fNY;W3zQvMQl$uxsHXfwm7H4K&S!!NMeo^Hu z*3#nCqT(VHTeq+(Gs;cA!D^@^G9_es+{C!c94dD>KA{ZhlH?PH_<^%!@!CDFOvz5ho~^gh7NPh>!yjN+3d$fq`Kq zLy-uG4K|*`CO1E&G$+-rNSA?u0Tigk8Vn2!AD9^#8SgU~-)Ato%wY71g@uvr6Av3B R+b01q!NNF+lY<3h3IGt0h>rjO delta 609 zcmZ1>)FZ_EnU|M~fq{V`@48n8*F;{)Xg3B1hN%p}48e@v3|@>yj0z0FOu@|FOkT`I z%w8--EMBZdtX^zIYzhp)EK&?b?7^&33`HElY*GwGoWbl;3`JbQ98wHL-07T}TrWW; zYck&A%F55oOHJ80S(H(Rm4Sib7FTg;L26N1W^sPeEsmW0)34(NSC1;f8Wyj}a7MB!hOm^UKujjeNS6rBr zn3J55np>%tUz7_Dz*}s&`6;P6#YLbPC<6Jj2o$76AghanKp`gqB4j~?B8bpnU|?9u z0Csl~*d`8}-29Z%oK(9a9R>ylP!Jb`)O=uOWMsU{pn9Ld=rV)RCzi?FoRTac-vR*O CdyXdn diff --git a/routes.py b/routes.py index 47294d3..436f03b 100644 --- a/routes.py +++ b/routes.py @@ -316,6 +316,7 @@ def search(): if not query: return redirect(url_for('index')) + InventoryAlias = aliased(Inventory) UserAlias = aliased(User) inventory_query = eager_load_inventory_relationships(db.session.query(Inventory).join(UserAlias, Inventory.owner)).filter( @@ -334,11 +335,14 @@ def search(): User.last_name.ilike(f"%{query}%") )) user_pagination = make_paginated_data(user_query, user_page) - worklog_query = eager_load_worklog_relationships(db.session.query(WorkLog).join(UserAlias, WorkLog.contact)).filter( + worklog_query = eager_load_worklog_relationships(db.session.query(WorkLog).join(UserAlias, WorkLog.contact).join(InventoryAlias, WorkLog.work_item)).filter( or_( WorkLog.notes.ilike(f"%{query}%"), UserAlias.first_name.ilike(f"%{query}%"), - UserAlias.last_name.ilike(f"%{query}%") + UserAlias.last_name.ilike(f"%{query}%"), + InventoryAlias.inventory_name.ilike(f"%{query}%"), + InventoryAlias.serial.ilike(f"%{query}%"), + InventoryAlias.barcode.ilike(f"%{query}%") )) worklog_pagination = make_paginated_data(worklog_query, worklog_page) diff --git a/templates/search.html b/templates/search.html index ce1291f..a4bb388 100644 --- a/templates/search.html +++ b/templates/search.html @@ -10,64 +10,70 @@ title=title, ) }}
+ {% if results['inventory']['rows'] %}
{{ tables.render_table( - headers = results['inventory']['headers'], - rows = results['inventory']['rows'], - entry_route = 'inventory_item', - title='Inventory Results' + headers = results['inventory']['headers'], + rows = results['inventory']['rows'], + entry_route = 'inventory_item', + title='Inventory Results' )}} {{ tables.render_pagination( - endpoint = 'main.search', - page = results['inventory']['pagination']['page'], - has_prev = results['inventory']['pagination']['has_prev'], - has_next = results['inventory']['pagination']['has_next'], - total_pages = results['inventory']['pagination']['total_pages'], - page_variable = 'inventory_page', - extra_args = { - 'q': query, - 'user_page': results['users']['pagination']['page'], - 'worklog_page': results['worklog']['pagination']['page'] + endpoint = 'main.search', + page = results['inventory']['pagination']['page'], + has_prev = results['inventory']['pagination']['has_prev'], + has_next = results['inventory']['pagination']['has_next'], + total_pages = results['inventory']['pagination']['total_pages'], + page_variable = 'inventory_page', + extra_args = { + 'q': query, + 'user_page': results['users']['pagination']['page'], + 'worklog_page': results['worklog']['pagination']['page'] })}}
+ {% endif %} + {% if results['users']['rows'] %}
{{ tables.render_table( - headers = results['users']['headers'], - rows = results['users']['rows'], - entry_route = 'user', title='User Results' + headers = results['users']['headers'], + rows = results['users']['rows'], + entry_route = 'user', title='User Results' )}} {{ tables.render_pagination( - endpoint = 'main.search', - page = results['users']['pagination']['page'], - has_prev = results['users']['pagination']['has_prev'], - has_next = results['users']['pagination']['has_next'], - total_pages = results['users']['pagination']['total_pages'], - page_variable = 'user_page', - extra_args = { - 'q': query, - 'inventory_page': results['inventory']['pagination']['page'], - 'worklog_page': results['worklog']['pagination']['page'] + endpoint = 'main.search', + page = results['users']['pagination']['page'], + has_prev = results['users']['pagination']['has_prev'], + has_next = results['users']['pagination']['has_next'], + total_pages = results['users']['pagination']['total_pages'], + page_variable = 'user_page', + extra_args = { + 'q': query, + 'inventory_page': results['inventory']['pagination']['page'], + 'worklog_page': results['worklog']['pagination']['page'] })}}
+ {% endif %} + {% if results['worklog']['rows'] %}
{{ tables.render_table( - headers = results['worklog']['headers'], - rows = results['worklog']['rows'], - entry_route = 'worklog_entry', - title='Worklog Results' + headers = results['worklog']['headers'], + rows = results['worklog']['rows'], + entry_route = 'worklog_entry', + title='Worklog Results' )}} {{ tables.render_pagination( - endpoint = 'main.search', - page = results['worklog']['pagination']['page'], - has_prev = results['worklog']['pagination']['has_prev'], - has_next = results['worklog']['pagination']['has_next'], - total_pages = results['worklog']['pagination']['total_pages'], - page_variable = 'worklog_page', - extra_args = { - 'q': query, - 'inventory_page': results['inventory']['pagination']['page'], - 'user_page': results['users']['pagination']['page'] + endpoint = 'main.search', + page = results['worklog']['pagination']['page'], + has_prev = results['worklog']['pagination']['has_prev'], + has_next = results['worklog']['pagination']['has_next'], + total_pages = results['worklog']['pagination']['total_pages'], + page_variable = 'worklog_page', + extra_args = { + 'q': query, + 'inventory_page': results['inventory']['pagination']['page'], + 'user_page': results['users']['pagination']['page'] })}}
+ {% endif %}
{% endblock %} \ No newline at end of file diff --git a/utils.py b/utils.py index 344e4a6..a9471b7 100644 --- a/utils.py +++ b/utils.py @@ -1,4 +1,4 @@ -from sqlalchemy.orm import joinedload +from sqlalchemy.orm import joinedload, selectinload from .models import User, Room, Inventory, WorkLog def eager_load_user_relationships(query): @@ -19,8 +19,8 @@ def eager_load_room_relationships(query): return query.options( joinedload(Room.area), joinedload(Room.room_function), - joinedload(Room.inventory), - joinedload(Room.users) + selectinload(Room.inventory), + selectinload(Room.users) ) def eager_load_worklog_relationships(query):