79776148

Date: 2025-09-26 15:57:32
Score: 1.5
Natty:
Report link

I used @fluffy's code and I want to thank him. And here's a complete code for advanced filters to everybody who wants to avoid errors. It took me 3.5 hours to find this post.

def visualize_lists(self, pattern=""):
        
        query = None
        app = MDApp.get_running_app()
        
        try:
            with db_session:
                
                query = self.get_search_bar().current_filter.get_elements(self.get_search_bar().get_pattern())

                start_age = self.get_start_age().get_value() #* 365
                end_age = self.get_end_age().get_value() #* 365

                start_date_adm = self.get_adm_date_start().text
                end_date_adm = self.get_adm_date_end().text

                start_date = None if start_date_adm == "YYYY-MM-DD"else datetime.strptime( start_date_adm , "%Y-%m-%d").date()
                end_date = None if end_date_adm == "YYYY-MM-DD" else datetime.strptime( end_date_adm , "%Y-%m-%d").date()

                
                query = select(
                    pat for pat in query
                        for adm in pat.admissions
                            if (
                                adm.get_start_date().year - pat.get_dob().year
                                - int((adm.start_date.month, adm.start_date.day) < (pat.get_dob().month, pat.get_dob().day))
                                >= start_age
                            )
                            and (
                                adm.get_start_date().year - pat.get_dob().year
                                - int((adm.start_date.month, adm.start_date.day) < (pat.get_dob().month, pat.get_dob().day))
                                <= end_age
                            )
                            
                            #and (start_date==None or adm.get_start_date() >= start_date )
                            #and (end_date==None or adm.get_start_date() <= end_date )
                )

                if start_date and end_date:
                    query = query.filter(
                        lambda pat : exists(
                            adm for adm in pat.admissions
                                if adm.get_start_date() >= start_date
                                and adm.get_start_date() >= end_date
                        )
                    )
                
                chosen_pathologies = self.get_list_pathologies().get_active_checkboxes()
                
                #if( len(chosen_pathologies) != 0 ):
                    
                #for chosen_pathology in chosen_pathologies:

                query = query.filter(
                    lambda pat : exists(
                        adm for adm in pat.admissions
                            for pathology in adm.pathology
                                if pathology.get_type() in chosen_pathologies
                    )
                )

                #.filter(lambda patient: "arl" in patient.get_name())
                print( list(set(query[:])) )
                visualize_pats = app.get_screen("visualize_patients")
                visualize_pats.fill_table( list(set(query[:])) )
                db.commit()

        except OperationalError as e:
            messagebox.showerror("Connection to database", e)
            return

        self.get_adm_date_start().text = "YYYY-MM-DD"
        self.get_adm_date_end().text = "YYYY-MM-DD"

        app.change_page("visualize_patients")
Reasons:
  • RegEx Blacklisted phrase (1): I want
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @fluffy's
  • Low reputation (1):
Posted by: bad programmer