From 0baf4ba395b3496b9f21f290d268c25ee670be5e Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Tue, 6 Sep 2016 08:36:51 +0200
Subject: [PATCH] Add converters from string for BlockUID

---
 duniterpy/documents/__init__.py |  2 +-
 duniterpy/documents/block.py    | 11 +++++++++++
 tests/documents/test_block.py   | 15 ++++++++++++++-
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/duniterpy/documents/__init__.py b/duniterpy/documents/__init__.py
index a976b3a6..97684351 100644
--- a/duniterpy/documents/__init__.py
+++ b/duniterpy/documents/__init__.py
@@ -1,4 +1,4 @@
-from .block import Block, BlockUID
+from .block import Block, BlockUID, block_uid
 from .certification import SelfCertification, Certification, Revocation
 from .membership import Membership
 from .peer import Endpoint, BMAEndpoint, UnknownEndpoint, Peer
diff --git a/duniterpy/documents/block.py b/duniterpy/documents/block.py
index ebafdcd8..5cf08ee6 100644
--- a/duniterpy/documents/block.py
+++ b/duniterpy/documents/block.py
@@ -7,6 +7,17 @@ from .constants import pubkey_regex, block_id_regex, block_hash_regex
 import re
 
 
+def block_uid(value):
+    if isinstance(value, BlockUID):
+        return value
+    elif isinstance(value, str):
+        return BlockUID.from_str(value)
+    elif value is None:
+        return BlockUID.empty()
+    else:
+        raise TypeError("Cannot convert {0} to BlockUID".format(type(value)))
+
+
 class BlockUID:
     """
     A simple block id
diff --git a/tests/documents/test_block.py b/tests/documents/test_block.py
index 7411ebb1..015d5e2c 100644
--- a/tests/documents/test_block.py
+++ b/tests/documents/test_block.py
@@ -4,7 +4,7 @@ Created on 12 déc. 2014
 @author: inso
 '''
 import unittest
-from duniterpy.documents.block import Block, BlockUID
+from duniterpy.documents.block import Block, BlockUID, block_uid
 
 raw_block = """Version: 2
 Type: Block
@@ -518,6 +518,19 @@ class Test_Block(unittest.TestCase):
         from_rendered_raw = block.from_signed_raw(rendered_raw)
         self.assertEqual(from_rendered_raw.signed_raw(), negative_issuers_frame_var)
 
+    def test_block_uid_converter(self):
+        buid = block_uid("1345-0000338C775613399FA508A8F8B22EB60F525884730639E2A707299E373F43C0")
+        self.assertEqual(buid.number, 1345)
+        self.assertEqual(buid.sha_hash, "0000338C775613399FA508A8F8B22EB60F525884730639E2A707299E373F43C0")
+
+    def test_block_uid_converter_error(self):
+        with self.assertRaises(TypeError):
+            buid = block_uid(1235654)
+
+    def test_block_uid_no_convert(self):
+        buid = block_uid(BlockUID(1345, "0000338C775613399FA508A8F8B22EB60F525884730639E2A707299E373F43C0"))
+        self.assertEqual(buid.number, 1345)
+        self.assertEqual(buid.sha_hash, "0000338C775613399FA508A8F8B22EB60F525884730639E2A707299E373F43C0")
 
 if __name__ == '__main__':
     unittest.main()
-- 
GitLab