DuniterPy issueshttps://git.duniter.org/clients/python/duniterpy/-/issues2023-06-30T09:03:32+02:00https://git.duniter.org/clients/python/duniterpy/-/issues/204jsonchema bump to v4 (2020-12 draft) breaks bma.blockchain.difficulties2023-06-30T09:03:32+02:00Mouljsonchema bump to v4 (2020-12 draft) breaks bma.blockchain.difficulties### Problem
Since [`jsonschema` bump from v3 to v4](e56163667dc77f609b70cf6c15c5191377860733), at least `bma.blockchain.difficulties` throws [the error in this post](https://github.com/python-jsonschema/jsonschema/issues/852#issuecomment...### Problem
Since [`jsonschema` bump from v3 to v4](e56163667dc77f609b70cf6c15c5191377860733), at least `bma.blockchain.difficulties` throws [the error in this post](https://github.com/python-jsonschema/jsonschema/issues/852#issuecomment-933376870).
<details><summary>Error</summary>
```sh
>>> from duniterpy.api import bma
>>> from duniterpy.api.client import Client
>>> c = Client("BMAS g1.duniter.org 443")
>>> c(bma.blockchain.difficulties)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/work/u23a14/ML/duniterpy/duniterpy/api/client.py", line 442, in __call__
return _function(self, *args, **kwargs)
File "/work/u23a14/ML/duniterpy/duniterpy/api/bma/blockchain.py", line 330, in difficulties
return client.get(f"{MODULE}/difficulties", schema=DIFFICULTIES_SCHEMA)
File "/work/u23a14/ML/duniterpy/duniterpy/api/client.py", line 359, in get
return client.request_url(
File "/work/u23a14/ML/duniterpy/duniterpy/api/client.py", line 274, in request_url
parse_response(content, schema)
File "/work/u23a14/ML/duniterpy/duniterpy/api/client.py", line 89, in parse_response
jsonschema.validate(data, schema)
File "/home/u23a14/.cache/pypoetry/virtualenvs/duniterpy-3m7gpsy_-py3.10/lib/python3.10/site-packages/jsonschema/validators.py", line 1117, in validate
cls.check_schema(schema)
File "/home/u23a14/.cache/pypoetry/virtualenvs/duniterpy-3m7gpsy_-py3.10/lib/python3.10/site-packages/jsonschema/validators.py", line 231, in check_schema
raise exceptions.SchemaError.create_from(error)
jsonschema.exceptions.SchemaError: [{'type': 'object', 'properties': {'uid': {'type': 'string'}, 'level': {'type': 'number'}}, 'required': ['uid', 'level']}] is not of type 'object', 'boolean'
Failed validating 'type' in metaschema['allOf'][1]['properties']['properties']['additionalProperties']['$dynamicRef']['allOf'][1]['properties']['items']['$dynamicRef']['allOf'][0]:
{'$defs': {'anchorString': {'pattern': '^[A-Za-z_][-A-Za-z0-9._]*$',
'type': 'string'},
'uriReferenceString': {'format': 'uri-reference',
'type': 'string'},
'uriString': {'format': 'uri', 'type': 'string'}},
'$dynamicAnchor': 'meta',
'$id': 'https://json-schema.org/draft/2020-12/meta/core',
'$schema': 'https://json-schema.org/draft/2020-12/schema',
'$vocabulary': {'https://json-schema.org/draft/2020-12/vocab/core': True},
'properties': {'$anchor': {'$ref': '#/$defs/anchorString'},
'$comment': {'type': 'string'},
'$defs': {'additionalProperties': {'$dynamicRef': '#meta'},
'type': 'object'},
'$dynamicAnchor': {'$ref': '#/$defs/anchorString'},
'$dynamicRef': {'$ref': '#/$defs/uriReferenceString'},
'$id': {'$comment': 'Non-empty fragments not allowed.',
'$ref': '#/$defs/uriReferenceString',
'pattern': '^[^#]*#?$'},
'$ref': {'$ref': '#/$defs/uriReferenceString'},
'$schema': {'$ref': '#/$defs/uriString'},
'$vocabulary': {'additionalProperties': {'type': 'boolean'},
'propertyNames': {'$ref': '#/$defs/uriString'},
'type': 'object'}},
'title': 'Core vocabulary meta-schema',
'type': ['object', 'boolean']}
On schema['properties']['levels']['items']:
[{'properties': {'level': {'type': 'number'},
'uid': {'type': 'string'}},
'required': ['uid', 'level'],
'type': 'object'}]
```
</details>
### JSON Drafts
From what I understood, [v4 introduced `2020-12` and `2019-09` drafts](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst#v400) and therefore [the last one supported becomes default](https://python-jsonschema.readthedocs.io/en/stable/validate/#the-basics).
These drafts are JSON specifications for `jsonschema` schemas.
### BMA
I quickly checked the other `bma` `GET` requests, and they seem to work. We don’t have (integration) tests checking that the `GET` requests are still working.
`bma.blockchain.difficulties` does not support `2020-12` draft, but supports previous ones.
This seems to be only affecting `bma.blockchain.DIFFICULTIES_SCHEMA` since it’s the only one declaring `"items": []` `items` with a list. I would fix this one by using `prefixItems` as stated in [this ticket](https://github.com/python-jsonschema/jsonschema/issues/852#issuecomment-933376870).
### Solutions
We have these choices:
- switch back to `jsonschema` v3.2.0, but, I would prefer the latter to keep the latest `jsonschema` version
- In `DIFFICULTIES_SCHEMA`:
- set `"$schema": jsonschema.Draft7Validator.META_SCHEMA["$id"],`
- remove the list `[]` wrapping, not sure if this is correct
- set `prefixItems`
### References
- https://json-schema.org/draft/2020-12/release-notes.html#changes-to-items-and-additionalitems
- https://python-jsonschema.readthedocs.io/en/stable/faq/#my-schema-specifies-format-validation-why-do-invalid-instances-seem-valid1.2.0MoulMoulhttps://git.duniter.org/clients/python/duniterpy/-/issues/201Support BMA changes2023-06-06T21:53:33+02:00MoulSupport BMA changes### Sources and transactions retrieval
- nodes/typescript/duniter!1420+:
- `/tx/sources/$pubkey`
- `/tx/sources/$pubkey/pending`
- `/tx/history/$pubkey/`: nodes/typescript/duniter!1425+
- [x] jsonschema: `HISTORY_SCHEMA` set `receivi...### Sources and transactions retrieval
- nodes/typescript/duniter!1420+:
- `/tx/sources/$pubkey`
- `/tx/sources/$pubkey/pending`
- `/tx/history/$pubkey/`: nodes/typescript/duniter!1425+
- [x] jsonschema: `HISTORY_SCHEMA` set `receiving` as non required since the field was removed (also removed from Duniter v1.9)
### Wot: Support to pass `?pubkey` query
- Defaulting `pubkey_query` to:
- `True` would be breaking change when passing a `uid`, but would allow to use the optimization by default
- `False` would not be a breaking change, but requires a change to get the optimization: I go for this option
- `/wot/requirements/$pubkey?pubkey`: nodes/typescript/duniter!1422+
- nodes/typescript/duniter!1423+:
- `/wot/certifiers-of/$pubkey?pubkey`
- `/wot/certified-by/$pubkey?pubkey`
### `node/summary` storage
In `/node/summary` new fields can be added to the jsonschema, but do not set them as mandatory since it would break the backward compatibility
- nodes/typescript/duniter!1424+1.2.0MoulMoulhttps://git.duniter.org/clients/python/duniterpy/-/issues/170Endpoints' regex improvement2021-07-22T18:27:29+02:00MoulEndpoints' regex improvement- [x] Change host regex, to support IDN: Internationalized domain names
- [x] Define more compact ipv6 and ipv4 regex
- [x] Define port regex
- [x] Name capturing groups
- [x] Fix/overcome server/host and ipv4 mix up with BMA(S) and GVA ...- [x] Change host regex, to support IDN: Internationalized domain names
- [x] Define more compact ipv6 and ipv4 regex
- [x] Define port regex
- [x] Name capturing groups
- [x] Fix/overcome server/host and ipv4 mix up with BMA(S) and GVA endpoints1.0.0MoulMoulhttps://git.duniter.org/clients/python/duniterpy/-/issues/154Missing /network/ws2p/info BMA path2021-04-26T19:10:58+02:00MoulMissing /network/ws2p/info BMA path[Found here](https://forum.duniter.org/t/manque-de-places-ws2p-sur-le-reseau-g1/4372/35)
For completion purpose. Not really interesting information for a client here. And BMA is planned to be deprecated.
- [ ] Add `/network/ws2p/info`
...[Found here](https://forum.duniter.org/t/manque-de-places-ws2p-sur-le-reseau-g1/4372/35)
For completion purpose. Not really interesting information for a client here. And BMA is planned to be deprecated.
- [ ] Add `/network/ws2p/info`
- [ ] [Should be documented](https://git.duniter.org/nodes/typescript/duniter/-/blob/dev/doc/HTTP_API.md)Backloghttps://git.duniter.org/clients/python/duniterpy/-/issues/148Deprecate BMA API2021-07-03T10:27:48+02:00MoulDeprecate BMA API- [ ] Set deprecation warnings in earliest possible version
- [ ] Remove BMA related code once major clients (Silkaj) completely migrated away from it. This means GVA provides at least the same requestable datas as BMA has.
- [ ] #135: A...- [ ] Set deprecation warnings in earliest possible version
- [ ] Remove BMA related code once major clients (Silkaj) completely migrated away from it. This means GVA provides at least the same requestable datas as BMA has.
- [ ] #135: Add back `R0801` pylint deactivation which was mostly happening on json schemas2.0.0https://git.duniter.org/clients/python/duniterpy/-/issues/139Rename Endpoints attributes from server to host(name)2021-06-29T18:58:02+02:00MoulRename Endpoints attributes from server to host(name)In `Endpoint`s classes, rename `server` attribute to `host` or `hostname`.
`ConnectionHandler`’s `server` attribute is used as an alias and can contains a domain name, an ipv6, and an ipv4. Could be renamed as `address`. `server` is qui...In `Endpoint`s classes, rename `server` attribute to `host` or `hostname`.
`ConnectionHandler`’s `server` attribute is used as an alias and can contains a domain name, an ipv6, and an ipv4. Could be renamed as `address`. `server` is quite fine.1.0.0MoulMoulhttps://git.duniter.org/clients/python/duniterpy/-/issues/122Implement /wot/requirements-of-pending support in BMA2020-04-02T18:26:06+02:00MoulImplement /wot/requirements-of-pending support in BMA- [x] Implement it support
- [x] Also [document it](https://git.duniter.org/nodes/typescript/duniter/blob/dev/doc/HTTP_API.md#contents)- [x] Implement it support
- [x] Also [document it](https://git.duniter.org/nodes/typescript/duniter/blob/dev/doc/HTTP_API.md#contents)0.57.0Vincent TexierVincent Texierhttps://git.duniter.org/clients/python/duniterpy/-/issues/114Fix bma.blockhain.revoked calling /blockchain/with/excluded2020-04-26T14:55:17+02:00MoulFix bma.blockhain.revoked calling /blockchain/with/excluded7d822aee introduced a new method [`bma.blockchain.revoked` which is exactly the same as `bma.blockchain.excluded`](https://git.duniter.org/clients/python/duniterpy/blob/88107ff04c24c2c6a9c7ab2b1c7526be92dd5149/duniterpy/api/bma/blockchai...7d822aee introduced a new method [`bma.blockchain.revoked` which is exactly the same as `bma.blockchain.excluded`](https://git.duniter.org/clients/python/duniterpy/blob/88107ff04c24c2c6a9c7ab2b1c7526be92dd5149/duniterpy/api/bma/blockchain.py#L394-411) based on `/blockchain/with/excluded`.
Its a bug, cause the blockchain/with/revoked should be called.0.57.0Vincent TexierVincent Texierhttps://git.duniter.org/clients/python/duniterpy/-/issues/110Block.from_signed_raw() usage is not obvious2020-12-10T21:51:10+01:00MoulBlock.from_signed_raw() usage is not obviousParsing a block is not obvious. You have to append to the raw part, the signature and a `\n` to make it work:
```python
block = await bma_client(bma.blockchain.block, block_number)
block = Block.from_signed_raw(block["raw"] + block["sig...Parsing a block is not obvious. You have to append to the raw part, the signature and a `\n` to make it work:
```python
block = await bma_client(bma.blockchain.block, block_number)
block = Block.from_signed_raw(block["raw"] + block["signature"] + "\n")
```
I thought, `from_signed_raw(block["raw"])` was broken, but I found it used this way in Sakia.
We should address this.
Will it be fixed with GVA?
Do we want to implement a `from_json()` in the meantime?Backloghttps://git.duniter.org/clients/python/duniterpy/-/issues/109DuniterPy should not parse the result of a failed request2020-11-30T15:10:40+01:00MoulDuniterPy should not parse the result of a failed requestDuniterPy should not try to parse the result of a request with an HTTP error:
https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/52?u=moul
Here, you can see `jsonschema` failing to parse the result of a 4...DuniterPy should not try to parse the result of a request with an HTTP error:
https://forum.duniter.org/t/remuneration-des-contributeurs-au-projet-duniter/4995/52?u=moul
Here, you can see `jsonschema` failing to parse the result of a 429 error:
```bash
Traceback (most recent call last):
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 141, in requests_get
error_data = parse_error(await response.text())
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 65, in parse_error
raise jsonschema.ValidationError("Could not parse json : {0}".format(str(e)))
jsonschema.exceptions.ValidationError: Could not parse json : Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/inso/.pyenv/versions/silkaj-3.7/bin/silkaj", line 23, in <module>
cli(obj={})
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tools.py", line 70, in wrapper
return loop.run_until_complete(f(*args, **kwargs))
File "/home/inso/.pyenv/versions/3.7.0/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
return future.result()
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tx.py", line 99, in send_transaction
key, issuer_pubkey, tx_amount, outputAddresses, comment, outputbackchange
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tx.py", line 237, in handle_intermediaries_transactions
OutputbackChange,
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tx.py", line 277, in generate_and_send_transaction
OutputbackChange,
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tx.py", line 307, in generate_transaction_document
head_block = await HeadBlock().head_block
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/network_tools.py", line 244, in get_head
return await client(blockchain.current)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/bma/blockchain.py", line 392, in current
return await client.get(MODULE + '/current', schema=BLOCK_SCHEMA)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 231, in get
response = await client.requests_get(url_path, **params)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 144, in requests_get
raise ValueError('status code != 200 => %d (%s)' % (response.status, (await response.text())))
ValueError: status code != 200 => 429 (Error)
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fd385bca8d0>
ERROR:asyncio:Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7fd385b07888>, 4002.554372885)]']
connector: <aiohttp.connector.TCPConnector object at 0x7fd385bca9e8>
Traceback (most recent call last):
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 141, in requests_get
error_data = parse_error(await response.text())
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 65, in parse_error
raise jsonschema.ValidationError("Could not parse json : {0}".format(str(e)))
jsonschema.exceptions.ValidationError: Could not parse json : Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/inso/.pyenv/versions/silkaj-3.7/bin/silkaj", line 23, in <module>
cli(obj={})
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tools.py", line 70, in wrapper
return loop.run_until_complete(f(*args, **kwargs))
File "/home/inso/.pyenv/versions/3.7.0/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
return future.result()
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/tx.py", line 68, in send_transaction
pubkey_amount = await get_amount_from_pubkey(issuer_pubkey)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/money.py", line 117, in get_amount_from_pubkey
listinput, amount = await get_sources(pubkey)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/silkaj/money.py", line 128, in get_sources
sources = await client(tx.sources, pubkey)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/bma/tx.py", line 236, in sources
return await client.get(MODULE + '/sources/%s' % pubkey, schema=SOURCES_SCHEMA)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 231, in get
response = await client.requests_get(url_path, **params)
File "/home/inso/.pyenv/versions/3.7.0/envs/silkaj-3.7/lib/python3.7/site-packages/duniterpy/api/client.py", line 144, in requests_get
raise ValueError('status code != 200 => %d (%s)' % (response.status, (await response.text())))
ValueError: status code != 200 => 429 (Error)
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7f51690d3978>
ERROR:asyncio:Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7f516900e888>, 4003.371805189)]']
connector: <aiohttp.connector.TCPConnector object at 0x7f51690d38d0>
```Backloghttps://git.duniter.org/clients/python/duniterpy/-/issues/81Three fields missing in bma.tx.history jsonschema2021-04-08T16:34:03+02:00MoulThree fields missing in bma.tx.history jsonschema`blockstampTime`, `locktime`, `blockstamp` are missing from [`bma.tx.history` `jsonschema`](https://git.duniter.org/clients/python/duniterpy/blob/dev/duniterpy/api/bma/tx.py#L28-166):
```json
{
"version": 10,
"lockt...`blockstampTime`, `locktime`, `blockstamp` are missing from [`bma.tx.history` `jsonschema`](https://git.duniter.org/clients/python/duniterpy/blob/dev/duniterpy/api/bma/tx.py#L28-166):
```json
{
"version": 10,
"locktime": 0,
"blockstamp": "214042-0000012B3AA19F9336AC1C75597257DD2C0BBC434721F5590F5F00A00CC06C09",
"blockstampTime": 1555178948,
```Backloghttps://git.duniter.org/clients/python/duniterpy/-/issues/65Not possible to use blockchain/with/*2019-06-05T17:01:38+02:00MoulNot possible to use blockchain/with/*```bash
blockswithud = await client(blockchain.with.ud)
^
SyntaxError: invalid syntax
```
Because of `with` keyword.```bash
blockswithud = await client(blockchain.with.ud)
^
SyntaxError: invalid syntax
```
Because of `with` keyword.0.51.0Vincent TexierVincent Texierhttps://git.duniter.org/clients/python/duniterpy/-/issues/64Add automatic p2p multi-nodes requests to spread the load on nodes2023-07-08T15:27:19+02:00Vincent TexierAdd automatic p2p multi-nodes requests to spread the load on nodesDuniterpy should handle multi-nodes requests to share the write load on nodes and to ensure to have the most valid information of the blockchain consensus.
Client should not care about how and where the requests are sent, and all the co...Duniterpy should handle multi-nodes requests to share the write load on nodes and to ensure to have the most valid information of the blockchain consensus.
Client should not care about how and where the requests are sent, and all the complexity should be in the library.
Then, all clients using Duniterpy, will be really p2p clients.
Sakia implementation : https://git.duniter.org/clients/python/sakia/blob/master/src/sakia/services/network.py#L250Backloghttps://git.duniter.org/clients/python/duniterpy/-/issues/36Request data example is not working2020-06-06T20:26:59+02:00MoulRequest data example is not workinghttps://github.com/duniter/duniter-python-api/wiki/Request-data is not working
```python
python3 test.py
Creating a client session outside of coroutine
client_session: <aiohttp.client.ClientSession object at 0x7f0b62d151d0>
Trace...https://github.com/duniter/duniter-python-api/wiki/Request-data is not working
```python
python3 test.py
Creating a client session outside of coroutine
client_session: <aiohttp.client.ClientSession object at 0x7f0b62d151d0>
Traceback (most recent call last):
File "test.py", line 44, in <module>
asyncio.get_event_loop().run_until_complete(main())
File "/usr/lib64/python3.5/asyncio/base_events.py", line 387, in run_until_complete
return future.result()
File "/usr/lib64/python3.5/asyncio/futures.py", line 274, in result
raise self._exception
File "/usr/lib64/python3.5/asyncio/tasks.py", line 239, in _step
result = coro.send(None)
File "test.py", line 29, in main
response = await bma.node.Summary(connection).get(AIOHTTP_SESSION)
AttributeError: module 'duniterpy.api.bma.node' has no attribute 'Summary'
```https://git.duniter.org/clients/python/duniterpy/-/issues/12Parsing version field2019-01-15T00:03:14+01:00insoParsing version fieldThe version field is sometimes an int, sometime a string. Should be parsed the same for every request.
The version field is sometimes an int, sometime a string. Should be parsed the same for every request.
https://git.duniter.org/clients/python/duniterpy/-/issues/11Crash when node does not return json data2019-01-15T00:03:39+01:00insoCrash when node does not return json dataReference : https://github.com/ucoin-io/cutecoin/issues/235
Reference : https://github.com/ucoin-io/cutecoin/issues/235