Source code for populse_mia.user_interface.data_browser.rapid_search
# -*- coding: utf-8 -*-
"""
Module to define the rapid search.
Contains:
Class:
- RapidSearch
"""
##########################################################################
# Populse_mia - Copyright (C) IRMaGe/CEA, 2018
# Distributed under the terms of the CeCILL license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html
# for details.
##########################################################################
# PyQt5 import
from PyQt5.QtWidgets import QLineEdit
# Populse_MIA imports
from populse_mia.data_manager.project import TAG_BRICKS, TAG_FILENAME
[docs]
class RapidSearch(QLineEdit):
"""Widget used to search for a pattern in the table (for all the visualized
tags).
Enter % to replace any string, _ to replace any character , *Not Defined*
for the scans with missing value(s).
Dates are in the following format: yyyy-mm-dd hh:mm:ss.fff”
:param databrowser: parent data browser widget
.. Methods:
- prepare_filter: prepares the rapid search filter
- prepare_not_defined_filter: prepares the rapid search filter for not
defined values
"""
[docs]
def __init__(self, databrowser):
"""Initialization of RapidSearch class.
:param databrowser: parent data browser widget
"""
super().__init__()
self.databrowser = databrowser
self.setPlaceholderText(
"Rapid search, enter % to replace any string,"
" _ to replace any character, *Not Defined* "
"for the scans with missing value(s), "
"dates are in the following format: "
"yyyy-mm-dd hh:mm:ss.fff"
)
[docs]
def prepare_not_defined_filter(self, tags):
"""Prepare the rapid search filter for not defined values.
:param tags: list of tags to take into account
:return: str filter corresponding to the rapid search for not defined
values
"""
query = ""
or_to_write = False
for tag in tags:
if tag != TAG_BRICKS:
if or_to_write:
query += " OR "
query += "({" + tag + "} == null)"
or_to_write = True
query += (
" AND ({"
+ TAG_FILENAME
+ "} IN "
+ str(self.databrowser.table_data.scans_to_search).replace(
"'", '"'
)
+ ")"
)
query = "(" + query + ")"
return query
[docs]
@staticmethod
def prepare_filter(search, tags, scans):
"""Prepare the rapid search filter.
:param search: Search (str)
:param tags: List of tags to take into account
:param scans: List of scans to search into
:return: str filter corresponding to the rapid search
"""
query = "("
or_to_write = False
for tag in tags:
if tag != TAG_BRICKS:
if or_to_write:
query += " OR "
query += "({" + tag + '} LIKE "%' + search + '%")'
or_to_write = True
query += (
") AND ({"
+ TAG_FILENAME
+ "} IN "
+ str(scans).replace("'", '"')
+ ")"
)
return query