generated from ONSdigital/ons-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
95 lines (75 loc) · 2.88 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import logging
import os
from dotenv import load_dotenv
import utils
from appconfig.config import Config
from services.blaise_service import BlaiseService
from services.validation_service import ValidationService
from utilities.custom_exceptions import (
BlaiseError,
ConfigError,
GuidError,
IngestError,
RequestError,
UsersError,
)
from utilities.logging import setup_logger
setup_logger()
def process_zip_file(data, _context):
try:
logging.info("Running Cloud Function - 'ingest data'")
validation_service = ValidationService()
file = data
bucket_name = file["bucket"]
file_path = file["name"]
if "/" in file["name"]:
file_name = file["name"].split("/")[1]
else:
file_name = file["name"]
# Only trigger on .zip files
if not file_name.lower().endswith(".zip"):
print(f"File {file_name} is not a zip file, skipping.")
return
logging.info(f"Processing ZIP file: {file_name} from bucket {bucket_name}")
# Config Handler
blaise_config = Config.from_env()
validation_service.validate_config(blaise_config)
blaise_server_park = blaise_config.blaise_server_park
questionnaire_name = utils.get_questionnaire_name(file_name)
if questionnaire_name is None:
print(f"Could not retrieve questionnaire name from {file_name}.")
return
# Blaise Handler
validation_service.validate_questionnaire_exists(
questionnaire_name, blaise_config
)
# Ingest Handler
blaise_service = BlaiseService(blaise_config)
logging.info(
f"Calling Ingest Service with "
f"server park: {blaise_server_park}, "
f"questionnaire name: {questionnaire_name}, "
f"file name: {file_path}"
)
blaise_service.get_ingest(blaise_server_park, questionnaire_name, file_path)
logging.info("Finished Running Cloud Function - 'ingest data'")
return f"Successfully ingested {file_name} from bucket", 200
except (RequestError, AttributeError, ValueError, ConfigError) as e:
error_message = f"Error occurred during Ingest: {e}"
logging.error(error_message)
return error_message, 400
except BlaiseError as e:
error_message = f"Error occurred during Ingest: {e}"
logging.error(error_message)
return error_message, 404
except (GuidError, UsersError, IngestError, Exception) as e:
error_message = f"Error occurred during Ingest: {e}"
logging.error(error_message)
return error_message, 500
if os.path.isfile("./.env"):
logging.info("Loading environment variables from dotenv file")
load_dotenv()
if __name__ == "__main__":
process_zip_file(
{"bucket": "ons-blaise-v2-dev-rr3-ingest", "name": "IPS2501A.zip"}, None
)