def create(self, validated_data):
        func_imports = []
        event_imports = []

        if validated_data.get('source_file'):
            func_imports.extend(
                Signature.import_from_solidity_file(
                    validated_data['source_file']))
            event_imports.extend(
                EventSignature.import_from_solidity_file(
                    validated_data['source_file']))

        if validated_data.get('source_code'):
            func_imports.extend(
                Signature.import_from_solidity_code(
                    validated_data['source_code']))
            event_imports.extend(
                EventSignature.import_from_solidity_code(
                    validated_data['source_code']))

        stats_function = retrieve_stats_from_import_results(func_imports)
        stats_event = retrieve_stats_from_import_results(event_imports)

        return {
            'num_processed':
            stats_function.num_processed + stats_event.num_processed,
            'num_imported':
            stats_function.num_imported + stats_event.num_imported,
            'num_duplicates':
            stats_function.num_duplicates + stats_event.num_duplicates,
            'num_ignored':
            stats_function.num_ignored + stats_event.num_ignored,
        }
    def create(self, validated_data):
        contract_abi = validated_data['contract_abi']

        stats_function = retrieve_stats_from_import_results(
            Signature.import_from_contract_abi(contract_abi))
        stats_event = retrieve_stats_from_import_results(
            EventSignature.import_from_contract_abi(contract_abi))

        return {
            'num_processed':
            stats_function.num_processed + stats_event.num_processed,
            'num_imported':
            stats_function.num_imported + stats_event.num_imported,
            'num_duplicates':
            stats_function.num_duplicates + stats_event.num_duplicates,
            'num_ignored':
            stats_function.num_ignored + stats_event.num_ignored,
        }
    def post(self, *args, **kwargs):
        serializer = self.get_serializer(data=self.request.data)
        if not serializer.is_valid():
            return Response({'serializer': serializer})
        results = serializer.save()
        import_function_results = []
        import_event_results = []
        for file_obj in results['source_files']:
            import_function_results.extend(
                Signature.import_from_solidity_file(file_obj))
            import_event_results.extend(
                EventSignature.import_from_solidity_file(file_obj))

        stats_function = retrieve_stats_from_import_results(
            import_function_results)
        stats_event = retrieve_stats_from_import_results(import_event_results)

        num_processed = stats_function.num_processed + stats_event.num_processed
        num_imported = stats_function.num_imported + stats_event.num_imported
        num_duplicates = stats_function.num_duplicates + stats_event.num_duplicates
        num_ignored = stats_function.num_ignored + stats_event.num_ignored

        if num_processed == 0:
            messages.info(self.request._request,
                          "No function or event signatures found")
        else:
            messages.success(
                self.request._request,
                "Found {0} function and event signatures.  Imported {1}, \
                    Ignored {2}, Skipped {3} duplicates.".format(
                    num_processed,
                    num_imported,
                    num_ignored,
                    num_duplicates,
                ),
            )
        return redirect('signature-list')
Example #4
0
def test_retrieve_stats_from_import_results(array_of_tuples, expected):
    actual = retrieve_stats_from_import_results(array_of_tuples)
    assert actual == expected