blockapi 1.1.4__tar.gz → 1.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. {blockapi-1.1.4 → blockapi-1.2.0}/PKG-INFO +1 -1
  2. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/nft/test_unisat.py +56 -38
  3. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/nft/unisat.py +9 -8
  4. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi.egg-info/PKG-INFO +1 -1
  5. {blockapi-1.1.4 → blockapi-1.2.0}/setup.py +1 -1
  6. {blockapi-1.1.4 → blockapi-1.2.0}/LICENSE.md +0 -0
  7. {blockapi-1.1.4 → blockapi-1.2.0}/README.md +0 -0
  8. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/__init__.py +0 -0
  9. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/__init__.py +0 -0
  10. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/alethio.py +0 -0
  11. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/amberdata.py +0 -0
  12. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/binance.py +0 -0
  13. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/blockchaininfo.py +0 -0
  14. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/blockchainos.py +0 -0
  15. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/blockchair.py +0 -0
  16. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/blockcypher.py +0 -0
  17. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/blockonomics.py +0 -0
  18. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/blockscout.py +0 -0
  19. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/btc.py +0 -0
  20. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/cardanoexplorer.py +0 -0
  21. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/chainso.py +0 -0
  22. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/cosmos.py +0 -0
  23. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/cryptoid.py +0 -0
  24. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/dcrdata.py +0 -0
  25. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/digonchain.py +0 -0
  26. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/eospark.py +0 -0
  27. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/etherscan.py +0 -0
  28. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/ethplorer.py +0 -0
  29. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/greymass.py +0 -0
  30. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/insight.py +0 -0
  31. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/kyber.py +0 -0
  32. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/neoscan.py +0 -0
  33. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/ontology.py +0 -0
  34. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/solana.py +0 -0
  35. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/stellar.py +0 -0
  36. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/subscan.py +0 -0
  37. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/terra_money.py +0 -0
  38. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/trezor.py +0 -0
  39. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/tronscan.py +0 -0
  40. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/tzscan.py +0 -0
  41. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/tzstats.py +0 -0
  42. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/zchain.py +0 -0
  43. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/api/zensystem.py +0 -0
  44. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/services.py +0 -0
  45. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/__init__.py +0 -0
  46. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/__init__.py +0 -0
  47. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_amberdata.py +0 -0
  48. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_balances.py +0 -0
  49. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_binance.py +0 -0
  50. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_blockchainos.py +0 -0
  51. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_blockchair.py +0 -0
  52. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_blockscout.py +0 -0
  53. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_btc.py +0 -0
  54. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_cosmos.py +0 -0
  55. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_dcrdata.py +0 -0
  56. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_digonchain.py +0 -0
  57. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_insight.py +0 -0
  58. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_kyber.py +0 -0
  59. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_ontio.py +0 -0
  60. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_solana.py +0 -0
  61. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_subscan.py +0 -0
  62. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_terra_money.py +0 -0
  63. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_tronscan.py +0 -0
  64. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_tzscan.py +0 -0
  65. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/api/test_tzstats.py +0 -0
  66. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/test_blockapi.py +0 -0
  67. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/test_num.py +0 -0
  68. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/test_random_user_agent.py +0 -0
  69. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/__init__.py +0 -0
  70. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/__init__.py +0 -0
  71. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/conftest.py +0 -0
  72. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/covalenth/__init__.py +0 -0
  73. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/covalenth/test_ethereum.py +0 -0
  74. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/fake_sleep_provider.py +0 -0
  75. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/nft/__init__.py +0 -0
  76. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/nft/test_magic_eden.py +0 -0
  77. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/nft/test_opensea.py +0 -0
  78. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/nft/test_simple_hash.py +0 -0
  79. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/perpetual/__init__.py +0 -0
  80. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/perpetual/test_perpetual.py +0 -0
  81. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/synthetix/__init__.py +0 -0
  82. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/synthetix/test_synthetix.py +0 -0
  83. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_blockchainos.py +0 -0
  84. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_blockchair_btc.py +0 -0
  85. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_blockchair_doge.py +0 -0
  86. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_blockchair_ltc.py +0 -0
  87. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_cosmos.py +0 -0
  88. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_ethplorer.py +0 -0
  89. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_multisources.py +0 -0
  90. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_optimistic_etherscan.py +0 -0
  91. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_solana.py +0 -0
  92. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_subscan_polkadot.py +0 -0
  93. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_sui.py +0 -0
  94. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/api/test_trezor_btc.py +0 -0
  95. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_base.py +0 -0
  96. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_blockchain_api.py +0 -0
  97. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_blockchain_mapping.py +0 -0
  98. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_data.py +0 -0
  99. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_enumerate_classes.py +0 -0
  100. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_generic.py +0 -0
  101. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test/v2/test_models.py +0 -0
  102. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/test_data.py +0 -0
  103. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/utils/__init__.py +0 -0
  104. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/utils/address.py +0 -0
  105. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/utils/datetime.py +0 -0
  106. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/utils/ethereum.py +0 -0
  107. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/utils/num.py +0 -0
  108. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/utils/user_agent.py +0 -0
  109. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/__init__.py +0 -0
  110. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/__init__.py +0 -0
  111. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/blockchainos.py +0 -0
  112. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/blockchair.py +0 -0
  113. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/cosmos.py +0 -0
  114. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/__init__.py +0 -0
  115. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/arbitrum.py +0 -0
  116. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/astar.py +0 -0
  117. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/avalanche.py +0 -0
  118. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/axie.py +0 -0
  119. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/base.py +0 -0
  120. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/binance_smart_chain.py +0 -0
  121. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/ethereum.py +0 -0
  122. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/fantom.py +0 -0
  123. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/heco.py +0 -0
  124. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/iotex.py +0 -0
  125. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/klaytn.py +0 -0
  126. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/moonbeam.py +0 -0
  127. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/palm.py +0 -0
  128. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/polygon.py +0 -0
  129. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/covalenth/rsk.py +0 -0
  130. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/debank.py +0 -0
  131. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/debank_maps.py +0 -0
  132. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/ethplorer.py +0 -0
  133. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/nft/__init__.py +0 -0
  134. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/nft/magic_eden.py +0 -0
  135. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/nft/opensea.py +0 -0
  136. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/nft/simple_hash.py +0 -0
  137. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/optimistic_etherscan.py +0 -0
  138. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/perpetual/__init__.py +0 -0
  139. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/perpetual/perp_abi.py +0 -0
  140. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/perpetual/perpetual.py +0 -0
  141. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/solana.py +0 -0
  142. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/subscan.py +0 -0
  143. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/sui.py +0 -0
  144. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/synthetix/__init__.py +0 -0
  145. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/synthetix/synthetix.py +0 -0
  146. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/synthetix/synthetix_abi.py +0 -0
  147. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/terra.py +0 -0
  148. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/trezor.py +0 -0
  149. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/api/web3_utils.py +0 -0
  150. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/base.py +0 -0
  151. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/blockchain_mapping.py +0 -0
  152. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/coin_mapping.py +0 -0
  153. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/coins.py +0 -0
  154. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi/v2/models.py +0 -0
  155. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi.egg-info/SOURCES.txt +0 -0
  156. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi.egg-info/dependency_links.txt +0 -0
  157. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi.egg-info/requires.txt +0 -0
  158. {blockapi-1.1.4 → blockapi-1.2.0}/blockapi.egg-info/top_level.txt +0 -0
  159. {blockapi-1.1.4 → blockapi-1.2.0}/pyproject.toml +0 -0
  160. {blockapi-1.1.4 → blockapi-1.2.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: blockapi
3
- Version: 1.1.4
3
+ Version: 1.2.0
4
4
  Summary: BlockAPI library
5
5
  Home-page: https://github.com/crypkit/blockapi
6
6
  Author: Devmons s.r.o.
@@ -24,36 +24,62 @@ test_collection_id = (
24
24
  test_nft_type = BtcNftType.COLLECTION
25
25
 
26
26
 
27
- def test_fetch_collection(requests_mock, unisat_client, collection_stats):
27
+ def test_fetch_collection_icon_code(requests_mock, unisat_client, collection_stats):
28
+ """
29
+ UniSat sometimes sends only the icon *code* ― no URL.
30
+ We expect `parse_collection` to prepend the static CDN prefix automatically.
31
+ """
28
32
  requests_mock.post(
29
- f"{unisat_client.api_options.base_url}v3/market/collection/auction/collection_statistic",
33
+ f"{unisat_client.api_options.base_url}"
34
+ "v3/market/collection/auction/collection_statistic",
30
35
  text=collection_stats,
31
36
  )
32
37
 
33
- test_collection = "pixel-pepes"
34
- fetch_result = unisat_client.fetch_collection(test_collection)
35
- assert not fetch_result.errors, f"Fetch errors: {fetch_result.errors}"
38
+ fetch_result = unisat_client.fetch_collection("pixel-pepes")
39
+ assert not fetch_result.errors
40
+
41
+ parsed = unisat_client.parse_collection(fetch_result)
42
+ assert not parsed.errors and len(parsed.data) == 1
43
+
44
+ col: NftCollection = parsed.data[0]
45
+ assert col.ident == "pixel-pepes"
46
+ assert col.name == "Pixel Pepes"
47
+ assert (
48
+ col.image == "https://static.unisat.io/content/"
49
+ "47c1d21c508f6d49dfde64d958f14acd041244e1bb616f9b78114b8d9dc7b945i0"
50
+ )
51
+ assert str(col.total_stats.floor_price) == "0.0099"
52
+ assert str(col.total_stats.volume) == "0.399"
53
+
36
54
 
37
- parse_result = unisat_client.parse_collection(fetch_result)
38
- assert not parse_result.errors, f"Parse errors: {parse_result.errors}"
39
- assert len(parse_result.data) == 1
55
+ def test_fetch_collection_icon_full_url(
56
+ requests_mock, unisat_client, collection_stats_full_url
57
+ ):
58
+ """
59
+ UniSat may also deliver a *fully-qualified* icon URL.
60
+ In that case we should **not** touch the value.
61
+ """
62
+ requests_mock.post(
63
+ f"{unisat_client.api_options.base_url}"
64
+ "v3/market/collection/auction/collection_statistic",
65
+ text=collection_stats_full_url,
66
+ )
67
+
68
+ fetch_result = unisat_client.fetch_collection("rune-mania-miner")
69
+ assert not fetch_result.errors
40
70
 
41
- collection = parse_result.data[0]
42
- assert isinstance(collection, NftCollection)
43
- assert collection.ident == "pixel-pepes"
44
- assert collection.name == "Pixel Pepes"
71
+ parsed = unisat_client.parse_collection(fetch_result)
72
+ assert not parsed.errors and len(parsed.data) == 1
73
+
74
+ col: NftCollection = parsed.data[0]
75
+ assert col.ident == "rune-mania-miner"
76
+ assert col.name == "Rune Mania Miner"
45
77
  assert (
46
- collection.image
47
- == "https://static.unisat.io/content/47c1d21c508f6d49dfde64d958f14acd041244e1bb616f9b78114b8d9dc7b945i0"
78
+ col.image == "https://creator-hub-prod.s3.us-east-2.amazonaws.com/"
79
+ "ord-rmm_pfp_1708461604099.png"
48
80
  )
49
- assert not collection.is_disabled
50
- assert not collection.is_nsfw
51
- assert collection.blockchain == Blockchain.BITCOIN
52
- assert str(collection.total_stats.floor_price) == "0.0099"
53
- assert str(collection.total_stats.owners_count) == "1563"
54
- assert str(collection.total_stats.sales_count) == "20"
55
- assert str(collection.total_stats.volume) == "0.399"
56
- assert str(collection.total_stats.market_cap) == "15.4737"
81
+
82
+ assert str(col.total_stats.floor_price) == "0.0008"
57
83
 
58
84
 
59
85
  def test_fetch_listings(requests_mock, unisat_client, listings_data):
@@ -153,21 +179,6 @@ def unisat_client(fake_sleep_provider):
153
179
  return UnisatApi(api_key="test_key", sleep_provider=fake_sleep_provider)
154
180
 
155
181
 
156
- @pytest.fixture
157
- def inscription_data():
158
- return read_file('data/unisat/inscription_data.json')
159
-
160
-
161
- @pytest.fixture
162
- def inscription_data_edge_cases():
163
- return read_file('data/unisat/inscription_data_edge_cases.json')
164
-
165
-
166
- @pytest.fixture
167
- def collection_edge_cases():
168
- return read_file('data/unisat/collection_edge_cases.json')
169
-
170
-
171
182
  @pytest.fixture
172
183
  def listings_data():
173
184
  return read_file('data/unisat/listings.json')
@@ -180,4 +191,11 @@ def offers_data():
180
191
 
181
192
  @pytest.fixture
182
193
  def collection_stats():
183
- return read_file('data/unisat/collection_stats.json')
194
+ """Pixel Pepes – icon **code** only."""
195
+ return read_file("data/unisat/collection_stats.json")
196
+
197
+
198
+ @pytest.fixture
199
+ def collection_stats_full_url():
200
+ """Rune Mania Miner – icon is a full URL."""
201
+ return read_file("data/unisat/collection_stats_full_url.json")
@@ -293,23 +293,24 @@ class UnisatApi(BlockchainApi, INftParser, INftProvider):
293
293
  # Format the icon URL
294
294
  icon = stats.get("icon")
295
295
  icon_url = None
296
+
296
297
  if icon:
297
- icon_url = f"https://static.unisat.io/content/{icon}"
298
+ if icon.startswith(("http://", "https://")):
299
+ icon_url = icon
300
+ else:
301
+ icon_url = f"https://static.unisat.io/content/{icon.lstrip('/')}"
298
302
 
299
303
  floor_price = raw_to_decimals(stats.get("floorPrice", 0), self.coin.decimals)
300
304
 
301
305
  volume = raw_to_decimals(stats.get("btcValue", 0), self.coin.decimals)
302
306
 
303
- total_nfts = stats.get("total", 0)
304
- market_cap = floor_price * total_nfts if total_nfts else 0
305
-
306
307
  total_stats = NftCollectionTotalStats.from_api(
307
308
  volume=str(volume),
308
- sales_count=str(stats.get("listed", 0)),
309
- owners_count=str(total_nfts),
310
- market_cap=str(market_cap),
309
+ sales_count=None,
310
+ owners_count=None,
311
+ market_cap=None,
311
312
  floor_price=str(floor_price),
312
- average_price="0",
313
+ average_price=None,
313
314
  coin=self.coin,
314
315
  )
315
316
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: blockapi
3
- Version: 1.1.4
3
+ Version: 1.2.0
4
4
  Summary: BlockAPI library
5
5
  Home-page: https://github.com/crypkit/blockapi
6
6
  Author: Devmons s.r.o.
@@ -6,7 +6,7 @@ with open("README.md", "r") as f:
6
6
 
7
7
  PACKAGES = find_packages(where='.')
8
8
 
9
- __version__ = "1.1.4"
9
+ __version__ = "1.2.0"
10
10
 
11
11
  setuptools.setup(
12
12
  name='blockapi',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes