Skip to content
Snippets Groups Projects

Add README.rst for PyPI

Merged Vincent Texier requested to merge dev into master

Files

+ 43
29
import attr
import attr
import re
import re
 
from ..document import MalformedDocumentError
from ..block import BlockUID
from ..block import BlockUID
from ..constants import ws2p_public_prefix_regex, ws2p_private_prefix_regex,\
from ..constants import ws2p_public_prefix_regex, ws2p_private_prefix_regex,\
pubkey_regex, signature_regex, ws2pid_regex, block_uid_regex, ws2p_head_regex
pubkey_regex, signature_regex, ws2pid_regex, block_uid_regex, ws2p_head_regex
@@ -43,13 +44,16 @@ class Head:
@@ -43,13 +44,16 @@ class Head:
@classmethod
@classmethod
def from_inline(cls, inline):
def from_inline(cls, inline):
data = Head.re_inline.match(inline)
try:
head = data.group(0).split(':')
data = Head.re_inline.match(inline)
if len(head) == 2:
head = data.group(0).split(':')
version = int(head[1])
if len(head) == 2:
else:
version = int(head[1])
version = 0
else:
return cls(version)
version = 0
 
return cls(version)
 
except AttributeError:
 
raise MalformedDocumentError("Head")
def __str__(self):
def __str__(self):
return "HEAD" if self.version == 0 else "HEAD:{}".format(str(self.version))
return "HEAD" if self.version == 0 else "HEAD:{}".format(str(self.version))
@@ -79,14 +83,17 @@ class HeadV0:
@@ -79,14 +83,17 @@ class HeadV0:
@classmethod
@classmethod
def from_inline(cls, inline, signature):
def from_inline(cls, inline, signature):
data = HeadV0.re_inline.match(inline)
try:
api = API.from_inline(data.group(1))
data = HeadV0.re_inline.match(inline)
head = Head.from_inline(data.group(2))
api = API.from_inline(data.group(1))
pubkey = data.group(3)
head = Head.from_inline(data.group(2))
blockstamp = BlockUID.from_str(data.group(4))
pubkey = data.group(3)
offload = data.group(5)
blockstamp = BlockUID.from_str(data.group(4))
offload = data.group(5)
return cls(signature, api, head, pubkey, blockstamp), offload
 
return cls(signature, api, head, pubkey, blockstamp), offload
 
except AttributeError:
 
raise MalformedDocumentError("HeadV0")
def inline(self):
def inline(self):
values = (str(v) for v in attr.astuple(self, recurse=False,
values = (str(v) for v in attr.astuple(self, recurse=False,
@@ -101,7 +108,7 @@ class HeadV1:
@@ -101,7 +108,7 @@ class HeadV1:
.format(
.format(
ws2pid=ws2pid_regex,
ws2pid=ws2pid_regex,
software="[A-Za-z-_]+",
software="[A-Za-z-_]+",
software_version="[0-9]+[.][0-9]+[.][0-9]+",
software_version="[0-9]+[.][0-9]+[.][0-9]+-?[A-Za-z0-9\.]+",
pow_prefix="[0-9]+"))
pow_prefix="[0-9]+"))
v0 = attr.ib(type=HeadV0)
v0 = attr.ib(type=HeadV0)
@@ -112,14 +119,18 @@ class HeadV1:
@@ -112,14 +119,18 @@ class HeadV1:
@classmethod
@classmethod
def from_inline(cls, inline, signature):
def from_inline(cls, inline, signature):
v0, offload = HeadV0.from_inline(inline, signature)
try:
data = HeadV1.re_inline.match(offload)
v0, offload = HeadV0.from_inline(inline, signature)
ws2pid = data.group(1)
inline = HeadV1.re_inline
software = data.group(2)
data = HeadV1.re_inline.match(offload)
software_version = data.group(3)
ws2pid = data.group(1)
pow_prefix = int(data.group(4))
software = data.group(2)
offload = data.group(5)
software_version = data.group(3)
return cls(v0, ws2pid, software, software_version, pow_prefix), offload
pow_prefix = int(data.group(4))
 
offload = data.group(5)
 
return cls(v0, ws2pid, software, software_version, pow_prefix), offload
 
except AttributeError:
 
raise MalformedDocumentError("HeadV1")
def inline(self):
def inline(self):
values = [str(v) for v in attr.astuple(self, True, filter=attr.filters.exclude(attr.fields(HeadV1).v0))]
values = [str(v) for v in attr.astuple(self, True, filter=attr.filters.exclude(attr.fields(HeadV1).v0))]
@@ -150,11 +161,14 @@ class HeadV2:
@@ -150,11 +161,14 @@ class HeadV2:
@classmethod
@classmethod
def from_inline(cls, inline, signature):
def from_inline(cls, inline, signature):
v1, offload = HeadV1.from_inline(inline, signature)
try:
data = HeadV2.re_inline.match(offload)
v1, offload = HeadV1.from_inline(inline, signature)
free_member_room = int(data.group(1))
data = HeadV2.re_inline.match(offload)
free_mirror_room = int(data.group(2))
free_member_room = int(data.group(1))
return cls(v1, free_member_room, free_mirror_room), ""
free_mirror_room = int(data.group(2))
 
return cls(v1, free_member_room, free_mirror_room), ""
 
except AttributeError:
 
raise MalformedDocumentError("HeadV2")
def inline(self):
def inline(self):
values = (str(v) for v in attr.astuple(self, True, filter=attr.filters.exclude(attr.fields(HeadV2).v1)))
values = (str(v) for v in attr.astuple(self, True, filter=attr.filters.exclude(attr.fields(HeadV2).v1)))
Loading