"""Settings for the MTG Scryfall connector.""" from odoo import api, fields, models from odoo.exceptions import UserError, ValidationError from .constants import ( DEFAULT_SCRYFALL_API_BASE_URL, DEFAULT_SCRYFALL_IMPORT_LANGUAGES, DEFAULT_SCRYFALL_TIMEOUT_SECONDS, DEFAULT_SCRYFALL_USER_AGENT, ) class ResConfigSettings(models.TransientModel): """Expose Scryfall connector defaults through Odoo settings.""" _inherit = "res.config.settings" mtg_scryfall_api_base_url = fields.Char( string="Scryfall API Base URL", config_parameter="mvd_tcg_mtg_scryfall.api_base_url", default=DEFAULT_SCRYFALL_API_BASE_URL, ) mtg_scryfall_timeout_seconds = fields.Integer( string="Scryfall Request Timeout (s)", config_parameter="mvd_tcg_mtg_scryfall.timeout_seconds", default=DEFAULT_SCRYFALL_TIMEOUT_SECONDS, ) mtg_scryfall_user_agent = fields.Char( string="User Agent", config_parameter="mvd_tcg_mtg_scryfall.user_agent", default=DEFAULT_SCRYFALL_USER_AGENT, ) mtg_scryfall_import_language_codes = fields.Char( string="Default Import Languages", config_parameter="mvd_tcg_mtg_scryfall.import_language_codes", default=",".join(DEFAULT_SCRYFALL_IMPORT_LANGUAGES), ) mtg_scryfall_import_max_cards_per_set = fields.Integer( string="Default Card Limit per Set", config_parameter="mvd_tcg_mtg_scryfall.import_max_cards_per_set", default=0, ) mtg_scryfall_import_include_tokens = fields.Boolean( string="Include Tokens by Default", config_parameter="mvd_tcg_mtg_scryfall.import_include_tokens", default=False, ) @api.constrains("mtg_scryfall_api_base_url") def _check_mtg_scryfall_api_base_url(self): """Restrict the connector to trusted HTTPS Scryfall API hosts.""" for settings in self: try: self.env["mvd.tcg.mtg.scryfall.api"]._validate_api_url( settings.mtg_scryfall_api_base_url ) except UserError as exc: raise ValidationError(str(exc)) from exc