def __call__(self, request): if not hasattr(request, "user"): request.user = auth.get_user(request) if not hasattr(request.user, "scenarios"): # A scenario list is not available on the request for i in settings.DATABASES: try: if settings.DATABASES[i]["regexp"].match(request.path): scenario = Scenario.objects.using( DEFAULT_DB_ALIAS).get(name=i) if scenario.status != "In use": return HttpResponseNotFound("Scenario not in use") request.prefix = "/%s" % i request.path_info = request.path_info[len(request. prefix):] request.path = request.path[len(request.prefix):] request.database = i if hasattr(request.user, "_state"): request.user._state.db = i.name return self.get_response(request) except Exception: pass request.prefix = "" request.database = DEFAULT_DB_ALIAS if hasattr(request.user, "_state"): request.user._state.db = DEFAULT_DB_ALIAS else: # A list of scenarios is already available if request.user.is_anonymous: return self.get_response(request) default_scenario = None for i in request.user.scenarios: if i.name == DEFAULT_DB_ALIAS: default_scenario = i try: if settings.DATABASES[i.name]["regexp"].match( request.path): request.prefix = "/%s" % i.name request.path_info = request.path_info[len(request. prefix):] request.path = request.path[len(request.prefix):] request.database = i.name request.scenario = i if hasattr(request.user, "_state"): request.user._state.db = i.name request.user.is_superuser = i.is_superuser return self.get_response(request) except Exception: pass request.prefix = "" request.database = DEFAULT_DB_ALIAS if hasattr(request.user, "_state"): request.user._state.db = DEFAULT_DB_ALIAS if default_scenario: request.scenario = default_scenario else: request.scenario = Scenario(name=DEFAULT_DB_ALIAS) return self.get_response(request)
def process_request(self, request): request.user = auth.get_user(request) if not hasattr(request.user, 'scenarios'): # A scenario list is not available on the request for i in settings.DATABASES: try: if settings.DATABASES[i]['regexp'].match(request.path): scenario = Scenario.objects.get(name=i) if scenario.status != 'In use': print('boom') return HttpResponseNotFound('Scenario not in use') request.prefix = '/%s' % i request.path_info = request.path_info[len(request. prefix):] request.path = request.path[len(request.prefix):] request.database = i return except Exception as e: print(e) pass request.prefix = '' request.database = DEFAULT_DB_ALIAS else: # A list of scenarios is already available if not request.user or request.user.is_anonymous(): return default_scenario = None for i in request.user.scenarios: if i.name == DEFAULT_DB_ALIAS: default_scenario = i try: if settings.DATABASES[i.name]['regexp'].match( request.path): request.prefix = '/%s' % i.name request.path_info = request.path_info[len(request. prefix):] request.path = request.path[len(request.prefix):] request.database = i.name request.scenario = i request.user._state.db = i.name request.user.is_superuser = i.is_superuser return except: pass request.prefix = '' request.database = DEFAULT_DB_ALIAS if default_scenario: request.scenario = default_scenario else: request.scenario = Scenario(name=DEFAULT_DB_ALIAS)
def __call__(self, request): # Make request information available throughout the application setattr(_thread_locals, "request", request) if not hasattr(request, "user"): request.user = auth.get_user(request) if not hasattr(request.user, "scenarios"): # A scenario list is not available on the request for i in settings.DATABASES: try: if settings.DATABASES[i]["regexp"].match(request.path): scenario = Scenario.objects.using(DEFAULT_DB_ALIAS).get(name=i) if scenario.status != "In use": return HttpResponseNotFound("Scenario not in use") request.prefix = "/%s" % i request.path_info = request.path_info[len(request.prefix) :] request.path = request.path[len(request.prefix) :] request.database = i if hasattr(request.user, "_state"): request.user._state.db = i.name response = self.get_response(request) if not response.streaming: # Note: Streaming response get the request field cleared in the # request_finished signal handler setattr(_thread_locals, "request", None) return response except Exception: pass request.prefix = "" request.database = DEFAULT_DB_ALIAS if hasattr(request.user, "_state"): request.user._state.db = DEFAULT_DB_ALIAS else: # A list of scenarios is already available if request.user.is_anonymous: return self.get_response(request) default_scenario = None for i in request.user.scenarios: if i.name == DEFAULT_DB_ALIAS: default_scenario = i try: if settings.DATABASES[i.name]["regexp"].match(request.path): request.prefix = "/%s" % i.name request.path_info = request.path_info[len(request.prefix) :] request.path = request.path[len(request.prefix) :] request.database = i.name request.scenario = i if hasattr(request.user, "_state"): request.user._state.db = i.name request.user.is_superuser = i.is_superuser response = self.get_response(request) if not response.streaming: # Note: Streaming response get the request field cleared in the # request_finished signal handler setattr(_thread_locals, "request", None) return response except Exception: pass request.prefix = "" request.database = DEFAULT_DB_ALIAS if hasattr(request.user, "_state"): request.user._state.db = DEFAULT_DB_ALIAS if default_scenario: request.scenario = default_scenario else: request.scenario = Scenario(name=DEFAULT_DB_ALIAS) response = self.get_response(request) if not response.streaming: # Note: Streaming response get the request field cleared in the # request_finished signal handler setattr(_thread_locals, "request", None) return response
def __call__(self, request): # Make request information available throughout the application setattr(_thread_locals, "request", request) if not hasattr(request, "user"): request.user = auth.get_user(request) # Log out automatically after inactivity if ( not request.user.is_anonymous and settings.SESSION_LOGOUT_IDLE_TIME and "freppledb.common.middleware.AutoLoginAsAdminUser" not in settings.MIDDLEWARE ): now = datetime.now() if "last_request" in request.session: idle_time = now - datetime.strptime( request.session["last_request"], "%y-%m-%d %H:%M:%S" ) if idle_time > timedelta(minutes=settings.SESSION_LOGOUT_IDLE_TIME): logout(request) info( request, _("Your session has expired. Please login again to continue."), ) if request.headers.get("x-requested-with") == "XMLHttpRequest": return HttpResponse( status=401, content=_( "Your session has expired. Please login again to continue." ), ) else: return HttpResponseRedirect(request.path_info) else: request.session["last_request"] = now.strftime("%y-%m-%d %H:%M:%S") else: request.session["last_request"] = now.strftime("%y-%m-%d %H:%M:%S") # Keep last_login date up to date if not request.user.is_anonymous: last_login = getattr(request.user, "last_login", None) now = timezone.now() if not last_login or now - last_login > timedelta(hours=1): user_logged_in.send( sender=request.user.__class__, request=request, user=request.user ) if not hasattr(request.user, "scenarios"): # A scenario list is not available on the request for i in settings.DATABASES: try: if settings.DATABASES[i]["regexp"].match(request.path): scenario = Scenario.objects.using(DEFAULT_DB_ALIAS).get(name=i) if scenario.status != "In use": return HttpResponseNotFound("Scenario not in use") request.prefix = "/%s" % i request.path_info = request.path_info[len(request.prefix) :] request.path = request.path[len(request.prefix) :] request.database = i if hasattr(request.user, "_state"): request.user._state.db = i.name response = self.get_response(request) if not response.streaming: # Note: Streaming response get the request field cleared in the # request_finished signal handler setattr(_thread_locals, "request", None) return response except Exception: pass request.prefix = "" request.database = DEFAULT_DB_ALIAS if hasattr(request.user, "_state"): request.user._state.db = DEFAULT_DB_ALIAS else: # A list of scenarios is already available if request.user.is_anonymous: return self.get_response(request) default_scenario = None for i in request.user.scenarios: if i.name == DEFAULT_DB_ALIAS: default_scenario = i try: if settings.DATABASES[i.name]["regexp"].match(request.path): request.prefix = "/%s" % i.name request.path_info = request.path_info[len(request.prefix) :] request.path = request.path[len(request.prefix) :] request.database = i.name request.scenario = i if hasattr(request.user, "_state"): request.user._state.db = i.name request.user.is_superuser = i.is_superuser request.user.horizonlength = i.horizonlength request.user.horizontype = i.horizontype request.user.horizonbefore = i.horizonbefore request.user.horizonbuckets = i.horizonbuckets request.user.horizonstart = i.horizonstart request.user.horizonend = i.horizonend request.user.horizonunit = i.horizonunit response = self.get_response(request) if not response.streaming: # Note: Streaming response get the request field cleared in the # request_finished signal handler setattr(_thread_locals, "request", None) return response except Exception: pass request.prefix = "" request.database = DEFAULT_DB_ALIAS if hasattr(request.user, "_state"): request.user._state.db = DEFAULT_DB_ALIAS if default_scenario: request.scenario = default_scenario else: request.scenario = Scenario(name=DEFAULT_DB_ALIAS) response = self.get_response(request) if not response.streaming: # Note: Streaming response get the request field cleared in the # request_finished signal handler setattr(_thread_locals, "request", None) return response