From c901bb92673e47e7be599a009a4f0d5b8d973ef2 Mon Sep 17 00:00:00 2001 From: jose-donato <43375532+jose-donato@users.noreply.github.com> Date: Thu, 30 Dec 2021 11:34:25 +0000 Subject: [PATCH] NFT feature opensea collection statistics (#1109) * added statistics for opensea collection feature * trying to fix json error * trying to fix json error * fixing vcr tests * print to include 2 decimal cases * fixing tests * added to script, date format and require * fix: linting --- .../cryptocurrency/nft/nft_controller.py | 53 ++++-- .../cryptocurrency/nft/opensea_model.py | 72 +++++++ .../cryptocurrency/nft/opensea_view.py | 44 +++++ .../onchain/onchain_controller.py | 5 +- scripts/test_crypto_nft.gst | 1 + ...est_get_collection_stats[alien-frens].yaml | 119 ++++++++++++ ...est_get_collection_stats[cryptopunks].yaml | 149 +++++++++++++++ ...llection_stats[mutant-ape-yacht-club].yaml | 178 ++++++++++++++++++ .../test_display_collection_stats.yaml | 176 +++++++++++++++++ ...test_get_collection_stats[alien-frens].csv | 19 ++ ...test_get_collection_stats[cryptopunks].csv | 19 ++ ...ollection_stats[mutant-ape-yacht-club].csv | 19 ++ .../cryptocurrency/nft/test_opensea_model.py | 17 ++ .../cryptocurrency/nft/test_opensea_view.py | 9 + .../test_display_collection_stats.txt | 0 .../cryptocurrency/nft/stats/_index.md | 11 ++ 16 files changed, 875 insertions(+), 16 deletions(-) create mode 100644 gamestonk_terminal/cryptocurrency/nft/opensea_model.py create mode 100644 gamestonk_terminal/cryptocurrency/nft/opensea_view.py create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[alien-frens].yaml create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[cryptopunks].yaml create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].yaml create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_view/test_display_collection_stats.yaml create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[alien-frens].csv create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[cryptopunks].csv create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].csv create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_model.py create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_view.py create mode 100644 tests/gamestonk_terminal/cryptocurrency/nft/txt/test_opensea_view/test_display_collection_stats.txt create mode 100644 website/content/cryptocurrency/nft/stats/_index.md diff --git a/gamestonk_terminal/cryptocurrency/nft/nft_controller.py b/gamestonk_terminal/cryptocurrency/nft/nft_controller.py index a29773c6ec9..cbdfa275208 100644 --- a/gamestonk_terminal/cryptocurrency/nft/nft_controller.py +++ b/gamestonk_terminal/cryptocurrency/nft/nft_controller.py @@ -14,7 +14,7 @@ from gamestonk_terminal.helper_funcs import ( parse_known_args_and_warn, ) -from gamestonk_terminal.cryptocurrency.nft import nftcalendar_view +from gamestonk_terminal.cryptocurrency.nft import nftcalendar_view, opensea_view class NFTController: @@ -34,12 +34,7 @@ class NFTController: "reset", ] - CHOICES_COMMANDS = [ - "today", - "upcoming", - "ongoing", - "newest", - ] + CHOICES_COMMANDS = ["today", "upcoming", "ongoing", "newest", "stats"] CHOICES += CHOICES_COMMANDS @@ -64,13 +59,13 @@ class NFTController: """Print help""" help_text = """ -Non Fungible Tokens Menu: - nftcalendar.io: today today's NFT drops upcoming upcoming NFT drops ongoing Ongoing NFT drops newest Recently NFTs added +opensea.io + stats check open sea collection stats """ print(help_text) @@ -84,10 +79,8 @@ nftcalendar.io: Returns ------- - True, False or None - False - quit the menu - True - quit the program - None - continue in the menu + List[str] + List of commands in the queue to execute """ # Empty command if not an_input: @@ -161,6 +154,40 @@ nftcalendar.io: self.queue.insert(0, "quit") self.queue.insert(0, "quit") + @try_except + def call_stats(self, other_args: List[str]): + """Process stats command""" + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="info", + description=""" + Display stats about an opensea nft collection. e.g. alien-frens + [Source: opensea.io] + """, + ) + + parser.add_argument( + "-s", + "--slug", + type=str, + help="Opensea collection slug (e.g., mutant-ape-yacht-club)", + dest="slug", + required=True, + ) + if other_args and not other_args[0][0] == "-": + other_args.insert(0, "--slug") + + ns_parser = parse_known_args_and_warn( + parser, other_args, EXPORT_ONLY_RAW_DATA_ALLOWED + ) + + if ns_parser: + opensea_view.display_collection_stats( + slug=ns_parser.slug, + export=ns_parser.export, + ) + @try_except def call_today(self, other_args: List[str]): """Process today command""" diff --git a/gamestonk_terminal/cryptocurrency/nft/opensea_model.py b/gamestonk_terminal/cryptocurrency/nft/opensea_model.py new file mode 100644 index 00000000000..2440e260e87 --- /dev/null +++ b/gamestonk_terminal/cryptocurrency/nft/opensea_model.py @@ -0,0 +1,72 @@ +""" opensea.io Model """ + +from datetime import datetime +import requests +import pandas as pd + +API_URL = "https://api.opensea.io/api/v1" + + +def get_collection_stats(slug: str) -> pd.DataFrame: + """Get stats of a nft collection [Source: opensea.io] + + Parameters + ------- + slug : str + Opensea collection slug. If the name of the collection is Mutant Ape Yacht Club the slug is mutant-ape-yacht-club + + Returns + ------- + pd.DataFrame + collection stats + """ + res = requests.get(f"{API_URL}/collection/{slug}") + if res.status_code == 200: + data = res.json() + collection = data["collection"] + stats = collection["stats"] + metrics = [ + "Name", + "Floor Price (ETH)", + "Number of Owners", + "Market Cap (ETH)", + "Average Price ETH", + "One day volume (ETH)", + "One day change (%)", + "One day sales (ETH)", + "One day average price (ETH)", + "Thirty day volume (ETH)", + "Thirty day change (%)", + "Thirty day sales (ETH)", + "Thirty day average price (ETH)", + "Total Supply (ETH)", + "Total Sales (ETH)", + "Total Volume (ETH)", + "Creation Date", + "URL", + ] + values = [ + collection["name"], + "-" if not stats["floor_price"] else float(stats["floor_price"]), + round(float(stats["num_owners"]), 2), + round(float(stats["market_cap"]), 2), + round(float(stats["average_price"]), 2), + round(float(stats["one_day_volume"]), 2), + round(float(stats["one_day_change"]) * 100, 2), + round(float(stats["one_day_sales"]), 2), + round(float(stats["one_day_average_price"]), 2), + round(float(stats["thirty_day_volume"]), 2), + round(float(stats["thirty_day_change"]) * 100, 2), + round(float(stats["thirty_day_sales"]), 2), + round(float(stats["thirty_day_average_price"]), 2), + round(float(stats["total_supply"]), 2), + round(float(stats["total_sales"]), 2), + round(float(stats["total_volume"]), 2), + datetime.strptime( + collection["created_date"], "%Y-%m-%dT%H:%M:%S.%f" + ).strftime("%b %d, %Y"), + "-" if not collection["external_url"] else collection["external_url"], + ] + df = pd.DataFrame({"Metric": metrics, "Value": values}) + return df + return pd.DataFrame() diff --git a/gamestonk_terminal/cryptocurrency/nft/opensea_view.py b/gamestonk_terminal/cryptocurrency/nft/opensea_view.py new file mode 100644 index 00000000000..28cc1932a7e --- /dev/null +++ b/gamestonk_terminal/cryptocurrency/nft/opensea_view.py @@ -0,0 +1,44 @@ +""" opensea.io View """ + +import os +from tabulate import tabulate +from gamestonk_terminal import feature_flags as gtff +from gamestonk_terminal.helper_funcs import export_data +from gamestonk_terminal.cryptocurrency.nft.opensea_model import get_collection_stats + + +def display_collection_stats(slug: str, export: str): + """Display collection stats. [Source: opensea.io] + + Parameters + ---------- + slug: str + Opensea collection slug. If the name of the collection is Mutant Ape Yacht Club the slug is mutant-ape-yacht-club + export : str + Export dataframe data to csv,json,xlsx file + """ + + collection_stats_df = get_collection_stats(slug) + if collection_stats_df.empty: + print("No data found.", "\n") + else: + if gtff.USE_TABULATE_DF: + print( + tabulate( + collection_stats_df, + headers=collection_stats_df.columns, + floatfmt=".2f", + showindex=False, + tablefmt="fancy_grid", + ), + "\n", + ) + else: + print(collection_stats_df.to_string, "\n") + + export_data( + export, + os.path.dirname(os.path.abspath(__file__)), + "stats", + collection_stats_df, + ) diff --git a/gamestonk_terminal/cryptocurrency/onchain/onchain_controller.py b/gamestonk_terminal/cryptocurrency/onchain/onchain_controller.py index c7fc411a5bf..758daa9d740 100644 --- a/gamestonk_terminal/cryptocurrency/onchain/onchain_controller.py +++ b/gamestonk_terminal/cryptocurrency/onchain/onchain_controller.py @@ -357,9 +357,8 @@ class OnchainController: required="-h" not in other_args, ) - if other_args: - if not other_args[0][0] == "-": - other_args.insert(0, "--address") + if other_args and not other_args[0][0] == "-": + other_args.insert(0, "--address") ns_parser = parse_known_args_and_warn( parser, other_args, EXPORT_ONLY_RAW_DATA_ALLOWED diff --git a/scripts/test_crypto_nft.gst b/scripts/test_crypto_nft.gst index 5cf83cb676f..932e41eca5f 100644 --- a/scripts/test_crypto_nft.gst +++ b/scripts/test_crypto_nft.gst @@ -1,5 +1,6 @@ crypto nft +stats cryptopunks today upcoming ongoing diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[alien-frens].yaml b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[alien-frens].yaml new file mode 100644 index 00000000000..4898f27f772 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[alien-frens].yaml @@ -0,0 +1,119 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.26.0 + method: GET + uri: https://api.opensea.io/api/v1/collection/alien-frens + response: + body: + string: !!binary | + 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 + headers: + Allow: + - OPTIONS, GET + CF-Cache-Status: + - EXPIRED + CF-RAY: + - 6c5a69d7cc8903c2-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 30 Dec 2021 09:59:06 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Last-Modified: + - Thu, 30 Dec 2021 09:52:05 GMT + Referrer-Policy: + - same-origin + - strict-origin + Server: + - cloudflare + Set-Cookie: + - __cf_bm=cj00iA3acg47evs76jmnCaHXJFWoaADinsgZQ3RYhzU-1640858346-0-AYnDCMLFfLDGIwF2HQM4re38rxCcKhwUqojfKeaDrTt+gnlPPHqBUN7v0OI9ZS1PyNilkXJKGc058xJa45Sogzw=; + path=/; expires=Thu, 30-Dec-21 10:29:06 GMT; domain=.opensea.io; HttpOnly; + Secure; SameSite=None + Transfer-Encoding: + - chunked + Vary: + - Accept, Origin, Accept-Encoding + Via: + - 1.1 spaces-router (279557a225d7) + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + X-Permitted-Cross-Domain-Policies: + - none + X-Trace-Id: + - '12033911049466675596' + X-Xss-Protection: + - '0' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[cryptopunks].yaml b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[cryptopunks].yaml new file mode 100644 index 00000000000..574faf28bc7 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[cryptopunks].yaml @@ -0,0 +1,149 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.26.0 + method: GET + uri: https://api.opensea.io/api/v1/collection/cryptopunks + response: + body: + string: !!binary | + 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 + headers: + Allow: + - OPTIONS, GET + CF-Cache-Status: + - EXPIRED + CF-RAY: + - 6c5a69d3ccb703ae-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 30 Dec 2021 09:59:06 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Last-Modified: + - Thu, 30 Dec 2021 09:52:04 GMT + Referrer-Policy: + - same-origin + - strict-origin + Server: + - cloudflare + Set-Cookie: + - __cf_bm=KokaXnh7LoaoJFpcTGLIs8bMGJv_zFxYhoBgLVI4PRM-1640858346-0-AZkMSqXOCuzxOI9L7+SPHKlF7ie06EbCw8BOml15d3auvnAyWWu23vbvmPRUiLeZJFqV7biRbuNzm+paN6Q+zO4=; + path=/; expires=Thu, 30-Dec-21 10:29:06 GMT; domain=.opensea.io; HttpOnly; + Secure; SameSite=None + Transfer-Encoding: + - chunked + Vary: + - Accept, Origin, Accept-Encoding + Via: + - 1.1 spaces-router (279557a225d7) + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + X-Permitted-Cross-Domain-Policies: + - none + X-Trace-Id: + - '14283196173609429636' + X-Xss-Protection: + - '0' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].yaml b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].yaml new file mode 100644 index 00000000000..92e7de19bb3 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.26.0 + method: GET + uri: https://api.opensea.io/api/v1/collection/mutant-ape-yacht-club + response: + body: + string: !!binary | + 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 + A2W52mCxOQAA + headers: + Age: + - '7' + Allow: + - OPTIONS, GET + CF-Cache-Status: + - HIT + CF-RAY: + - 6c5a69d30ac303b6-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 30 Dec 2021 09:59:05 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Last-Modified: + - Thu, 30 Dec 2021 09:53:41 GMT + Referrer-Policy: + - same-origin + - strict-origin + Server: + - cloudflare + Set-Cookie: + - __cf_bm=iPkcu.8WQHshUZjXTEKreu6tMDXYzVccvazLZA9wXjU-1640858345-0-Aeb5B2XMHSA5WnWosIuEj8LuUPlhKbom2bD8som1a1oFir41YYNPjgl03cyvucfQP/y2g6r6ugZxME82lSBJ0Tc=; + path=/; expires=Thu, 30-Dec-21 10:29:05 GMT; domain=.opensea.io; HttpOnly; + Secure; SameSite=None + Transfer-Encoding: + - chunked + Vary: + - Accept, Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + X-Permitted-Cross-Domain-Policies: + - none + X-Trace-Id: + - '2614034570103967031' + X-Xss-Protection: + - '0' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_view/test_display_collection_stats.yaml b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_view/test_display_collection_stats.yaml new file mode 100644 index 00000000000..990c9b9df6e --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/cassettes/test_opensea_view/test_display_collection_stats.yaml @@ -0,0 +1,176 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.26.0 + method: GET + uri: https://api.opensea.io/api/v1/collection/mutant-ape-yacht-club + response: + body: + string: !!binary | + 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 + A2W52mCxOQAA + headers: + Allow: + - OPTIONS, GET + CF-Cache-Status: + - EXPIRED + CF-RAY: + - 6c5a69a30f1d5d43-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 30 Dec 2021 09:58:58 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Last-Modified: + - Thu, 30 Dec 2021 09:53:41 GMT + Referrer-Policy: + - same-origin + - strict-origin + Server: + - cloudflare + Set-Cookie: + - __cf_bm=h7UYTEQ2rbQD_Jb5ULhmPABhjC8VxoUkSkYtlv6_DkA-1640858338-0-ARfqHPrHHP5gh7ulcTynBvHZ6siR3rV6/RlW5+bfzXDV8TY9eUIzrC5Bq6TsO9hUn8V/qKybDv1ZeoL5Jgdo+1c=; + path=/; expires=Thu, 30-Dec-21 10:28:58 GMT; domain=.opensea.io; HttpOnly; + Secure; SameSite=None + Transfer-Encoding: + - chunked + Vary: + - Accept, Origin, Accept-Encoding + Via: + - 1.1 vegur + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + X-Permitted-Cross-Domain-Policies: + - none + X-Trace-Id: + - '2614034570103967031' + X-Xss-Protection: + - '0' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[alien-frens].csv b/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[alien-frens].csv new file mode 100644 index 00000000000..d38311bbfd1 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[alien-frens].csv @@ -0,0 +1,19 @@ +,Metric,Value +0,Name,Alien Frens.. +1,Floor Price (ETH),0.03 +2,Number of Owners,1.0 +3,Market Cap (ETH),0.0 +4,Average Price ETH,0.0 +5,One day volume (ETH),0.0 +6,One day change (%),0.0 +7,One day sales (ETH),0.0 +8,One day average price (ETH),0.0 +9,Thirty day volume (ETH),0.0 +10,Thirty day change (%),0.0 +11,Thirty day sales (ETH),0.0 +12,Thirty day average price (ETH),0.0 +13,Total Supply (ETH),17.0 +14,Total Sales (ETH),0.0 +15,Total Volume (ETH),0.0 +16,Creation Date,"Dec 19, 2021" +17,URL,- diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[cryptopunks].csv b/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[cryptopunks].csv new file mode 100644 index 00000000000..dead125c6f5 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[cryptopunks].csv @@ -0,0 +1,19 @@ +,Metric,Value +0,Name,CryptoPunks +1,Floor Price (ETH),- +2,Number of Owners,3298.0 +3,Market Cap (ETH),758396.57 +4,Average Price ETH,41.87 +5,One day volume (ETH),1097.76 +6,One day change (%),25.57 +7,One day sales (ETH),12.0 +8,One day average price (ETH),91.48 +9,Thirty day volume (ETH),40741.17 +10,Thirty day change (%),30.4 +11,Thirty day sales (ETH),484.0 +12,Thirty day average price (ETH),84.18 +13,Total Supply (ETH),9999.0 +14,Total Sales (ETH),18350.0 +15,Total Volume (ETH),768229.9 +16,Creation Date,"Apr 26, 2019" +17,URL,https://www.larvalabs.com/cryptopunks diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].csv b/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].csv new file mode 100644 index 00000000000..e477556f954 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/csv/test_opensea_model/test_get_collection_stats[mutant-ape-yacht-club].csv @@ -0,0 +1,19 @@ +,Metric,Value +0,Name,Mutant Ape Yacht Club +1,Floor Price (ETH),11.0 +2,Number of Owners,11029.0 +3,Market Cap (ETH),204614.12 +4,Average Price ETH,7.22 +5,One day volume (ETH),2383.11 +6,One day change (%),23.54 +7,One day sales (ETH),167.0 +8,One day average price (ETH),14.27 +9,Thirty day volume (ETH),31101.08 +10,Thirty day change (%),8.67 +11,Thirty day sales (ETH),3166.0 +12,Thirty day average price (ETH),9.82 +13,Total Supply (ETH),17505.0 +14,Total Sales (ETH),21098.0 +15,Total Volume (ETH),152314.7 +16,Creation Date,"Aug 29, 2021" +17,URL,- diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_model.py b/tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_model.py new file mode 100644 index 00000000000..8fa7407f5cb --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_model.py @@ -0,0 +1,17 @@ +import pytest + +from gamestonk_terminal.cryptocurrency.nft import opensea_model + + +@pytest.mark.vcr +@pytest.mark.parametrize( + "slug", + [ + "mutant-ape-yacht-club", + "cryptopunks", + "alien-frens", + ], +) +def test_get_collection_stats(slug, recorder): + df_collection_stats = opensea_model.get_collection_stats(slug) + recorder.capture(df_collection_stats) diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_view.py b/tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_view.py new file mode 100644 index 00000000000..e37c9adcb85 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/nft/test_opensea_view.py @@ -0,0 +1,9 @@ +import pytest + +from gamestonk_terminal.cryptocurrency.nft import opensea_view + + +@pytest.mark.vcr +@pytest.mark.record_stdout +def test_display_collection_stats(): + opensea_view.get_collection_stats("mutant-ape-yacht-club") diff --git a/tests/gamestonk_terminal/cryptocurrency/nft/txt/test_opensea_view/test_display_collection_stats.txt b/tests/gamestonk_terminal/cryptocurrency/nft/txt/test_opensea_view/test_display_collection_stats.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/website/content/cryptocurrency/nft/stats/_index.md b/website/content/cryptocurrency/nft/stats/_index.md new file mode 100644 index 00000000000..1def2894b97 --- /dev/null +++ b/website/content/cryptocurrency/nft/stats/_index.md @@ -0,0 +1,11 @@ +``` +usage: stats [-s SLUG] [-h] [--export {csv,json,xlsx}] + +optional arguments: + -s SLUG, --slug SLUG Opensea collection slug to check stats (e.g., mutant-ape-yacht-club) + -h, --help show this help message (default: False) + --export {csv,json,xlsx} + Export raw data into csv, json, xlsx (default: ) +``` + +Display the statistics of a certain opensea collection [Source: opensea.io]