0xPlaygrounds / subgrounds

An intuitive Python library for interfacing with subgraphs and GraphQL
http://docs.playgrounds.network
Apache License 2.0
50 stars 8 forks source link

How to close the SSL connection correctly? #52

Open Steinadler177 opened 7 months ago

Steinadler177 commented 7 months ago

Is there a method that I can close the SSL connection which is build by Subgrounds? I checked the API document which doesn't have a similar content.

I tried to close it with contextlib, but it also can't solve this problem.

# Import the Subgrounds library

from subgrounds import Subgrounds
from contextlib import closing
import os

def another_function():

    # load_dotenv()
    graph_api_key = '<REDACTED>'
    # Create a new Subgrounds object
    with closing(Subgrounds()) as sg:

        # Load the Uniswap v3 subgraph using a specific API endpoint
        uni = sg.load_subgraph(
            f'https://gateway.thegraph.com/api/{graph_api_key}/subgraphs/id/ELUcwgpm14LKPLrBRuVvPvNKHQ9HvwmtKgKSH6123cr7')
        # <REDACTED>
        # Query the financialsDailySnapshots endpoint with a specified order, limit, and filter criteria
        latest_snapshots = uni.Query.financialsDailySnapshots(
            orderBy=uni.FinancialsDailySnapshot.timestamp,
            orderDirection='desc',
            first=1,
        )

        # Convert the query results to a Pandas dataframe and extract the first row
        res = sg.query_df(latest_snapshots).squeeze()
        pass
    print("Another function")

another_function()

which would give me two error message:

AttributeError: 'Subgrounds' object has no attribute 'close' I can't close it like this.

sys:1: ResourceWarning: unclosed <ssl.SSLSocket fd=1588, family=23, type=1, proto=0, laddr=('local_address'), raddr=('remote_address')>

That's the real problem. When the program end, PY just simply terminate everything and trigger this error. I can read data from this, but how to safely close the connection?

0xMochan commented 7 months ago

There's no need to utilize contextlib.closing for this purpose, it won't add anything extra to the with Subgrounds() as sg behavior.

Unfortuntely, this SSL socket warning has crept up in a recent update to subgrounds and I haven't fully figured out where it came from. It can safely be ignored and won't affect anything and if the messages get in the way, you can use the warnings module to ignore them from the output:

import warnings                                                           

warnings.filterwarnings('ignore', category=ResourceWarning)

The intended usage should be as follows:

with Subgrounds() as sg:
    sg.load_subgraph("<url here>")
    data = sg.query_df([...])

You can learn more about query grouping in our docs! Let me know if you have further questions!

Steinadler177 commented 7 months ago

Understood. I'll try to import this warn filter for this module. Thank you very much! Please change the issue status on your control.