Skip to content

Using python-bitshares without writing anything to disk #143

@RuneStone0

Description

@RuneStone0

Background:
I'm running python-bitshares on Google AppEngine, which doesn't allow writes to disk, causing exceptions because python-bitshares attempt to write the sqlite database to disk. This happens, even if BitShares() is initialized with keys: bitshares = BitShares(node=mynode, keys=[mykey])

Root Cause:
This line: self.config = kwargs.get("config_store", SqliteConfigurationStore(**kwargs)) (reference) is executed when a new BitShares() instance is created, resulting in disk writes.

This happens even if config_store is set while creating a new BitShares() instance like below:

from graphenestorage import InRamConfigurationStore
bitshares = BitShares(node=mynode, keys=[mykey], config_store=InRamConfigurationStore())

I suspect that kwargs.get() is causing this issue. For some reason it will call the default value even if another value is parsed to it (in this case SqliteConfigurationStore()). Once SqliteConfigurationStore() is called a folder will be created on disk (reference)

I'm not sure what the best way to fix this, I went with a quick hack:

bitshares = BitShares(node=node, keys=[app.config["WIF"]], config_store="ram") 

and then patched sqlite.py (adding the first line below):

        if kwargs.get("config_store", None) is None:
            if os.path.isdir(data_dir):  # pragma: no cover
                print("checking folder")
                return
            else:  # pragma: no cover
                print("creating folder")
                os.makedirs(data_dir)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions