From 7e25c33f1a815070d7f8f26d6a210f8241f83062 Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Sun, 21 Jan 2024 18:19:20 +1100 Subject: [PATCH] removed use of ref var for code readability added some more defensive code to throw an error, rather than crash if missing pref, referrers, etc. fix use of SetFELog with log_level="error" => level="danger" --- states.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/states.py b/states.py index 99fa320..fb19d27 100644 --- a/states.py +++ b/states.py @@ -62,10 +62,9 @@ class States(PA): # this is any next/prev or noo, grouping, etc. change (so use referrer to work out what to do with this) # because this can happen on a view, or files_up, etc. change this FIRST if 'change_file_opts' in request.path: - ref=request.referrer base=request.base_url base=base.replace("change_file_opts", "") - self.url = "/"+ref.replace(base, "" ) + self.url = "/"+request.referrer.replace(base, "" ) # if view_list, then we really are a view, and view_eid should be in the form if 'view_list' in request.path: @@ -82,16 +81,18 @@ class States(PA): else: # GET's occur on redirect, and we don't have a form, so get it from pref st=self.url[8:] - ref=request.referrer - if 'search' in ref: - st=re.sub( '.+/search/', '', ref ) + if request.referrer and 'search' in request.referrer: + st=re.sub( '.+/search/', '', request.referrer ) else: st='' pref=PA_UserState.query.filter(PA_UserState.pa_user_dn==current_user.dn,PA_UserState.path_type==self.path_type,PA_UserState.view_eid==self.view_eid,PA_UserState.orig_search_term==st).first() if not pref: - SetFELog( message=f"ERROR: pref not found - DONT CLOSE THIS!!! dn={current_user.dn}, st={st}, s={self}????" , log_level="error", persistent=True, cant_close=True ) + SetFELog( message=f"ERROR: pref not found - dn={current_user.dn}, st={st}, s={self}????" , level="danger", persistent=True, cant_close=True ) redirect("/") else: + if not hasattr( pref, 'orig_url' ): + SetFELog( message=f"ERROR: orig_url not in pref - dn={current_user.dn}, st={st}, self={self}, pref={pref}????" , level="danger", persistent=True, cant_close=True ) + redirect("/") self.url = pref.orig_url if 'files_ip' in self.url or 'file_list_ip' in self.url: @@ -123,22 +124,28 @@ class States(PA): elif 'view' in self.url: # use url to get eid of viewed entry self.view_eid = self.url[6:] - self.path_type="View" + # force this to be a search so rest of code won't totally die, but also not return anything + self.path_type="Search" self.orig_url=self.url elif 'change_file_opts' not in self.url: - SetFELog( message=f"ERROR: DDP messed up, failed to match URL {self.url} for settings this will fail, redirecting to home" , log_level="error", persistent=True, cant_close=True ) - SetFELog( message=f"referrer={request.referrer}" , log_level="error", - persistent=True, cant_close=True ) + SetFELog( message=f"ERROR: DDP messed up, failed to match URL {self.url} for settings this will fail, redirecting to home" , level="danger", persistent=True, cant_close=True ) + SetFELog( message=f"referrer={request.referrer}" , level="danger", persistent=True, cant_close=True ) return if self.path_type == 'View': pref=PA_UserState.query.filter(PA_UserState.pa_user_dn==current_user.dn,PA_UserState.path_type==self.path_type,PA_UserState.view_eid==self.view_eid,PA_UserState.orig_search_term==self.orig_search_term).first() + if not hasattr( self, 'orig_ptype' ): + self.orig_ptype='View' + self.orig_url='' + SetFELog( message=f"ERROR: No orig ptype? s={self} - pref={pref}, redirecting to home" , level="danger", persistent=True, cant_close=True ) + SetFELog( message=f"referrer={request.referrer}" , level="danger", persistent=True, cant_close=True ) + redirect("/") + # should find original path or search for this view (if not a search, search_term='') orig_pref=PA_UserState.query.filter(PA_UserState.pa_user_dn==current_user.dn,PA_UserState.path_type==self.orig_ptype,PA_UserState.orig_search_term==self.orig_search_term).first() if not orig_pref: - SetFELog( message=f"ERROR: DDP messed up 2, failed to find orig_pref for a view pt={self.path_type} for search={self.orig_search_term}" , log_level="error", persistent=True, cant_close=True ) - SetFELog( message=f"referrer={request.referrer}" , log_level="error", - persistent=True, cant_close=True ) + SetFELog( message=f"ERROR: DDP messed up 2, failed to find orig_pref for a view pt={self.path_type} for search={self.orig_search_term}" , level="danger", persistent=True, cant_close=True ) + SetFELog( message=f"referrer={request.referrer}" , level="danger", persistent=True, cant_close=True ) return elif self.path_type == 'Search': pref=PA_UserState.query.filter(PA_UserState.pa_user_dn==current_user.dn,PA_UserState.path_type==self.path_type,PA_UserState.orig_search_term==self.orig_search_term).first() @@ -255,8 +262,8 @@ class States(PA): self.offset += int(self.how_many) else: # should be impossible now, but leave jic - SetFELog( message=f"WARNING: next image requested, but would go past end of list? - ignore this" , log_level="warning", persistent=True, cant_close=True ) - SetFELog( message=f"DDP - offset={self.offset} + how_many={self.how_many} > num_entries={self.num_entries}" , log_level="error", persistent=True, cant_close=True ) + SetFELog( message=f"WARNING: next image requested, but would go past end of list? - ignore this" , level="warning", persistent=True, cant_close=True ) + SetFELog( message=f"DDP - offset={self.offset} + how_many={self.how_many} > num_entries={self.num_entries}" , level="danger", persistent=True, cant_close=True ) if 'current' in request.form: self.current = int(request.form['current'])