From d4416fde357bc743c26f3b66d893b927d22f54d9 Mon Sep 17 00:00:00 2001 From: patriciacatandi Date: Mon, 4 Mar 2024 12:28:12 -0300 Subject: [PATCH] adding new pages for rain dashboard --- api_dados_rio/v2/clima_pluviometro/urls.py | 140 +-- api_dados_rio/v2/clima_pluviometro/views.py | 1186 +++++++++---------- 2 files changed, 663 insertions(+), 663 deletions(-) diff --git a/api_dados_rio/v2/clima_pluviometro/urls.py b/api_dados_rio/v2/clima_pluviometro/urls.py index 7597a3f..dc501a1 100644 --- a/api_dados_rio/v2/clima_pluviometro/urls.py +++ b/api_dados_rio/v2/clima_pluviometro/urls.py @@ -14,26 +14,26 @@ views.LastUpdateRainView, basename="ultima_atualizacao_precipitacao_15min", ) -# router.register( -# r"precipitacao_30min", -# views.Last30MinRainView, -# basename="precipitacao_30min", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_30min", -# views.LastUpdate30MinRainView, -# basename="ultima_atualizacao_precipitacao_30min", -# ) -# router.register( -# r"precipitacao_60min", -# views.Last60MinRainView, -# basename="precipitacao_60min", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_60min", -# views.LastUpdate60MinRainView, -# basename="ultima_atualizacao_precipitacao_60min", -# ) +router.register( + r"precipitacao_30min", + views.Last30MinRainView, + basename="precipitacao_30min", +) +router.register( + r"ultima_atualizacao_precipitacao_30min", + views.LastUpdate30MinRainView, + basename="ultima_atualizacao_precipitacao_30min", +) +router.register( + r"precipitacao_60min", + views.Last60MinRainView, + basename="precipitacao_60min", +) +router.register( + r"ultima_atualizacao_precipitacao_60min", + views.LastUpdate60MinRainView, + basename="ultima_atualizacao_precipitacao_60min", +) router.register( r"precipitacao_120min", views.Last120MinRainView, @@ -44,53 +44,53 @@ views.LastUpdate120MinRainView, basename="ultima_atualizacao_precipitacao_120min", ) -# router.register( -# r"precipitacao_3h", -# views.Last3HRainView, -# basename="precipitacao_3h", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_3h", -# views.LastUpdate3HRainView, -# basename="ultima_atualizacao_precipitacao_3h", -# ) -# router.register( -# r"precipitacao_6h", -# views.Last6HRainView, -# basename="precipitacao_6h", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_6h", -# views.LastUpdate6HRainView, -# basename="ultima_atualizacao_precipitacao_6h", -# ) -# router.register( -# r"precipitacao_12h", -# views.Last12HRainView, -# basename="precipitacao_12h", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_12h", -# views.LastUpdate12HRainView, -# basename="ultima_atualizacao_precipitacao_12h", -# ) -# router.register( -# r"precipitacao_24h", -# views.Last24HRainView, -# basename="precipitacao_24h", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_24h", -# views.LastUpdate24HRainView, -# basename="ultima_atualizacao_precipitacao_24h", -# ) -# router.register( -# r"precipitacao_96h", -# views.Last96HRainView, -# basename="precipitacao_96h", -# ) -# router.register( -# r"ultima_atualizacao_precipitacao_96h", -# views.LastUpdate96HRainView, -# basename="ultima_atualizacao_precipitacao_96h", -# ) +router.register( + r"precipitacao_3h", + views.Last3HRainView, + basename="precipitacao_3h", +) +router.register( + r"ultima_atualizacao_precipitacao_3h", + views.LastUpdate3HRainView, + basename="ultima_atualizacao_precipitacao_3h", +) +router.register( + r"precipitacao_6h", + views.Last6HRainView, + basename="precipitacao_6h", +) +router.register( + r"ultima_atualizacao_precipitacao_6h", + views.LastUpdate6HRainView, + basename="ultima_atualizacao_precipitacao_6h", +) +router.register( + r"precipitacao_12h", + views.Last12HRainView, + basename="precipitacao_12h", +) +router.register( + r"ultima_atualizacao_precipitacao_12h", + views.LastUpdate12HRainView, + basename="ultima_atualizacao_precipitacao_12h", +) +router.register( + r"precipitacao_24h", + views.Last24HRainView, + basename="precipitacao_24h", +) +router.register( + r"ultima_atualizacao_precipitacao_24h", + views.LastUpdate24HRainView, + basename="ultima_atualizacao_precipitacao_24h", +) +router.register( + r"precipitacao_96h", + views.Last96HRainView, + basename="precipitacao_96h", +) +router.register( + r"ultima_atualizacao_precipitacao_96h", + views.LastUpdate96HRainView, + basename="ultima_atualizacao_precipitacao_96h", +) diff --git a/api_dados_rio/v2/clima_pluviometro/views.py b/api_dados_rio/v2/clima_pluviometro/views.py index f539005..4b7d64b 100644 --- a/api_dados_rio/v2/clima_pluviometro/views.py +++ b/api_dados_rio/v2/clima_pluviometro/views.py @@ -180,596 +180,596 @@ def list(self, request): ) -# # Views for last 30 min -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nos últimos 30 minutos", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para os últimos 30 minutos, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last30MinRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_30min_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva dos últimos 30 minutos", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate30MinRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_30min_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# # Views for last 60 min -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nos últimos 60 minutos", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para os últimos 60 minutos, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last60MinRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_60min_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva dos últimos 60 minutos", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate60MinRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_60min_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# # Views for last 3h -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 3 horas", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para as últimas 3 horas, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last3HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_3h_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 3 horas", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate3HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_3h_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# # Views for last 6h -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 6 horas", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para as últimas 6 horas, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last6HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_6h_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 6 horas", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate6HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_6h_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# # Views for last 12h -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 12 horas", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para as últimas 12 horas, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last12HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_12h_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 12 horas", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate12HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_12h_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# # Views for last 24h -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 24 horas", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para as últimas 24 horas, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last24HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_24h_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 24 horas", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate24HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_24h_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# # Views for last 96h -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 96 horas", -# operation_description=""" -# **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva -# precipitada para as últimas 96 horas, em milímetros (mm): - -# ```json -# [ -# { -# "id_h3": "88a8a03989fffff", -# "bairro": "Guaratiba", -# "quantidade": 0.0, -# "estacoes": null, -# "status": "sem chuva", -# "color": "#ffffff" -# }, -# ... -# ] -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class Last96HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# data_key = "data_last_96h_rain" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# # Get data and set cache -# data = redis.get(data_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# return Response(data) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) - - -# @method_decorator( -# name="list", -# decorator=swagger_auto_schema( -# operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 96 horas", -# operation_description=""" -# **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: - -# ``` -# "" -# ``` - -# **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. -# """, -# ), -# ) -# class LastUpdate96HRainView(LoggingMixin, ViewSet): -# def list(self, request): -# last_update_key = "data_last_96h_rain_update" -# try: -# redis_url = getenv("REDIS_URL") -# assert redis_url is not None -# redis = RedisPal.from_url(redis_url) -# data = redis.get(last_update_key) -# assert data is not None -# assert isinstance(data, list) -# assert len(data) > 0 -# result = data[0] -# assert "last_update" in result -# last_update = result["last_update"] -# last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") -# return Response(last_update_str) -# except Exception: -# return Response( -# {"error": "Something went wrong. Try again later."}, -# status=500, -# ) +# Views for last 30 min +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nos últimos 30 minutos", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para os últimos 30 minutos, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last30MinRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_30min_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva dos últimos 30 minutos", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate30MinRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_30min_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +# Views for last 60 min +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nos últimos 60 minutos", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para os últimos 60 minutos, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last60MinRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_60min_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva dos últimos 60 minutos", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate60MinRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_60min_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +# Views for last 3h +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 3 horas", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para as últimas 3 horas, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last3HRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_3h_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 3 horas", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate3HRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_3h_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +# Views for last 6h +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 6 horas", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para as últimas 6 horas, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last6HRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_6h_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 6 horas", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate6HRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_6h_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +# Views for last 12h +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 12 horas", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para as últimas 12 horas, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last12HRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_12h_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 12 horas", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate12HRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_12h_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +# Views for last 24h +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 24 horas", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para as últimas 24 horas, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last24HRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_24h_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 24 horas", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate24HRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_24h_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +# Views for last 96h +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna a quantidade de chuva precipitada em cada hexágono (H3) nas últimas 96 horas", + operation_description=""" + **Resultado**: Retorna uma lista contendo todos os hexágonos (H3) com a quantidade de chuva + precipitada para as últimas 96 horas, em milímetros (mm): + + ```json + [ + { + "id_h3": "88a8a03989fffff", + "bairro": "Guaratiba", + "quantidade": 0.0, + "estacoes": null, + "status": "sem chuva", + "color": "#ffffff" + }, + ... + ] + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class Last96HRainView(LoggingMixin, ViewSet): + def list(self, request): + data_key = "data_last_96h_rain" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + # Get data and set cache + data = redis.get(data_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + return Response(data) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + ) + + +@method_decorator( + name="list", + decorator=swagger_auto_schema( + operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 96 horas", + operation_description=""" + **Resultado**: Retorna um texto contendo o horário de atualização dos dados de chuva: + + ``` + "" + ``` + + **Política de cache**: O resultado é armazenado em cache por um período de 5 minutos. + """, + ), +) +class LastUpdate96HRainView(LoggingMixin, ViewSet): + def list(self, request): + last_update_key = "data_last_96h_rain_update" + try: + redis_url = getenv("REDIS_URL") + assert redis_url is not None + redis = RedisPal.from_url(redis_url) + data = redis.get(last_update_key) + assert data is not None + assert isinstance(data, list) + assert len(data) > 0 + result = data[0] + assert "last_update" in result + last_update = result["last_update"] + last_update_str = last_update.strftime("%d/%m/%Y %H:%M:%S") + return Response(last_update_str) + except Exception: + return Response( + {"error": "Something went wrong. Try again later."}, + status=500, + )