aboutsummaryrefslogtreecommitdiff
path: root/jb/decorators.py
blob: 9c7a31cf5396ac87725e8eabb518530fecff5fa4 (plain)
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
96
97
98
99
100
101
102
import logging

import boto3
from botocore.config import Config
from generalresearch.managers.base import Permission
from generalresearch.pg_helper import PostgresConfig
from generalresearch.redis_helper import RedisConfig
from influxdb import InfluxDBClient
from mypy_boto3_mturk import MTurkClient
from mypy_boto3_sns import SNSClient

from jb.config import settings
from jb.managers.amt import AMTManager
from jb.managers.assignment import AssignmentManager
from jb.managers.bonus import BonusManager
from jb.managers.gr_api import GRApiManager
from jb.managers.hit import HitManager, HitQuestionManager, HitTypeManager

redis_config = RedisConfig(
    dsn=settings.redis,
    decode_responses=True,
    socket_timeout=settings.redis_timeout,
    socket_connect_timeout=settings.redis_timeout,
)


def get_redis_config():
    return redis_config


def get_redis():
    return redis_config.create_redis_client()


# --- Logging ---

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s:%(name)s:%(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)
LOG = logging.getLogger("amtjb")

CLIENT_CONFIG = Config(
    # connect_timeout (float or int) – The time in seconds till a timeout
    # exception is thrown when attempting to make a connection. The default
    # is 60 seconds.
    connect_timeout=1,
    # read_timeout (float or int) – The time in seconds till a timeout
    # exception is thrown when attempting to read from a connection. The
    # default is 60 seconds.
    read_timeout=2.5,
)

gr_api_manager = GRApiManager(
    base_url=str(settings.gr_api_host),
    token=settings.gr_api_token.get_secret_value(),
    product_id=settings.product_id,
)

# We shouldn't use this directly. Use our AMTManager wrapper
AMT_CLIENT: MTurkClient = boto3.client(
    service_name="mturk",
    region_name="us-east-1",
    endpoint_url=str(settings.amt_endpoint),
    aws_access_key_id=settings.amt_access_id,
    aws_secret_access_key=settings.amt_secret_key,
    config=CLIENT_CONFIG,
)

SNS_CLIENT: SNSClient = boto3.client(
    service_name="sns",
    region_name="us-east-2",
    aws_access_key_id=settings.amt_access_id,
    aws_secret_access_key=settings.amt_secret_key,
    config=CLIENT_CONFIG,
)

pg_config = PostgresConfig(
    dsn=settings.amt_jb_db,
    connect_timeout=1,
    statement_timeout=1,
)

AMTM = AMTManager(amt_client=AMT_CLIENT)

HTM = HitTypeManager(
    pg_config=pg_config, permissions=[Permission.READ, Permission.CREATE]
)
HM = HitManager(pg_config=pg_config, permissions=[Permission.READ, Permission.CREATE])
HQM = HitQuestionManager(
    pg_config=pg_config, permissions=[Permission.READ, Permission.CREATE]
)
AM = AssignmentManager(
    pg_config=pg_config, permissions=[Permission.READ, Permission.CREATE]
)

BM = BonusManager(pg_config=pg_config, permissions=[Permission.READ, Permission.CREATE])

influx_client = None
if settings.influx_db:
    influx_client = InfluxDBClient.from_dsn(str(settings.influx_db))