Skip to content

Commit acae771

Browse files
committed
dirty
1 parent e57096b commit acae771

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1309
-709
lines changed

conftest.py

Lines changed: 137 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def _loaded_contract_fixtures(populus_source_root, project_dir, request):
8787
from populus.utils.compile import (
8888
get_contracts_source_dir,
8989
)
90+
from populus.utils.filesystem import (
91+
ensure_path_exists,
92+
)
9093

9194
contracts_to_load_from_fn = getattr(request.function, '_populus_contract_fixtures', [])
9295
contracts_to_load_from_module = getattr(request.module, '_populus_contract_fixtures', [])
@@ -95,8 +98,11 @@ def _loaded_contract_fixtures(populus_source_root, project_dir, request):
9598
contracts_to_load_from_fn,
9699
contracts_to_load_from_module,
97100
)
101+
contracts_source_dir = get_contracts_source_dir(project_dir)
98102

99103
for item in contracts_to_load:
104+
ensure_path_exists(contracts_source_dir)
105+
100106
fixture_path = os.path.join(
101107
populus_source_root,
102108
'tests',
@@ -110,18 +116,145 @@ def _loaded_contract_fixtures(populus_source_root, project_dir, request):
110116
else:
111117
raise ValueError("Unable to load contract '{0}'".format(item))
112118

113-
dst_path = os.path.join(
114-
get_contracts_source_dir(project_dir),
115-
os.path.basename(item),
119+
dst_path = os.path.join(contracts_source_dir, os.path.basename(item))
120+
121+
if os.path.exists(dst_path):
122+
raise ValueError("File already present at '{0}'".format(dst_path))
123+
124+
shutil.copy(src_path, dst_path)
125+
126+
127+
@pytest.fixture()
128+
def _loaded_test_contract_fixtures(populus_source_root, project_dir, request):
129+
from populus.utils.testing import (
130+
get_tests_dir,
131+
)
132+
from populus.utils.filesystem import (
133+
ensure_path_exists,
134+
)
135+
136+
test_contracts_to_load_from_fn = getattr(request.function, '_populus_test_contract_fixtures', [])
137+
test_contracts_to_load_from_module = getattr(request.module, '_populus_test_contract_fixtures', [])
138+
139+
test_contracts_to_load = itertools.chain(
140+
test_contracts_to_load_from_fn,
141+
test_contracts_to_load_from_module,
142+
)
143+
144+
tests_dir = get_tests_dir(project_dir)
145+
146+
for item in test_contracts_to_load:
147+
ensure_path_exists(tests_dir)
148+
149+
fixture_path = os.path.join(
150+
populus_source_root,
151+
'tests',
152+
'fixtures',
153+
item,
116154
)
155+
if os.path.exists(item):
156+
src_path = item
157+
elif os.path.exists(fixture_path):
158+
src_path = fixture_path
159+
else:
160+
raise ValueError("Unable to load test contract '{0}'".format(item))
161+
162+
dst_path = os.path.join(tests_dir, os.path.basename(item))
163+
117164
if os.path.exists(dst_path):
118165
raise ValueError("File already present at '{0}'".format(dst_path))
119166

120167
shutil.copy(src_path, dst_path)
121168

122169

170+
EXAMPLE_PACKAGES_BASE_PATH = './tests/example-packages'
171+
172+
173+
@pytest.fixture()
174+
def _loaded_installed_dependencies(populus_source_root, project_dir, request):
175+
from populus.utils.dependencies import (
176+
get_installed_packages_dir,
177+
)
178+
from populus.utils.filesystem import (
179+
find_solidity_source_files,
180+
)
181+
from populus.utils.packaging import (
182+
load_release_lockfile,
183+
extract_package_metadata,
184+
)
185+
from populus.utils.ipfs import (
186+
generate_file_hash,
187+
)
188+
from populus.packages.installation import (
189+
write_installed_packages,
190+
)
191+
192+
packages_to_load_from_fn = getattr(request.function, '_populus_packages_to_load', [])
193+
packages_to_load_from_module = getattr(request.module, '_populus_packages_to_load', [])
194+
195+
packages_to_load = itertools.chain(
196+
packages_to_load_from_fn,
197+
packages_to_load_from_module,
198+
)
199+
200+
def load_example_package_data(example_package_name):
201+
example_package_dir = os.path.join(
202+
populus_source_root,
203+
EXAMPLE_PACKAGES_BASE_PATH,
204+
example_package_name,
205+
)
206+
207+
if not os.path.exists(example_package_dir):
208+
raise ValueError(
209+
"Unable to load example package '{0}".format(example_package_name)
210+
)
211+
212+
release_lockfile_path = os.path.join(example_package_dir, '1.0.0.json')
213+
release_lockfile_uri = generate_file_hash(release_lockfile_path)
214+
release_lockfile = load_release_lockfile(release_lockfile_path)
215+
source_file_paths = find_solidity_source_files(example_package_dir)
216+
source_tree = {
217+
os.path.relpath(source_file_path, example_package_dir): open(source_file_path).read()
218+
for source_file_path
219+
in source_file_paths
220+
}
221+
package_meta = extract_package_metadata(
222+
[
223+
example_package_name,
224+
"{0}==1.0.0".format(example_package_name),
225+
release_lockfile_uri,
226+
],
227+
release_lockfile,
228+
)
229+
package_dependencies = tuple(
230+
load_example_package_data(dependency_name)
231+
for dependency_name
232+
in release_lockfile.get('build_dependencies', {}).keys()
233+
)
234+
235+
package_data = {
236+
'meta': package_meta,
237+
'lockfile': release_lockfile,
238+
'source_tree': source_tree,
239+
'dependencies': package_dependencies,
240+
}
241+
return package_data
242+
243+
installed_packages_dir = get_installed_packages_dir(project_dir)
244+
245+
package_data_to_install = tuple(
246+
load_example_package_data(item)
247+
for item
248+
in packages_to_load
249+
)
250+
write_installed_packages(installed_packages_dir, package_data_to_install)
251+
252+
123253
@pytest.fixture()
124-
def project(project_dir, _loaded_contract_fixtures):
254+
def project(project_dir,
255+
_loaded_contract_fixtures,
256+
_loaded_test_contract_fixtures,
257+
_loaded_installed_dependencies):
125258
return Project()
126259

127260

docs/tutorial.part-3.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ the following test code to a new file ``./tests/test_token_minting.py``
210210
import pytest
211211
212212
def test_minting_tokens(chain, accounts):
213-
provider = chain.store.provider
213+
provider = chain.provider
214214
mintable_token, deploy_txn_hash = provider.get_or_deploy_contract(
215215
'MintableToken',
216216
deploy_kwargs={"_totalSupply": 0},
@@ -234,7 +234,7 @@ the following test code to a new file ``./tests/test_token_minting.py``
234234
assert mintable_token.call().totalSupply() == 66666
235235
236236
def test_only_owner_can_mint(chain, accounts):
237-
provider = chain.store.provider
237+
provider = chain.provider
238238
mintable_token, deploy_txn_hash = provider.get_or_deploy_contract(
239239
'MintableToken',
240240
deploy_kwargs={"_totalSupply": 0},

populus/assets/defaults.v1.config.json

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@
1313
"JSONFile": {
1414
"$ref": "contracts.backends.JSONFile"
1515
},
16+
"ProjectContracts": {
17+
"$ref": "contracts.backends.ProjectContracts"
18+
},
1619
"InstalledPackages": {
1720
"$ref": "contracts.backends.InstalledPackages"
21+
},
22+
"TestContracts": {
23+
"$ref": "contracts.backends.TestContracts"
1824
}
1925
}
2026
}
@@ -31,8 +37,14 @@
3137
"JSONFile": {
3238
"$ref": "contracts.backends.JSONFile"
3339
},
40+
"ProjectContracts": {
41+
"$ref": "contracts.backends.ProjectContracts"
42+
},
3443
"InstalledPackages": {
3544
"$ref": "contracts.backends.InstalledPackages"
45+
},
46+
"TestContracts": {
47+
"$ref": "contracts.backends.TestContracts"
3648
}
3749
}
3850
}
@@ -49,8 +61,14 @@
4961
"Memory": {
5062
"$ref": "contracts.backends.Memory"
5163
},
64+
"ProjectContracts": {
65+
"$ref": "contracts.backends.ProjectContracts"
66+
},
5267
"InstalledPackages": {
5368
"$ref": "contracts.backends.InstalledPackages"
69+
},
70+
"TestContracts": {
71+
"$ref": "contracts.backends.TestContracts"
5472
}
5573
}
5674
}
@@ -67,8 +85,14 @@
6785
"Memory": {
6886
"$ref": "contracts.backends.Memory"
6987
},
88+
"ProjectContracts": {
89+
"$ref": "contracts.backends.ProjectContracts"
90+
},
7091
"InstalledPackages": {
7192
"$ref": "contracts.backends.InstalledPackages"
93+
},
94+
"TestContracts": {
95+
"$ref": "contracts.backends.TestContracts"
7296
}
7397
}
7498
}
@@ -85,29 +109,43 @@
85109
"Memory": {
86110
"$ref": "contracts.backends.Memory"
87111
},
112+
"ProjectContracts": {
113+
"$ref": "contracts.backends.ProjectContracts"
114+
},
88115
"InstalledPackages": {
89116
"$ref": "contracts.backends.InstalledPackages"
117+
},
118+
"TestContracts": {
119+
"$ref": "contracts.backends.TestContracts"
90120
}
91121
}
92122
}
93123
}
94124
},
95125
"contracts": {
96126
"backends": {
97-
"InstalledPackages": {
98-
"class": "populus.contracts.backends.installed_packages.InstalledPackagesBackend",
99-
"priority": 20
100-
},
101127
"JSONFile": {
102128
"class": "populus.contracts.backends.filesystem.JSONFileBackend",
103129
"priority": 10,
104130
"settings": {
105131
"file_path": "./registrar.json"
106132
}
107133
},
134+
"ProjectContracts": {
135+
"class": "populus.contracts.backends.project.ProjectContractsBackend",
136+
"priority": 20
137+
},
138+
"InstalledPackages": {
139+
"class": "populus.contracts.backends.installed_packages.InstalledPackagesBackend",
140+
"priority": 30
141+
},
142+
"TestContracts": {
143+
"class": "populus.contracts.backends.testing.TestContractsBackend",
144+
"priority": 40
145+
},
108146
"Memory": {
109147
"class": "populus.contracts.backends.memory.MemoryBackend",
110-
"priority": 40
148+
"priority": 50
111149
}
112150
}
113151
},

populus/assets/release-lockfile-v1.schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@
212212
"PackageContractInstanceName": {
213213
"title": "The name of the deployed contract instance in a package",
214214
"type": "string",
215-
"pattern": "^[a-z][-a-z0-9]{0,213}\\:[a-zA-Z][a-zA-Z0-9_]*$"
215+
"pattern": "^([a-z][-a-z0-9]{0,213}\\:)+[a-zA-Z][a-zA-Z0-9_]*$"
216216
},
217217
"CompilerInformation": {
218218
"title": "Information about the software that was used to compile a contract type or instance",

0 commit comments

Comments
 (0)