(self, market: dict)
| 3485 | return result |
| 3486 | |
| 3487 | def parse_market(self, market: dict) -> Market: |
| 3488 | swap = False |
| 3489 | future = False |
| 3490 | option = False |
| 3491 | underlying = self.safe_string(market, 'underlying') |
| 3492 | id = self.safe_string(market, 'symbol') |
| 3493 | optionParts = id.split('-') |
| 3494 | optionBase = self.safe_string(optionParts, 0) |
| 3495 | lowercaseId = self.safe_string_lower(market, 'symbol') |
| 3496 | baseId = self.safe_string(market, 'baseAsset', optionBase) |
| 3497 | quoteId = self.safe_string(market, 'quoteAsset') |
| 3498 | base = self.safe_currency_code(baseId) |
| 3499 | quote = self.safe_currency_code(quoteId) |
| 3500 | contractType = self.safe_string(market, 'contractType') |
| 3501 | contract = ('contractType' in market) |
| 3502 | expiry = self.safe_integer_2(market, 'deliveryDate', 'expiryDate') |
| 3503 | settleId = self.safe_string(market, 'marginAsset') |
| 3504 | if (contractType == 'PERPETUAL') or (expiry == 4133404800000): # some swap markets do not have contract type, eg: BTCST |
| 3505 | expiry = None |
| 3506 | swap = True |
| 3507 | elif underlying is not None: |
| 3508 | contract = True |
| 3509 | option = True |
| 3510 | settleId = 'USDT' if (settleId is None) else settleId |
| 3511 | elif expiry is not None: |
| 3512 | future = True |
| 3513 | settle = self.safe_currency_code(settleId) |
| 3514 | spot = not contract |
| 3515 | filters = self.safe_list(market, 'filters', []) |
| 3516 | filtersByType = self.index_by(filters, 'filterType') |
| 3517 | status = self.safe_string_2(market, 'status', 'contractStatus') |
| 3518 | contractSize = None |
| 3519 | fees = self.fees |
| 3520 | linear = None |
| 3521 | inverse = None |
| 3522 | symbol = base + '/' + quote |
| 3523 | strike = None |
| 3524 | if contract: |
| 3525 | if swap: |
| 3526 | symbol = symbol + ':' + settle |
| 3527 | elif future: |
| 3528 | symbol = symbol + ':' + settle + '-' + self.yymmdd(expiry) |
| 3529 | elif option: |
| 3530 | strike = self.number_to_string(self.parse_to_numeric(self.safe_string(market, 'strikePrice'))) |
| 3531 | symbol = symbol + ':' + settle + '-' + self.yymmdd(expiry) + '-' + strike + '-' + self.safe_string(optionParts, 3) |
| 3532 | contractSize = self.safe_number_2(market, 'contractSize', 'unit', self.parse_number('1')) |
| 3533 | linear = settle == quote |
| 3534 | inverse = settle == base |
| 3535 | feesType = 'linear' if linear else 'inverse' |
| 3536 | fees = self.safe_dict(self.fees, feesType, {}) |
| 3537 | active = (status == 'TRADING') |
| 3538 | if spot: |
| 3539 | permissions = self.safe_list(market, 'permissions', []) |
| 3540 | for j in range(0, len(permissions)): |
| 3541 | if permissions[j] == 'TRD_GRP_003': |
| 3542 | active = False |
| 3543 | break |
| 3544 | isMarginTradingAllowed = self.safe_bool(market, 'isMarginTradingAllowed', False) |
no test coverage detected