aboutsummaryrefslogtreecommitdiff
path: root/generalresearch/models/thl
diff options
context:
space:
mode:
Diffstat (limited to 'generalresearch/models/thl')
-rw-r--r--generalresearch/models/thl/__init__.py4
-rw-r--r--generalresearch/models/thl/category.py5
-rw-r--r--generalresearch/models/thl/contest/contest_entry.py13
-rw-r--r--generalresearch/models/thl/contest/raffle.py4
-rw-r--r--generalresearch/models/thl/finance.py15
-rw-r--r--generalresearch/models/thl/ledger.py2
-rw-r--r--generalresearch/models/thl/offerwall/__init__.py2
-rw-r--r--generalresearch/models/thl/offerwall/base.py2
-rw-r--r--generalresearch/models/thl/offerwall/cache.py2
-rw-r--r--generalresearch/models/thl/payout.py2
-rw-r--r--generalresearch/models/thl/product.py4
-rw-r--r--generalresearch/models/thl/profiling/marketplace.py4
-rw-r--r--generalresearch/models/thl/profiling/upk_question.py8
-rw-r--r--generalresearch/models/thl/profiling/upk_question_answer.py2
-rw-r--r--generalresearch/models/thl/profiling/user_info.py2
-rw-r--r--generalresearch/models/thl/profiling/user_question_answer.py8
-rw-r--r--generalresearch/models/thl/session.py4
-rw-r--r--generalresearch/models/thl/soft_pair.py2
-rw-r--r--generalresearch/models/thl/survey/__init__.py2
-rw-r--r--generalresearch/models/thl/survey/buyer.py2
-rw-r--r--generalresearch/models/thl/survey/condition.py2
-rw-r--r--generalresearch/models/thl/survey/model.py2
-rw-r--r--generalresearch/models/thl/survey/penalty.py2
-rw-r--r--generalresearch/models/thl/task_adjustment.py4
-rw-r--r--generalresearch/models/thl/user.py4
-rw-r--r--generalresearch/models/thl/user_profile.py2
-rw-r--r--generalresearch/models/thl/user_quality_event.py2
-rw-r--r--generalresearch/models/thl/user_streak.py2
-rw-r--r--generalresearch/models/thl/wallet/cashout_method.py4
-rw-r--r--generalresearch/models/thl/wallet/definitions.py87
-rw-r--r--generalresearch/models/thl/wallet/payout.py2
31 files changed, 138 insertions, 64 deletions
diff --git a/generalresearch/models/thl/__init__.py b/generalresearch/models/thl/__init__.py
index cb04b29..7f2b8a9 100644
--- a/generalresearch/models/thl/__init__.py
+++ b/generalresearch/models/thl/__init__.py
@@ -8,7 +8,7 @@ from decimal import Decimal
# BrokerageProductPayoutEvent,
# PayoutEvent,
# )
-# from generalresearch.models.thl.product import Product
+from generalresearch.models.thl.product import Product
# _ = (
# Product,
@@ -18,7 +18,7 @@ from decimal import Decimal
# POPFinancial,
# )
-# Product.model_rebuild()
+Product.model_rebuild()
# PayoutEvent.model_rebuild()
# BrokerageProductPayoutEvent.model_rebuild()
diff --git a/generalresearch/models/thl/category.py b/generalresearch/models/thl/category.py
index 32841a5..ebfc840 100644
--- a/generalresearch/models/thl/category.py
+++ b/generalresearch/models/thl/category.py
@@ -1,12 +1,11 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Any, Self
+from typing import Any, Self
from uuid import uuid4
from pydantic import BaseModel, Field, PositiveInt, model_validator
-if TYPE_CHECKING:
- from generalresearch.models.custom_types import UUIDStr
+from generalresearch.models.custom_types import UUIDStr
class Category(BaseModel, frozen=True):
diff --git a/generalresearch/models/thl/contest/contest_entry.py b/generalresearch/models/thl/contest/contest_entry.py
index a57b2df..17b288b 100644
--- a/generalresearch/models/thl/contest/contest_entry.py
+++ b/generalresearch/models/thl/contest/contest_entry.py
@@ -12,10 +12,12 @@ from pydantic import (
)
from generalresearch.currency import USDCent
+from generalresearch.models.thl.contest.definitions import (
+ ContestEntryType,
+)
if TYPE_CHECKING:
from generalresearch.models.custom_types import AwareDatetimeISO, UUIDStr
- from generalresearch.models.thl.contest.definitions import ContestEntryType
from generalresearch.models.thl.user import User
@@ -59,10 +61,7 @@ class ContestEntry(BaseModel):
@model_validator(mode="before")
@classmethod
- def validate_amount_type(cls, data: dict) -> dict:
- from generalresearch.models.thl.contest.definitions import (
- ContestEntryType,
- )
+ def validate_amount_type(cls, data: dict[str, Any]) -> dict[str, Any]:
amount = data.get("amount")
entry_type = data.get("entry_type")
@@ -71,6 +70,7 @@ class ContestEntry(BaseModel):
assert isinstance(amount, int) and not isinstance(
amount, USDCent
), "amount must be int in ContestEntryType.COUNT"
+
elif entry_type == ContestEntryType.CASH:
# This may be coming from the DB, in which case it is an int.
data["amount"] = USDCent(data["amount"])
@@ -79,9 +79,6 @@ class ContestEntry(BaseModel):
@computed_field()
def amount_str(self) -> str:
- from generalresearch.models.thl.contest.definitions import (
- ContestEntryType,
- )
if self.entry_type == ContestEntryType.COUNT:
return str(self.amount)
diff --git a/generalresearch/models/thl/contest/raffle.py b/generalresearch/models/thl/contest/raffle.py
index b944740..21bc481 100644
--- a/generalresearch/models/thl/contest/raffle.py
+++ b/generalresearch/models/thl/contest/raffle.py
@@ -26,11 +26,9 @@ from generalresearch.models.thl.contest.contest import (
ContestBase,
ContestUserView,
)
-from generalresearch.models.thl.contest.contest_entry import (
- ContestEntryType,
-)
from generalresearch.models.thl.contest.definitions import (
ContestEndReason,
+ ContestEntryType,
ContestPrizeKind,
ContestStatus,
ContestType,
diff --git a/generalresearch/models/thl/finance.py b/generalresearch/models/thl/finance.py
index 4b750da..9e7d2c3 100644
--- a/generalresearch/models/thl/finance.py
+++ b/generalresearch/models/thl/finance.py
@@ -27,8 +27,9 @@ adjustment_example = random.randint(-1_000, 50 * 100)
if TYPE_CHECKING:
from generalresearch.currency import USDCent
+ from generalresearch.managers.thl.product import ProductManager
from generalresearch.models.thl.ledger import LedgerAccount
- from generalresearch.pg_helper import PostgresConfig
+ from generalresearch.models.thl.product import Product
class AdjustmentType(BaseModel):
@@ -516,7 +517,7 @@ class ProductBalances(BaseModel):
if isinstance(input_data, pd.Series):
return ProductBalances.model_validate(input_data.to_dict())
- elif isinstance(input_data, pd.DataFrame):
+ else:
assert isinstance(input_data.index, pd.DatetimeIndex), "Invalid input data"
# The pop merge is grouped by 1min intervals. Therefore, if we take
@@ -529,9 +530,6 @@ class ProductBalances(BaseModel):
pb.last_event = pq_last_event_close.to_pydatetime()
return pb
- else:
- raise NotImplementedError("Can't handle this input")
-
def __str__(self) -> str:
return (
f"Product: {self.product_id or '—'}\n"
@@ -834,19 +832,17 @@ class BusinessBalances(BaseModel):
def from_pandas(
input_data: pd.DataFrame,
accounts: list[LedgerAccount],
- thl_pg_config: PostgresConfig,
+ product_manager: ProductManager,
) -> BusinessBalances:
LOG.debug(f"BusinessBalances.from_pandas(input_data={input_data.shape})")
from generalresearch.incite.schemas.mergers.pop_ledger import (
numerical_col_names,
)
- from generalresearch.managers.thl.product import ProductManager
from generalresearch.models.thl.ledger import (
AccountType,
Direction,
)
- from generalresearch.models.thl.product import Product
# Validate the input accounts
assert len(accounts) > 0, "Must provide accounts"
@@ -872,8 +868,7 @@ class BusinessBalances(BaseModel):
# Sort the ProductBalances so that they're always in a consistent
# sorted order.
- pm = ProductManager(pg_config=thl_pg_config)
- products: list[Product] = pm.get_by_uuids(
+ products: list[Product] = product_manager.get_by_uuids(
product_uuids=[pb.product_id for pb in product_balances]
)
sorted_products_uuids = [
diff --git a/generalresearch/models/thl/ledger.py b/generalresearch/models/thl/ledger.py
index c38e83b..fbfb6bb 100644
--- a/generalresearch/models/thl/ledger.py
+++ b/generalresearch/models/thl/ledger.py
@@ -354,7 +354,7 @@ class LedgerTransaction(BaseModel):
def to_user_tx(
self, user_account: LedgerAccount, product_id: str, payout_format: str
):
- from generalresearch.models.thl.wallet import PayoutType
+ from generalresearch.models.thl.wallet.definitions import PayoutType
d = self.model_dump(include={"created"})
d["tx_type"] = self.metadata.get("tx_type")
diff --git a/generalresearch/models/thl/offerwall/__init__.py b/generalresearch/models/thl/offerwall/__init__.py
index 0c3d51d..599cc1d 100644
--- a/generalresearch/models/thl/offerwall/__init__.py
+++ b/generalresearch/models/thl/offerwall/__init__.py
@@ -14,8 +14,8 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import Source
from generalresearch.models.custom_types import IPvAnyAddressStr
+from generalresearch.models.definitions import Source
from generalresearch.models.thl.locales import (
CountryISO,
LanguageISO,
diff --git a/generalresearch/models/thl/offerwall/base.py b/generalresearch/models/thl/offerwall/base.py
index 1d41ef2..fb0bc77 100644
--- a/generalresearch/models/thl/offerwall/base.py
+++ b/generalresearch/models/thl/offerwall/base.py
@@ -19,7 +19,7 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import Source
+from generalresearch.models.definitions import Source
from generalresearch.models.legacy.bucket import (
Bucket as LegacyBucket,
)
diff --git a/generalresearch/models/thl/offerwall/cache.py b/generalresearch/models/thl/offerwall/cache.py
index aa18014..2a733c9 100644
--- a/generalresearch/models/thl/offerwall/cache.py
+++ b/generalresearch/models/thl/offerwall/cache.py
@@ -6,8 +6,8 @@ from typing import TYPE_CHECKING, Any
from pydantic import BaseModel, Field
if TYPE_CHECKING:
- from generalresearch.models import Source
from generalresearch.models.custom_types import AwareDatetimeISO, UUIDStr
+ from generalresearch.models.definitions import Source
from generalresearch.models.thl.offerwall import OfferWallRequest
from generalresearch.models.thl.offerwall.base import (
OfferwallBase,
diff --git a/generalresearch/models/thl/payout.py b/generalresearch/models/thl/payout.py
index 9902af3..128723b 100644
--- a/generalresearch/models/thl/payout.py
+++ b/generalresearch/models/thl/payout.py
@@ -18,7 +18,7 @@ from pydantic.json_schema import SkipJsonSchema
from generalresearch.currency import USDCent
from generalresearch.models.thl.definitions import PayoutStatus
-from generalresearch.models.thl.wallet import PayoutType
+from generalresearch.models.thl.wallet.definitions import PayoutType
if TYPE_CHECKING:
from generalresearch.models.custom_types import (
diff --git a/generalresearch/models/thl/product.py b/generalresearch/models/thl/product.py
index 988b72d..346a98b 100644
--- a/generalresearch/models/thl/product.py
+++ b/generalresearch/models/thl/product.py
@@ -38,13 +38,13 @@ from pydantic.json_schema import SkipJsonSchema
from generalresearch.currency import USDCent
from generalresearch.decorators import LOG
-from generalresearch.models import Source
from generalresearch.models.custom_types import (
AwareDatetimeISO,
CountryISOLike,
HttpsUrlStr,
UUIDStr,
)
+from generalresearch.models.definitions import Source
from generalresearch.models.thl.finance import (
POPFinancial,
ProductBalances,
@@ -63,7 +63,7 @@ from generalresearch.models.thl.payout_format import (
examples as payout_format_examples,
)
from generalresearch.models.thl.supplier_tag import SupplierTag
-from generalresearch.models.thl.wallet import PayoutType
+from generalresearch.models.thl.wallet.definitions import PayoutType
from generalresearch.models.utils import decimal_to_usd_cents
from generalresearch.redis_helper import RedisConfig
diff --git a/generalresearch/models/thl/profiling/marketplace.py b/generalresearch/models/thl/profiling/marketplace.py
index 0c1e39b..23501e3 100644
--- a/generalresearch/models/thl/profiling/marketplace.py
+++ b/generalresearch/models/thl/profiling/marketplace.py
@@ -7,16 +7,16 @@ from typing import TYPE_CHECKING, Any
from pydantic import BaseModel, ConfigDict, Field, PositiveInt, computed_field
-from generalresearch.models import MAX_INT32
+from generalresearch.models.definitions import MAX_INT32
if TYPE_CHECKING:
- from generalresearch.models import Source
from generalresearch.models.custom_types import (
AwareDatetimeISO,
CountryISOLike,
LanguageISOLike,
UUIDStr,
)
+ from generalresearch.models.definitions import Source
from generalresearch.models.thl.locales import CountryISO, LanguageISO
diff --git a/generalresearch/models/thl/profiling/upk_question.py b/generalresearch/models/thl/profiling/upk_question.py
index a73683c..9c7383a 100644
--- a/generalresearch/models/thl/profiling/upk_question.py
+++ b/generalresearch/models/thl/profiling/upk_question.py
@@ -5,7 +5,7 @@ import json
import re
from enum import StrEnum
from functools import cached_property
-from typing import TYPE_CHECKING, Annotated, Any, Literal
+from typing import Annotated, Any, Literal
from pydantic import (
BaseModel,
@@ -17,12 +17,10 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import Source
+from generalresearch.models.custom_types import UUIDStr
+from generalresearch.models.definitions import Source
from generalresearch.models.thl.category import Category
-if TYPE_CHECKING:
- from generalresearch.models.custom_types import UUIDStr
-
class UPKImportance(BaseModel):
task_count: int | None = Field(
diff --git a/generalresearch/models/thl/profiling/upk_question_answer.py b/generalresearch/models/thl/profiling/upk_question_answer.py
index 41895b1..4d07970 100644
--- a/generalresearch/models/thl/profiling/upk_question_answer.py
+++ b/generalresearch/models/thl/profiling/upk_question_answer.py
@@ -13,7 +13,7 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import MAX_INT32
+from generalresearch.models.definitions import MAX_INT32
from generalresearch.models.thl.profiling.upk_property import (
Cardinality,
PropertyType,
diff --git a/generalresearch/models/thl/profiling/user_info.py b/generalresearch/models/thl/profiling/user_info.py
index c82e2d2..40b4b17 100644
--- a/generalresearch/models/thl/profiling/user_info.py
+++ b/generalresearch/models/thl/profiling/user_info.py
@@ -6,8 +6,8 @@ from pydantic import BaseModel, ConfigDict, Field
from pydantic.json_schema import SkipJsonSchema
if TYPE_CHECKING:
- from generalresearch.models import Source
from generalresearch.models.custom_types import AwareDatetimeISO
+ from generalresearch.models.definitions import Source
from generalresearch.models.thl.profiling.user_question_answer import (
MarketplaceResearchProfileQuestion,
)
diff --git a/generalresearch/models/thl/profiling/user_question_answer.py b/generalresearch/models/thl/profiling/user_question_answer.py
index b1868b3..a7c2194 100644
--- a/generalresearch/models/thl/profiling/user_question_answer.py
+++ b/generalresearch/models/thl/profiling/user_question_answer.py
@@ -14,12 +14,12 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import MAX_INT32
+from generalresearch.models.custom_types import AwareDatetimeISO, UUIDStr
+from generalresearch.models.definitions import MAX_INT32
+from generalresearch.models.thl.locales import CountryISO, LanguageISO
if TYPE_CHECKING:
- from generalresearch.models import Source
- from generalresearch.models.custom_types import AwareDatetimeISO, UUIDStr
- from generalresearch.models.thl.locales import CountryISO, LanguageISO
+ from generalresearch.models.definitions import Source
from generalresearch.models.thl.profiling.upk_question import UpkQuestion
diff --git a/generalresearch/models/thl/session.py b/generalresearch/models/thl/session.py
index 871e5c4..404cff7 100644
--- a/generalresearch/models/thl/session.py
+++ b/generalresearch/models/thl/session.py
@@ -18,7 +18,7 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import Source
+from generalresearch.models.definitions import Source
from generalresearch.models.thl import (
decimal_to_int_cents,
int_cents_to_decimal,
@@ -37,13 +37,13 @@ if TYPE_CHECKING:
from generalresearch.managers.thl.ledger_manager.thl_ledger import (
ThlLedgerManager,
)
- from generalresearch.models import DeviceType
from generalresearch.models.custom_types import (
AwareDatetimeISO,
EnumNameSerializer,
IPvAnyAddressStr,
UUIDStr,
)
+ from generalresearch.models.definitions import DeviceType
from generalresearch.models.legacy.bucket import Bucket
from generalresearch.models.thl.definitions import (
ReportValue,
diff --git a/generalresearch/models/thl/soft_pair.py b/generalresearch/models/thl/soft_pair.py
index 313d374..c0bf2dd 100644
--- a/generalresearch/models/thl/soft_pair.py
+++ b/generalresearch/models/thl/soft_pair.py
@@ -5,7 +5,7 @@ from enum import Enum
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from generalresearch.models import Source
+ from generalresearch.models.definitions import Source
from generalresearch.models.dynata.survey import DynataCondition
from generalresearch.models.thl.survey.condition import (
MarketplaceCondition,
diff --git a/generalresearch/models/thl/survey/__init__.py b/generalresearch/models/thl/survey/__init__.py
index d0f2b33..76f819e 100644
--- a/generalresearch/models/thl/survey/__init__.py
+++ b/generalresearch/models/thl/survey/__init__.py
@@ -18,7 +18,7 @@ from generalresearch.models.thl.survey.condition import (
)
if TYPE_CHECKING:
- from generalresearch.models import Source
+ from generalresearch.models.definitions import Source
from generalresearch.models.thl.locales import (
CountryISO,
CountryISOs,
diff --git a/generalresearch/models/thl/survey/buyer.py b/generalresearch/models/thl/survey/buyer.py
index 26846d3..ef309d1 100644
--- a/generalresearch/models/thl/survey/buyer.py
+++ b/generalresearch/models/thl/survey/buyer.py
@@ -16,7 +16,7 @@ from pydantic import (
)
from scipy.stats import beta as beta_dist
-from generalresearch.models import Source
+from generalresearch.models.definitions import Source
if TYPE_CHECKING:
from generalresearch.models.custom_types import (
diff --git a/generalresearch/models/thl/survey/condition.py b/generalresearch/models/thl/survey/condition.py
index 514ee64..90cf27b 100644
--- a/generalresearch/models/thl/survey/condition.py
+++ b/generalresearch/models/thl/survey/condition.py
@@ -17,7 +17,7 @@ from pydantic import (
model_validator,
)
-from generalresearch.models import LogicalOperator
+from generalresearch.models.definitions import LogicalOperator
MarketplaceConditionHash = Annotated[
str, StringConstraints(min_length=7, max_length=7, pattern=r"^[a-f0-9]+$")
diff --git a/generalresearch/models/thl/survey/model.py b/generalresearch/models/thl/survey/model.py
index 9fa3d8e..8986e4d 100644
--- a/generalresearch/models/thl/survey/model.py
+++ b/generalresearch/models/thl/survey/model.py
@@ -21,7 +21,6 @@ from generalresearch.models.thl.definitions import StatusCode1
from generalresearch.models.thl.pagination import Page
if TYPE_CHECKING:
- from generalresearch.models import Source
from generalresearch.models.custom_types import (
AwareDatetimeISO,
CountryISOLike,
@@ -29,6 +28,7 @@ if TYPE_CHECKING:
PropertyCode,
SurveyKey,
)
+ from generalresearch.models.definitions import Source
from generalresearch.models.thl.category import Category
from generalresearch.models.thl.definitions import Status
diff --git a/generalresearch/models/thl/survey/penalty.py b/generalresearch/models/thl/survey/penalty.py
index 54edb94..25e07cf 100644
--- a/generalresearch/models/thl/survey/penalty.py
+++ b/generalresearch/models/thl/survey/penalty.py
@@ -7,11 +7,11 @@ from typing import TYPE_CHECKING, Annotated, Literal
from pydantic import BaseModel, ConfigDict, Field, TypeAdapter
if TYPE_CHECKING:
- from generalresearch.models import Source
from generalresearch.models.custom_types import (
AwareDatetimeISO,
UUIDStr,
)
+ from generalresearch.models.definitions import Source
class SurveyPenalty(BaseModel, abc.ABC):
diff --git a/generalresearch/models/thl/task_adjustment.py b/generalresearch/models/thl/task_adjustment.py
index fa5592e..fee2007 100644
--- a/generalresearch/models/thl/task_adjustment.py
+++ b/generalresearch/models/thl/task_adjustment.py
@@ -7,14 +7,14 @@ from uuid import uuid4
from pydantic import BaseModel, ConfigDict, Field, PositiveInt, model_validator
-from generalresearch.models import MAX_INT32
+from generalresearch.models.definitions import MAX_INT32
from generalresearch.models.thl.definitions import (
WallAdjustedStatus,
)
if TYPE_CHECKING:
- from generalresearch.models import Source
from generalresearch.models.custom_types import AwareDatetimeISO, UUIDStr
+ from generalresearch.models.definitions import Source
class TaskAdjustmentEvent(BaseModel):
diff --git a/generalresearch/models/thl/user.py b/generalresearch/models/thl/user.py
index 302aa72..1f88dc6 100644
--- a/generalresearch/models/thl/user.py
+++ b/generalresearch/models/thl/user.py
@@ -20,7 +20,7 @@ from pydantic import (
)
from sentry_sdk import set_tag, set_user
-from generalresearch.models import MAX_INT32
+from generalresearch.models.definitions import MAX_INT32
if TYPE_CHECKING:
from generalresearch.managers.thl.ledger_manager.thl_ledger import (
@@ -253,7 +253,7 @@ class User(BaseModel):
# # Delete from db.thl-marketplaces
# We need DELETE credentials for all these...
- # from generalresearch.models import Source
+ # from generalresearch.models.definitions import Source
# mp_db_table = {
# Source.SPECTRUM: "`thl-spectrum`.`spectrum_marketresearchprofilequestion`",
# Source.INNOVATE: "`thl-innovate`.`innovate_marketresearchprofilequestion`",
diff --git a/generalresearch/models/thl/user_profile.py b/generalresearch/models/thl/user_profile.py
index 2dc19b7..c47c6f2 100644
--- a/generalresearch/models/thl/user_profile.py
+++ b/generalresearch/models/thl/user_profile.py
@@ -13,7 +13,7 @@ from pydantic import (
)
from pydantic.json_schema import SkipJsonSchema
-from generalresearch.models import MAX_INT32, Source
+from generalresearch.models.definitions import MAX_INT32, Source
if TYPE_CHECKING:
from generalresearch.models.custom_types import UUIDStr
diff --git a/generalresearch/models/thl/user_quality_event.py b/generalresearch/models/thl/user_quality_event.py
index 5438740..8c2e25f 100644
--- a/generalresearch/models/thl/user_quality_event.py
+++ b/generalresearch/models/thl/user_quality_event.py
@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Literal
from pydantic import BaseModel, Field, PositiveInt
-from generalresearch.models import MAX_INT32, Source
+from generalresearch.models.definitions import MAX_INT32, Source
from generalresearch.utils.enum import ReprEnumMeta
if TYPE_CHECKING:
diff --git a/generalresearch/models/thl/user_streak.py b/generalresearch/models/thl/user_streak.py
index 6cd853a..4c09d13 100644
--- a/generalresearch/models/thl/user_streak.py
+++ b/generalresearch/models/thl/user_streak.py
@@ -19,7 +19,7 @@ from pydantic import (
from pydantic.json_schema import SkipJsonSchema
from generalresearch.managers.leaderboard import country_timezone
-from generalresearch.models import MAX_INT32
+from generalresearch.models.definitions import MAX_INT32
if TYPE_CHECKING:
from generalresearch.models.thl.locales import CountryISO
diff --git a/generalresearch/models/thl/wallet/cashout_method.py b/generalresearch/models/thl/wallet/cashout_method.py
index 1db85e8..9383c36 100644
--- a/generalresearch/models/thl/wallet/cashout_method.py
+++ b/generalresearch/models/thl/wallet/cashout_method.py
@@ -19,7 +19,7 @@ from pydantic import (
from generalresearch.models.legacy.api_status import StatusResponse
from generalresearch.models.thl.definitions import PayoutStatus
-from generalresearch.models.thl.wallet import PayoutType
+from generalresearch.models.thl.wallet.definitions import PayoutType
from generalresearch.utils.enum import ReprEnumMeta
if TYPE_CHECKING:
@@ -31,7 +31,7 @@ if TYPE_CHECKING:
)
from generalresearch.models.thl.locales import CountryISO
from generalresearch.models.thl.user import BPUIDStr, User
- from generalresearch.models.thl.wallet import Currency
+ from generalresearch.models.thl.wallet.definitions import Currency
logger = logging.getLogger()
diff --git a/generalresearch/models/thl/wallet/definitions.py b/generalresearch/models/thl/wallet/definitions.py
new file mode 100644
index 0000000..2d1eb8d
--- /dev/null
+++ b/generalresearch/models/thl/wallet/definitions.py
@@ -0,0 +1,87 @@
+from enum import StrEnum
+
+from generalresearch.utils.enum import ReprEnumMeta
+
+
+class PayoutType(StrEnum, metaclass=ReprEnumMeta):
+ """
+ The method in which the requested payout is delivered.
+ """
+
+ # The max size of the db field that holds this value is 14, so please
+ # don't add new values longer than that!
+
+ # User is paid out to their personal PayPal email address
+ PAYPAL = "PAYPAL"
+ # User is paid out via a Tango Gift Card
+ TANGO = "TANGO"
+ # DWOLLA
+ DWOLLA = "DWOLLA"
+ # A payment is made to a bank account using ACH
+ ACH = "ACH"
+ # A payment is made to a bank account using ACH
+ WIRE = "WIRE"
+ # A payment is made in cash and mailed to the user.
+ CASH_IN_MAIL = "CASH_IN_MAIL"
+ # A payment is made as a prize with some monetary value
+ PRIZE = "PRIZE"
+
+ # This is used to designate either AMT_BONUS or AMT_HIT
+ AMT = "AMT"
+ # Amazon Mechanical Turk as a Bonus
+ AMT_BONUS = "AMT_BONUS"
+ # Amazon Mechanical Turk for a HIT
+ AMT_HIT = "AMT_ASSIGNMENT"
+ AMT_ASSIGNMENT = "AMT_ASSIGNMENT"
+
+
+class Currency(StrEnum):
+ # United States Dollar
+ USD = "USD"
+ # Canadian Dollar
+ CAD = "CAD"
+ # British Pound Sterling
+ GBP = "GBP"
+ # Euro
+ EUR = "EUR"
+ # Indian Rupee
+ INR = "INR"
+ # Australian Dollar
+ AUD = "AUD"
+ # Polish Zloty
+ PLN = "PLN"
+ # Swedish Krona
+ SEK = "SEK"
+ # Singapore Dollar
+ SGD = "SGD"
+ # Mexican Peso
+ MXN = "MXN"
+
+
+CURRENCY_FORMATTER = {
+ "USD": lambda x: f"${x / 100:,.2f}",
+ "CAD": lambda x: f"${x / 100:,.2f} CAD",
+ "GBP": lambda x: f"{x / 100:,.2f} £",
+ "EUR": lambda x: f"€{x / 100:,.2f}",
+ "INR": lambda x: f"₹{x / 100:,.2f}",
+ "AUD": lambda x: f"${x / 100:,.2f} AUD",
+ "PLN": lambda x: f"{x / 100:,.2f} zł",
+ "SEK": lambda x: f"{x / 100:,.2f} kr",
+ "SGD": lambda x: f"${x / 100:,.2f} SGD",
+ "MXN": lambda x: f"${x / 100:,.2f} MXN",
+}
+
+# The max value user can redeem in one go in foreign currencies. should be < $250
+# in order to avoid exchange rate issues
+CURRENCY_MAX_VALUE = {
+ "USD": 250,
+ "CAD": 200,
+ "GBP": 100,
+ "EUR": 100,
+ "INR": 10000,
+ "AUD": 200,
+ "PLN": 500,
+ "SEK": 1000,
+ "SGD": 200,
+ "MXN": 4000,
+}
diff --git a/generalresearch/models/thl/wallet/payout.py b/generalresearch/models/thl/wallet/payout.py
index 7301b31..79c50e1 100644
--- a/generalresearch/models/thl/wallet/payout.py
+++ b/generalresearch/models/thl/wallet/payout.py
@@ -16,7 +16,7 @@ from pydantic import (
from generalresearch.currency import USDCent
from generalresearch.models.thl.definitions import PayoutStatus
-from generalresearch.models.thl.wallet import PayoutType
+from generalresearch.models.thl.wallet.definitions import PayoutType
if TYPE_CHECKING:
from generalresearch.models.custom_types import AwareDatetimeISO, UUIDStr