class RobotListSerializer(serializers.ModelSerializer): strategy_name = serializers.CharField(read_only=True) asset_record = AssetRecordSerializer(read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) class Meta: model = Robot fields = [ # plain model fields "id", "name", "pair", "market_type", "enabled", "start_time", "ping_time", "target_currency", "base_currency", "quote_currency", "created_at", "modified_at", # related model fields "asset_record", # derived fields "duration_display", "duration_in_second", "duration", "strategy_name", "exchange", ]
class CredentialListSerializer(serializers.ModelSerializer): api_key = MaskedCharField(read_only=True, help_text="Partial masked API key.") secret = MaskedCharField(read_only=True, help_text="Partial masked secret key.") passphrase = MaskedCharField( read_only=True, mask_all=True, help_text="Completely masked passphrase." ) exchange = ExchangeSerializer(read_only=True) class Meta: model = Credential fields = [ "id", "note", "api_key", "secret", "passphrase", "test_net", "exchange", "created_at", "modified_at", ] extra_kwargs = { "test_net": {"help_text": "Is a credential of exchange test net or not."}, }
class RobotRetrieveSerializer(serializers.ModelSerializer): duration_display = DurationField(source="duration", read_only=True) asset_record = AssetRecordSerializer(read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) class Meta: model = Robot fields = [ # plain model fields "id", "name", "pair", "market_type", "enabled", "start_time", "ping_time", "target_currency", "base_currency", "quote_currency", "strategy_parameters", "created_at", "modified_at", # related fields "asset_record", # derived fields "duration_display", "strategy_spec_view", "exchange", ]
class CredentialSerializer(serializers.ModelSerializer): api_key_masked = CredentialKeyField(source="api_key", read_only=True) secret_masked = CredentialKeyField(source="secret", read_only=True) exchange_info = ExchangeSerializer(source="exchange", read_only=True) class Meta: model = Credential fields = [ "id", "note", "api_key", "secret", "api_key_masked", "secret_masked", "is_test_net", "exchange", "exchange_info", "created_at", ] read_only_fields = [ "created_at", ] extra_kwargs = { "exchange": { "write_only": True }, "api_key": { "write_only": True }, "secret": { "write_only": True }, }
class RobotRetrieveSerializer(serializers.ModelSerializer): included_serializers = { "exchange": ExchangeSerializer, "asset_record": AssetRecordSerializer, "user": UserSerializer, } user = UserSerializer(source="credential.user", read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) duration_display = DurationField(source="duration", read_only=True) asset_record = AssetRecordSerializer(read_only=True) strategy_parameters = serializers.JSONField(read_only=True) strategy_parameters_view = serializers.SerializerMethodField() class Meta: model = Robot fields = [ "id", "name", "pair", "target_currency", "base_currency", "quote_currency", "enabled", "start_time", "ping_time", "duration_display", "asset_record", "credential", "strategy_parameters", "strategy_parameters_view", "user", "exchange", "created_at", "modified_at", ] read_only_fields = [ "ping_time", "created_at", "modified_at", ] extra_kwargs = { "credential": {"write_only": True}, } class JSONAPIMeta: resource_name = "robots" included_resources = ["exchange", "asset_record", "user"] def get_strategy_parameters_view(self, obj: Robot) -> Dict[str, Any]: spec = obj.strategy.specification parameters = obj.strategy_parameters for parameter in spec["parameters"]: parameter["value"] = parameters[parameter["code"]] return spec
class RobotRetrieveSerializer(serializers.ModelSerializer): user = UserSerializer(source="credential.user", read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) duration_display = DurationField(source="duration", read_only=True) asset_record = AssetRecordSerializer(read_only=True) strategy_parameters = serializers.JSONField(read_only=True) strategy_view = serializers.SerializerMethodField() class Meta: model = Robot fields = [ "id", "name", "pair", "target_currency", "base_currency", "quote_currency", "enabled", "start_time", "ping_time", "duration_display", "asset_record", "credential", "strategy_template", "strategy_parameters", "strategy_view", "user", "exchange", "created_at", "modified_at", ] read_only_fields = [ "ping_time", "created_at", "modified_at", ] extra_kwargs = { "credential": { "write_only": True }, } def get_strategy_view(self, obj: Robot) -> Dict[str, Any]: spec = obj.strategy_template.parameter_spec parameters = obj.strategy_parameters for field in spec["fields"]: field["value"] = parameters["fields"][field["code"]] return spec
class CredentialListSerializer(serializers.ModelSerializer): api_key_masked = CredentialKeyField(source="api_key", read_only=True) secret_masked = CredentialKeyField(source="secret", read_only=True) exchange = ExchangeSerializer(read_only=True) class Meta: model = Credential fields = [ "id", "note", "api_key_masked", "secret_masked", "is_test_net", "exchange", "created_at", ]
class RobotListSerializer(serializers.ModelSerializer): included_serializers = { "exchange": ExchangeSerializer, "asset_record": AssetRecordSerializer, } duration_display = DurationField(source="duration", read_only=True) strategy_name = serializers.CharField(read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) class Meta: model = Robot fields = [ "id", "name", "pair", "market_type", "target_currency", "base_currency", "quote_currency", "enabled", "start_time", "ping_time", "duration_display", "asset_record", "credential", "strategy", "strategy_name", "exchange", "created_at", "modified_at", ] read_only_fields = [ "ping_time", "asset_record", "created_at", "modified_at", ] extra_kwargs = { "credential": {"write_only": True}, "strategy": {"write_only": True}, } class JSONAPIMeta: resource_name = "robots" included_resources = ["exchange", "asset_record"]
class RobotRetrieveSerializer(serializers.ModelSerializer): strategy_name = serializers.CharField(read_only=True) asset_record = AssetRecordSerializer(read_only=True) test_net = serializers.BooleanField(read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) strategy_store = serializers.JSONField() position_store = serializers.JSONField() order_store = serializers.JSONField() market_type_display = serializers.CharField( source="get_market_type_display") class Meta: model = Robot fields = [ # plain model fields "id", "name", "pair", "market_type", "enabled", "start_time", "ping_time", "target_currency", "base_currency", "quote_currency", "strategy_store", "position_store", "order_store", "created_at", "modified_at", # related fields "asset_record", # derived fields "duration_display", "duration_in_second", "strategy_name", "test_net", "exchange", "market_type_display", ]
class RobotListSerializer(serializers.ModelSerializer): exchange = ExchangeSerializer(source="credential.exchange", read_only=True) duration_display = DurationField(source="duration", read_only=True) asset_record = AssetRecordSerializer(read_only=True) strategy_template_name = serializers.CharField(read_only=True) class Meta: model = Robot fields = [ "id", "name", "pair", "target_currency", "base_currency", "quote_currency", "enabled", "start_time", "ping_time", "duration_display", "asset_record", "credential", "strategy_template", "strategy_template_name", "exchange", "created_at", "modified_at", ] read_only_fields = [ "ping_time", "created_at", "modified_at", ] extra_kwargs = { "credential": { "write_only": True }, "strategy_template": { "write_only": True }, }
class RobotConfigSerializer(serializers.ModelSerializer): user = UserSerializer(source="credential.user", read_only=True) exchange = ExchangeSerializer(source="credential.exchange", read_only=True) credential_keys = CredentialKeysSerializer(source="credential", read_only=True) is_test_net = serializers.BooleanField(source="credential.is_test_net", read_only=True) strategy_parameters = serializers.JSONField() class Meta: model = Robot fields = [ "id", "name", "pair", "target_currency", "enabled", "is_test_net", "user", "exchange", "credential_keys", "strategy_parameters", ]