@0x/abi-gen: Update python wrappers generation to work with leading underscores in identifiers.'

This commit is contained in:
Lawrence Forman 2020-06-02 00:56:57 -04:00
parent 48ad39c1c7
commit 01aa556ede
8 changed files with 98 additions and 46 deletions

View File

@ -1,4 +1,13 @@
[ [
{
"version": "5.3.0",
"changes": [
{
"note": "Allow identifiers with leading underscores in python wrappers",
"pr": 2591
}
]
},
{ {
"version": "5.2.2", "version": "5.2.2",
"changes": [ "changes": [

View File

@ -146,7 +146,16 @@ if (args.language === 'TypeScript') {
registerPartials(); registerPartials();
function makeLanguageSpecificName(methodName: string): string { function makeLanguageSpecificName(methodName: string): string {
return args.language === 'Python' ? changeCase.snake(methodName) : methodName; if (args.language === 'Python') {
let snakeCased = changeCase.snake(methodName);
// Move leading underscores to the end.
const m = /^(_*).+?(_*)$/.exec(methodName);
if (m) {
snakeCased = `${snakeCased}${m[1] || m[2]}`;
}
return snakeCased;
}
return methodName;
} }
if (_.isEmpty(abiFileNames)) { if (_.isEmpty(abiFileNames)) {

View File

@ -153,10 +153,15 @@ export function registerPythonHelpers(): void {
} }
return ''; return '';
}); });
Handlebars.registerHelper( Handlebars.registerHelper('toPythonClassname', (sourceName: string) => {
'toPythonClassname', let pascalCased = changeCase.pascal(sourceName);
(sourceName: string) => new Handlebars.SafeString(changeCase.pascal(sourceName)), // Retain trailing underscores.
); const m = /^.+?(_*)$/.exec(sourceName);
if (m) {
pascalCased = `${pascalCased}${m[1]}`;
}
return new Handlebars.SafeString(pascalCased);
});
Handlebars.registerHelper( Handlebars.registerHelper(
'makeOutputsValue', 'makeOutputsValue',
/** /**

View File

@ -331,13 +331,14 @@ export const utils = {
'max', 'max',
'round', 'round',
]; ];
if ( if (pythonReservedWords.includes(snakeCased) || pythonBuiltins.includes(snakeCased)) {
pythonReservedWords.includes(snakeCased) ||
pythonBuiltins.includes(snakeCased) ||
/*changeCase strips leading underscores :(*/ input[0] === '_'
) {
snakeCased = `_${snakeCased}`; snakeCased = `_${snakeCased}`;
} }
// Retain trailing underscores.
const m = /^.+?(_*)$/.exec(input);
if (m) {
snakeCased = `${snakeCased}${m[1]}`;
}
return snakeCased; return snakeCased;
}, },
/** /**

View File

@ -1,5 +1,5 @@
class {{toPythonClassname this.languageSpecificName}}Method(ContractMethod): class {{toPythonClassname this.languageSpecificName}}Method(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the {{this.name}} method.""" """Various interfaces to the {{this.name}} method."""
def __init__(self, web3_or_provider: Union[Web3, BaseProvider], contract_address: str, contract_function: ContractFunction{{#if inputs}}, validator: Validator=None{{/if}}): def __init__(self, web3_or_provider: Union[Web3, BaseProvider], contract_address: str, contract_function: ContractFunction{{#if inputs}}, validator: Validator=None{{/if}}):

View File

@ -178,7 +178,9 @@ class AbiGenDummyNestedStruct(TypedDict):
description: str description: str
class AcceptsAnArrayOfBytesMethod(ContractMethod): class AcceptsAnArrayOfBytesMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the acceptsAnArrayOfBytes method.""" """Various interfaces to the acceptsAnArrayOfBytes method."""
def __init__( def __init__(
@ -225,7 +227,7 @@ class AcceptsAnArrayOfBytesMethod(ContractMethod):
return self._underlying_method(a).estimateGas(tx_params.as_dict()) return self._underlying_method(a).estimateGas(tx_params.as_dict())
class AcceptsBytesMethod(ContractMethod): class AcceptsBytesMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the acceptsBytes method.""" """Various interfaces to the acceptsBytes method."""
def __init__( def __init__(
@ -267,7 +269,9 @@ class AcceptsBytesMethod(ContractMethod):
return self._underlying_method(a).estimateGas(tx_params.as_dict()) return self._underlying_method(a).estimateGas(tx_params.as_dict())
class ComplexInputComplexOutputMethod(ContractMethod): class ComplexInputComplexOutputMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the complexInputComplexOutput method.""" """Various interfaces to the complexInputComplexOutput method."""
def __init__( def __init__(
@ -329,7 +333,7 @@ class ComplexInputComplexOutputMethod(ContractMethod):
) )
class EcrecoverFnMethod(ContractMethod): class EcrecoverFnMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the ecrecoverFn method.""" """Various interfaces to the ecrecoverFn method."""
def __init__( def __init__(
@ -414,7 +418,7 @@ class EcrecoverFnMethod(ContractMethod):
) )
class EmitSimpleEventMethod(ContractMethod): class EmitSimpleEventMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the emitSimpleEvent method.""" """Various interfaces to the emitSimpleEvent method."""
def __init__( def __init__(
@ -457,7 +461,9 @@ class EmitSimpleEventMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class MethodAcceptingArrayOfArrayOfStructsMethod(ContractMethod): class MethodAcceptingArrayOfArrayOfStructsMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the methodAcceptingArrayOfArrayOfStructs method.""" """Various interfaces to the methodAcceptingArrayOfArrayOfStructs method."""
def __init__( def __init__(
@ -509,7 +515,9 @@ class MethodAcceptingArrayOfArrayOfStructsMethod(ContractMethod):
) )
class MethodAcceptingArrayOfStructsMethod(ContractMethod): class MethodAcceptingArrayOfStructsMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the methodAcceptingArrayOfStructs method.""" """Various interfaces to the methodAcceptingArrayOfStructs method."""
def __init__( def __init__(
@ -559,7 +567,9 @@ class MethodAcceptingArrayOfStructsMethod(ContractMethod):
) )
class MethodReturningArrayOfStructsMethod(ContractMethod): class MethodReturningArrayOfStructsMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the methodReturningArrayOfStructs method.""" """Various interfaces to the methodReturningArrayOfStructs method."""
def __init__( def __init__(
@ -598,7 +608,9 @@ class MethodReturningArrayOfStructsMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class MethodReturningMultipleValuesMethod(ContractMethod): class MethodReturningMultipleValuesMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the methodReturningMultipleValues method.""" """Various interfaces to the methodReturningMultipleValues method."""
def __init__( def __init__(
@ -632,7 +644,7 @@ class MethodReturningMultipleValuesMethod(ContractMethod):
class MethodUsingNestedStructWithInnerStructNotUsedElsewhereMethod( class MethodUsingNestedStructWithInnerStructNotUsedElsewhereMethod(
ContractMethod ContractMethod
): ): # pylint: disable=invalid-name
"""Various interfaces to the methodUsingNestedStructWithInnerStructNotUsedElsewhere method.""" """Various interfaces to the methodUsingNestedStructWithInnerStructNotUsedElsewhere method."""
def __init__( def __init__(
@ -665,7 +677,9 @@ class MethodUsingNestedStructWithInnerStructNotUsedElsewhereMethod(
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class MultiInputMultiOutputMethod(ContractMethod): class MultiInputMultiOutputMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the multiInputMultiOutput method.""" """Various interfaces to the multiInputMultiOutput method."""
def __init__( def __init__(
@ -747,7 +761,7 @@ class MultiInputMultiOutputMethod(ContractMethod):
) )
class NestedStructInputMethod(ContractMethod): class NestedStructInputMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the nestedStructInput method.""" """Various interfaces to the nestedStructInput method."""
def __init__( def __init__(
@ -791,7 +805,7 @@ class NestedStructInputMethod(ContractMethod):
return self._underlying_method(n).estimateGas(tx_params.as_dict()) return self._underlying_method(n).estimateGas(tx_params.as_dict())
class NestedStructOutputMethod(ContractMethod): class NestedStructOutputMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the nestedStructOutput method.""" """Various interfaces to the nestedStructOutput method."""
def __init__( def __init__(
@ -824,7 +838,7 @@ class NestedStructOutputMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class NoInputNoOutputMethod(ContractMethod): class NoInputNoOutputMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the noInputNoOutput method.""" """Various interfaces to the noInputNoOutput method."""
def __init__( def __init__(
@ -854,7 +868,9 @@ class NoInputNoOutputMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class NoInputSimpleOutputMethod(ContractMethod): class NoInputSimpleOutputMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the noInputSimpleOutput method.""" """Various interfaces to the noInputSimpleOutput method."""
def __init__( def __init__(
@ -885,7 +901,7 @@ class NoInputSimpleOutputMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class NonPureMethodMethod(ContractMethod): class NonPureMethodMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the nonPureMethod method.""" """Various interfaces to the nonPureMethod method."""
def __init__( def __init__(
@ -929,7 +945,9 @@ class NonPureMethodMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class NonPureMethodThatReturnsNothingMethod(ContractMethod): class NonPureMethodThatReturnsNothingMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the nonPureMethodThatReturnsNothing method.""" """Various interfaces to the nonPureMethodThatReturnsNothing method."""
def __init__( def __init__(
@ -972,7 +990,7 @@ class NonPureMethodThatReturnsNothingMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class OverloadedMethod2Method(ContractMethod): class OverloadedMethod2Method(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the overloadedMethod method.""" """Various interfaces to the overloadedMethod method."""
def __init__( def __init__(
@ -1014,7 +1032,7 @@ class OverloadedMethod2Method(ContractMethod):
return self._underlying_method(a).estimateGas(tx_params.as_dict()) return self._underlying_method(a).estimateGas(tx_params.as_dict())
class OverloadedMethod1Method(ContractMethod): class OverloadedMethod1Method(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the overloadedMethod method.""" """Various interfaces to the overloadedMethod method."""
def __init__( def __init__(
@ -1056,7 +1074,9 @@ class OverloadedMethod1Method(ContractMethod):
return self._underlying_method(a).estimateGas(tx_params.as_dict()) return self._underlying_method(a).estimateGas(tx_params.as_dict())
class PureFunctionWithConstantMethod(ContractMethod): class PureFunctionWithConstantMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the pureFunctionWithConstant method.""" """Various interfaces to the pureFunctionWithConstant method."""
def __init__( def __init__(
@ -1085,7 +1105,9 @@ class PureFunctionWithConstantMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class RequireWithConstantMethod(ContractMethod): class RequireWithConstantMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the requireWithConstant method.""" """Various interfaces to the requireWithConstant method."""
def __init__( def __init__(
@ -1113,7 +1135,7 @@ class RequireWithConstantMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class RevertWithConstantMethod(ContractMethod): class RevertWithConstantMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the revertWithConstant method.""" """Various interfaces to the revertWithConstant method."""
def __init__( def __init__(
@ -1141,7 +1163,9 @@ class RevertWithConstantMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class SimpleInputNoOutputMethod(ContractMethod): class SimpleInputNoOutputMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the simpleInputNoOutput method.""" """Various interfaces to the simpleInputNoOutput method."""
def __init__( def __init__(
@ -1189,7 +1213,9 @@ class SimpleInputNoOutputMethod(ContractMethod):
) )
class SimpleInputSimpleOutputMethod(ContractMethod): class SimpleInputSimpleOutputMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the simpleInputSimpleOutput method.""" """Various interfaces to the simpleInputSimpleOutput method."""
def __init__( def __init__(
@ -1238,7 +1264,7 @@ class SimpleInputSimpleOutputMethod(ContractMethod):
) )
class SimplePureFunctionMethod(ContractMethod): class SimplePureFunctionMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the simplePureFunction method.""" """Various interfaces to the simplePureFunction method."""
def __init__( def __init__(
@ -1267,7 +1293,9 @@ class SimplePureFunctionMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class SimplePureFunctionWithInputMethod(ContractMethod): class SimplePureFunctionWithInputMethod(
ContractMethod
): # pylint: disable=invalid-name
"""Various interfaces to the simplePureFunctionWithInput method.""" """Various interfaces to the simplePureFunctionWithInput method."""
def __init__( def __init__(
@ -1312,7 +1340,7 @@ class SimplePureFunctionWithInputMethod(ContractMethod):
return self._underlying_method(x).estimateGas(tx_params.as_dict()) return self._underlying_method(x).estimateGas(tx_params.as_dict())
class SimpleRequireMethod(ContractMethod): class SimpleRequireMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the simpleRequire method.""" """Various interfaces to the simpleRequire method."""
def __init__( def __init__(
@ -1340,7 +1368,7 @@ class SimpleRequireMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class SimpleRevertMethod(ContractMethod): class SimpleRevertMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the simpleRevert method.""" """Various interfaces to the simpleRevert method."""
def __init__( def __init__(
@ -1368,7 +1396,7 @@ class SimpleRevertMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class StructInputMethod(ContractMethod): class StructInputMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the structInput method.""" """Various interfaces to the structInput method."""
def __init__( def __init__(
@ -1410,7 +1438,7 @@ class StructInputMethod(ContractMethod):
return self._underlying_method(s).estimateGas(tx_params.as_dict()) return self._underlying_method(s).estimateGas(tx_params.as_dict())
class StructOutputMethod(ContractMethod): class StructOutputMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the structOutput method.""" """Various interfaces to the structOutput method."""
def __init__( def __init__(
@ -1446,7 +1474,7 @@ class StructOutputMethod(ContractMethod):
return self._underlying_method().estimateGas(tx_params.as_dict()) return self._underlying_method().estimateGas(tx_params.as_dict())
class WithAddressInputMethod(ContractMethod): class WithAddressInputMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the withAddressInput method.""" """Various interfaces to the withAddressInput method."""
def __init__( def __init__(
@ -1537,7 +1565,7 @@ class WithAddressInputMethod(ContractMethod):
) )
class WithdrawMethod(ContractMethod): class WithdrawMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the withdraw method.""" """Various interfaces to the withdraw method."""
def __init__( def __init__(

View File

@ -90,7 +90,7 @@ class LibDummy:
try: try:
for middleware in MIDDLEWARE: for middleware in MIDDLEWARE:
web3.middleware_onion.inject( web3.middleware_onion.inject(
middleware["function"], layer=middleware["layer"] middleware["function"], layer=middleware["layer"],
) )
except ValueError as value_error: except ValueError as value_error:
if value_error.args == ( if value_error.args == (

View File

@ -46,7 +46,7 @@ except ImportError:
pass pass
class PublicAddConstantMethod(ContractMethod): class PublicAddConstantMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the publicAddConstant method.""" """Various interfaces to the publicAddConstant method."""
def __init__( def __init__(
@ -91,7 +91,7 @@ class PublicAddConstantMethod(ContractMethod):
return self._underlying_method(x).estimateGas(tx_params.as_dict()) return self._underlying_method(x).estimateGas(tx_params.as_dict())
class PublicAddOneMethod(ContractMethod): class PublicAddOneMethod(ContractMethod): # pylint: disable=invalid-name
"""Various interfaces to the publicAddOne method.""" """Various interfaces to the publicAddOne method."""
def __init__( def __init__(