Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
repos:
- repo: https://github.com/psf/black
rev: 25.1.0
hooks:
- id: black
language_version: python3

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-yaml
- id: check-merge-conflict
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ aeneid_chain_id = 1315
story_client = StoryClient(web3, account, aeneid_chain_id)
```

## Init pre-commit hooks

```
pre-commit install
```

## Running test cases

- Integration Tests
Expand All @@ -78,10 +84,16 @@ coverage run -m pytest tests/unit -v -ra -q
coverage report
```

## Formatting

```
black .
```

## Release

| Package | Description |
| :------------------------------ | :--------------------------------------------- |
| Package | Description |
| :----------------------------------------------------------- | :---------------------------------------------------- |
| [story_protocol_python_sdk](./src/story_protocol_python_sdk) | A Python SDK for interacting with the Story Protocol. |

## Contributing
Expand Down
41 changes: 18 additions & 23 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,26 @@
from setuptools import setup, find_packages

#python setup.py sdist
#twine upload dist/*
# python setup.py sdist
# twine upload dist/*

setup(
name='story_protocol_python_sdk',
version='0.3.14',
packages=find_packages(where='src', exclude=["tests"]),
package_dir={'': 'src'},
install_requires=[
'web3>=7.0.0',
'pytest',
'python-dotenv',
'base58'
],
name="story_protocol_python_sdk",
version="0.3.14",
packages=find_packages(where="src", exclude=["tests"]),
package_dir={"": "src"},
install_requires=["web3>=7.0.0", "pytest", "python-dotenv", "base58"],
include_package_data=True, # Ensure package data is included
url='https://github.com/storyprotocol/python-sdk',
license='MIT',
author='Andrew Chung',
author_email='andrew@storyprotocol.xyz',
description='A Python SDK for interacting with Story.',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
url="https://github.com/storyprotocol/python-sdk",
license="MIT",
author="Andrew Chung",
author_email="andrew@storyprotocol.xyz",
description="A Python SDK for interacting with Story.",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.10',
python_requires=">=3.10",
)
10 changes: 9 additions & 1 deletion src/story_protocol_python_sdk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,12 @@
from .resources.WIP import WIP


__all__ = ['StoryClient', 'IPAsset', 'License', 'Royalty', 'IPAccount', 'Dispute', 'WIP']
__all__ = [
"StoryClient",
"IPAsset",
"License",
"Royalty",
"IPAccount",
"Dispute",
"WIP",
]
Original file line number Diff line number Diff line change
@@ -1,43 +1,70 @@

import json
import os
from web3 import Web3


class AccessControllerClient:
def __init__(self, web3: Web3):
self.web3 = web3
# Assuming config.json is located at the root of the project
config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts', 'config.json'))
with open(config_path, 'r') as config_file:
config_path = os.path.abspath(
os.path.join(
os.path.dirname(__file__), "..", "..", "scripts", "config.json"
)
)
with open(config_path, "r") as config_file:
config = json.load(config_file)
contract_address = None
for contract in config['contracts']:
if contract['contract_name'] == 'AccessController':
contract_address = contract['contract_address']
for contract in config["contracts"]:
if contract["contract_name"] == "AccessController":
contract_address = contract["contract_address"]
break
if not contract_address:
raise ValueError(f"Contract address for AccessController not found in config.json")
abi_path = os.path.join(os.path.dirname(__file__), '..', '..', 'abi', 'jsons', 'AccessController.json')
with open(abi_path, 'r') as abi_file:
raise ValueError(
f"Contract address for AccessController not found in config.json"
)
abi_path = os.path.join(
os.path.dirname(__file__),
"..",
"..",
"abi",
"jsons",
"AccessController.json",
)
with open(abi_path, "r") as abi_file:
abi = json.load(abi_file)
self.contract = self.web3.eth.contract(address=contract_address, abi=abi)

def setAllPermissions(self, ipAccount, signer, permission):
return self.contract.functions.setAllPermissions(ipAccount, signer, permission).transact()

def build_setAllPermissions_transaction(self, ipAccount, signer, permission, tx_params):
return self.contract.functions.setAllPermissions(ipAccount, signer, permission).build_transaction(tx_params)

return self.contract.functions.setAllPermissions(
ipAccount, signer, permission
).transact()

def build_setAllPermissions_transaction(
self, ipAccount, signer, permission, tx_params
):
return self.contract.functions.setAllPermissions(
ipAccount, signer, permission
).build_transaction(tx_params)

def setTransientBatchPermissions(self, permissions):
return self.contract.functions.setTransientBatchPermissions(permissions).transact()

return self.contract.functions.setTransientBatchPermissions(
permissions
).transact()

def build_setTransientBatchPermissions_transaction(self, permissions, tx_params):
return self.contract.functions.setTransientBatchPermissions(permissions).build_transaction(tx_params)

return self.contract.functions.setTransientBatchPermissions(
permissions
).build_transaction(tx_params)

def setTransientPermission(self, ipAccount, signer, to, func, permission):
return self.contract.functions.setTransientPermission(ipAccount, signer, to, func, permission).transact()

def build_setTransientPermission_transaction(self, ipAccount, signer, to, func, permission, tx_params):
return self.contract.functions.setTransientPermission(ipAccount, signer, to, func, permission).build_transaction(tx_params)


