Skip to content

Commit

Permalink
adding new hours routes for onde está chovendo
Browse files Browse the repository at this point in the history
  • Loading branch information
patriciacatandi committed Mar 1, 2024
1 parent 3df406c commit 8b6b68a
Show file tree
Hide file tree
Showing 2 changed files with 231 additions and 40 deletions.
52 changes: 36 additions & 16 deletions api_dados_rio/v2/clima_pluviometro/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,36 @@
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,
Expand All @@ -55,22 +85,12 @@
basename="ultima_atualizacao_precipitacao_24h",
)
router.register(
r"precipitacao_36h",
views.Last36HRainView,
basename="precipitacao_36h",
)
router.register(
r"ultima_atualizacao_precipitacao_36h",
views.LastUpdate36HRainView,
basename="ultima_atualizacao_precipitacao_36h",
)
router.register(
r"precipitacao_48h",
views.Last48HRainView,
basename="precipitacao_48h",
r"precipitacao_96h",
views.Last96HRainView,
basename="precipitacao_96h",
)
router.register(
r"ultima_atualizacao_precipitacao_48h",
views.LastUpdate48HRainView,
basename="ultima_atualizacao_precipitacao_48h",
r"ultima_atualizacao_precipitacao_96h",
views.LastUpdate96HRainView,
basename="ultima_atualizacao_precipitacao_96h",
)
219 changes: 195 additions & 24 deletions api_dados_rio/v2/clima_pluviometro/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,14 +349,14 @@ def list(self, request):
)


###### Views for last 24h
###### 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 24 horas",
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 24 horas, em milímetros (mm):
precipitada para as últimas 3 horas, em milímetros (mm):
```json
[
Expand All @@ -376,9 +376,9 @@ def list(self, request):
""",
),
)
class Last24HRainView(LoggingMixin, ViewSet):
class Last3HRainView(LoggingMixin, ViewSet):
def list(self, request):
data_key = "data_last_24h_rain"
data_key = "data_last_3h_rain"
try:
redis_url = getenv("REDIS_URL")
assert redis_url is not None
Expand All @@ -399,7 +399,7 @@ def list(self, request):
@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_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:
Expand All @@ -411,9 +411,94 @@ def list(self, request):
""",
),
)
class LastUpdate24HRainView(LoggingMixin, ViewSet):
class LastUpdate3HRainView(LoggingMixin, ViewSet):
def list(self, request):
last_update_key = "data_last_24h_rain_update"
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",
"chuva_15min": 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
Expand All @@ -434,14 +519,14 @@ def list(self, request):
)


###### Views for last 36h
###### 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 36 horas",
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 36 horas, em milímetros (mm):
precipitada para as últimas 12 horas, em milímetros (mm):
```json
[
Expand All @@ -461,9 +546,9 @@ def list(self, request):
""",
),
)
class Last36HRainView(LoggingMixin, ViewSet):
class Last12HRainView(LoggingMixin, ViewSet):
def list(self, request):
data_key = "data_last_36h_rain"
data_key = "data_last_12h_rain"
try:
redis_url = getenv("REDIS_URL")
assert redis_url is not None
Expand All @@ -484,7 +569,7 @@ def list(self, request):
@method_decorator(
name="list",
decorator=swagger_auto_schema(
operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 36 horas",
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:
Expand All @@ -496,9 +581,95 @@ def list(self, request):
""",
),
)
class LastUpdate36HRainView(LoggingMixin, ViewSet):
class LastUpdate12HRainView(LoggingMixin, ViewSet):
def list(self, request):
last_update_key = "data_last_36h_rain_update"
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",
"chuva_15min": 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
Expand All @@ -519,14 +690,14 @@ def list(self, request):
)


###### Views for last 48h
###### 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 48 horas",
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 48 horas, em milímetros (mm):
precipitada para as últimas 96 horas, em milímetros (mm):
```json
[
Expand All @@ -546,9 +717,9 @@ def list(self, request):
""",
),
)
class Last48HRainView(LoggingMixin, ViewSet):
class Last96HRainView(LoggingMixin, ViewSet):
def list(self, request):
data_key = "data_last_48h_rain"
data_key = "data_last_96h_rain"
try:
redis_url = getenv("REDIS_URL")
assert redis_url is not None
Expand All @@ -569,7 +740,7 @@ def list(self, request):
@method_decorator(
name="list",
decorator=swagger_auto_schema(
operation_summary="Retorna o horário de atualização dos dados de chuva das últimas 48 horas",
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:
Expand All @@ -581,9 +752,9 @@ def list(self, request):
""",
),
)
class LastUpdate48HRainView(LoggingMixin, ViewSet):
class LastUpdate96HRainView(LoggingMixin, ViewSet):
def list(self, request):
last_update_key = "data_last_48h_rain_update"
last_update_key = "data_last_96h_rain_update"
try:
redis_url = getenv("REDIS_URL")
assert redis_url is not None
Expand Down

0 comments on commit 8b6b68a

Please sign in to comment.