-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathusername_registration_builder.py
More file actions
38 lines (27 loc) · 1.46 KB
/
username_registration_builder.py
File metadata and controls
38 lines (27 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import re
from crypto.enums.contract_addresses import ContractAddresses
from crypto.exceptions import InvalidUsernameException
from crypto.transactions.builder.abstract_transaction_builder import AbstractTransactionBuilder
from crypto.transactions.types.username_registration import UsernameRegistration
class UsernameRegistrationBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)
self.to(ContractAddresses.USERNAMES.value)
def username(self, username: str):
self.is_valid_username(username)
self.transaction.data['username'] = username
self.transaction.refresh_payload_data()
return self
def get_transaction_instance(self, data: dict):
return UsernameRegistration(data)
@staticmethod
def is_valid_username(username: str) -> bool:
if len(username) < 1 or len(username) > 20:
raise InvalidUsernameException(f'Username must be between 1 and 20 characters long. Got {len(username)} characters.')
if re.match('/[^a-z0-9_]/', username):
raise InvalidUsernameException('Username can only contain lowercase letters, numbers and underscores.')
if re.match('/^_|_$/', username):
raise InvalidUsernameException('Username cannot start or end with an underscore.')
if re.match('/__/', username):
raise InvalidUsernameException('Username cannot contain consecutive underscores.')
return True