return self.contract.functions.setTransientPermission(
ipAccount, signer, to, func, permission
).transact()

def build_setTransientPermission_transaction(
self, ipAccount, signer, to, func, permission, tx_params
):
return self.contract.functions.setTransientPermission(
ipAccount, signer, to, func, permission
).build_transaction(tx_params)
Original file line number Diff line number Diff line change
@@ -1,40 +1,51 @@

import json
import os
from web3 import Web3


class ArbitrationPolicyUMAClient:
def __init__(self, web3: Web3):
self.web3 = web3
# Assuming config.json is located at the root of the project
config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts', 'config.json'))
with open(config_path, 'r') as config_file:
config_path = os.path.abspath(
os.path.join(
os.path.dirname(__file__), "..", "..", "scripts", "config.json"
)
)
with open(config_path, "r") as config_file:
config = json.load(config_file)
contract_address = None
for contract in config['contracts']:
if contract['contract_name'] == 'ArbitrationPolicyUMA':
contract_address = contract['contract_address']
for contract in config["contracts"]:
if contract["contract_name"] == "ArbitrationPolicyUMA":
contract_address = contract["contract_address"]
break
if not contract_address:
raise ValueError(f"Contract address for ArbitrationPolicyUMA not found in config.json")
abi_path = os.path.join(os.path.dirname(__file__), '..', '..', 'abi', 'jsons', 'ArbitrationPolicyUMA.json')
with open(abi_path, 'r') as abi_file:
raise ValueError(
f"Contract address for ArbitrationPolicyUMA not found in config.json"
)
abi_path = os.path.join(
os.path.dirname(__file__),
"..",
"..",
"abi",
"jsons",
"ArbitrationPolicyUMA.json",
)
with open(abi_path, "r") as abi_file:
abi = json.load(abi_file)
self.contract = self.web3.eth.contract(address=contract_address, abi=abi)

def disputeIdToAssertionId(self, disputeId):
return self.contract.functions.disputeIdToAssertionId(disputeId).call()

def maxBonds(self, token):
return self.contract.functions.maxBonds(token).call()

def maxLiveness(self):
return self.contract.functions.maxLiveness().call()

def minLiveness(self):
return self.contract.functions.minLiveness().call()

def oov3(self):
return self.contract.functions.oov3().call()


Original file line number Diff line number Diff line change
@@ -1,24 +1,36 @@

import json
import os
from web3 import Web3


class CoreMetadataModuleClient:
def __init__(self, web3: Web3):
self.web3 = web3
# Assuming config.json is located at the root of the project
config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts', 'config.json'))
with open(config_path, 'r') as config_file:
config_path = os.path.abspath(
os.path.join(
os.path.dirname(__file__), "..", "..", "scripts", "config.json"
)
)
with open(config_path, "r") as config_file:
config = json.load(config_file)
contract_address = None
for contract in config['contracts']:
if contract['contract_name'] == 'CoreMetadataModule':
contract_address = contract['contract_address']
for contract in config["contracts"]:
if contract["contract_name"] == "CoreMetadataModule":
contract_address = contract["contract_address"]
break
if not contract_address:
raise ValueError(f"Contract address for CoreMetadataModule not found in config.json")
abi_path = os.path.join(os.path.dirname(__file__), '..', '..', 'abi', 'jsons', 'CoreMetadataModule.json')
with open(abi_path, 'r') as abi_file:
raise ValueError(
f"Contract address for CoreMetadataModule not found in config.json"
)
abi_path = os.path.join(
os.path.dirname(__file__),
"..",
"..",
"abi",
"jsons",
"CoreMetadataModule.json",
)
with open(abi_path, "r") as abi_file:
abi = json.load(abi_file)
self.contract = self.web3.eth.contract(address=contract_address, abi=abi)

Original file line number Diff line number Diff line change
@@ -1,24 +1,37 @@

import json
import os
from web3 import Web3


class CoreMetadataViewModuleClient:
def __init__(self, web3: Web3):
self.web3 = web3
# Assuming config.json is located at the root of the project
config_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts', 'config.json'))
with open(config_path, 'r') as config_file:
config_path = os.path.abspath(
os.path.join(
os.path.dirname(__file__), "..", "..", "scripts", "config.json"
)
)
with open(config_path, "r") as config_file:
config = json.load(config_file)

contract_address = None
for contract in config['contracts']:
if contract['contract_name'] == 'CoreMetadataViewModule':
contract_address = contract['contract_address']
for contract in config["contracts"]:
if contract["contract_name"] == "CoreMetadataViewModule":
contract_address = contract["contract_address"]
break
if not contract_address:
raise ValueError(f"Contract address for CoreMetadataViewModule not found in config.json")
abi_path = os.path.join(os.path.dirname(__file__), '..', '..', 'abi', 'jsons', 'CoreMetadataViewModule.json')
with open(abi_path, 'r') as abi_file:
raise ValueError(
f"Contract address for CoreMetadataViewModule not found in config.json"
)
abi_path = os.path.join(
os.path.dirname(__file__),
"..",
"..",
"abi",
"jsons",
"CoreMetadataViewModule.json",
)
with open(abi_path, "r") as abi_file:
abi = json.load(abi_file)
self.contract = self.web3.eth.contract(address=contract_address, abi=abi)

Loading
Loading