From ce3a50af4265854a7174b2cd55f76811c1a887ad Mon Sep 17 00:00:00 2001 From: Rohitrajak1807 Date: Sun, 11 Jul 2021 19:10:24 +0530 Subject: [PATCH 1/4] using precompiled regex, update regex for username and repositories --- src/gitcomp/gitcomp_core.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/gitcomp/gitcomp_core.py b/src/gitcomp/gitcomp_core.py index 6ed8bec..c09cf3c 100644 --- a/src/gitcomp/gitcomp_core.py +++ b/src/gitcomp/gitcomp_core.py @@ -1,7 +1,9 @@ import re +import sys + from .user import User from .repository import Repository -from typing import List, Dict +from typing import List, Dict, Pattern from .net_mod import NetMod @@ -10,8 +12,13 @@ class GitComp: repos: List[str] user_data: Dict[str, User] = None repo_data: Dict[str, Repository] = None - __username_regex = r'^[a-zA-Z0-9]+' - __repo_regex = r'^[A-Za-z0-9]+/[A-Za-z0-9]+' + # GitHub usernames can be alpha numerical characters with at-most 1 - except in the beginning and the end + # https://regex101.com/r/sYIEPE/2 + __username_regex: Pattern = re.compile(r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9]$)') + # Repository names are currently limited to 100 characters, some special names like . are reserved + __repo_regex: Pattern = re.compile( + r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9])(/)((?=[^.])([^!#@%^&+=()]*)$|((\.{3,})([' + r'^!#@%^&+=()]+)$))') def __init__(self, users: List[str] = None, repos: List[str] = None): self.users = users @@ -25,27 +32,35 @@ def __init__(self, users: List[str] = None, repos: List[str] = None): self.__fetch_repo_data() def __fetch_user_data(self): - self.__validate_user_names() + try: + self.__validate_user_names() + except ValueError as e: + sys.exit(e) response = NetMod().fetch_users_data(self.users) for user in response: self.user_data[user] = User(response[user]) def __validate_user_names(self): for user in self.users: - if not re.match(GitComp.__username_regex, user): + if not GitComp.__username_regex.fullmatch(user) is None: raise ValueError(f""" Improper username {user} """) def __fetch_repo_data(self): - self.__validate_repo_string() + try: + self.__validate_repo_string() + except ValueError as e: + sys.exit(e) + response = NetMod().fetch_repos_data(self.repos) for repo in response: self.repo_data[repo] = Repository(response[repo]) def __validate_repo_string(self): for repo in self.repos: - if not re.match(GitComp.__repo_regex, repo): + if not GitComp.__repo_regex.fullmatch(repo): + print(re.match(GitComp.__repo_regex, repo)) raise ValueError(""" Improper repository format. Provide the repository name as: / From 43b2d4b04ebf1bcd4b63d068ecd401fc84ca7959 Mon Sep 17 00:00:00 2001 From: Rohitrajak1807 Date: Sun, 11 Jul 2021 19:11:11 +0530 Subject: [PATCH 2/4] update regex for repositories --- src/gitcomp/gitcomp_core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gitcomp/gitcomp_core.py b/src/gitcomp/gitcomp_core.py index c09cf3c..cd76dfd 100644 --- a/src/gitcomp/gitcomp_core.py +++ b/src/gitcomp/gitcomp_core.py @@ -17,7 +17,7 @@ class GitComp: __username_regex: Pattern = re.compile(r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9]$)') # Repository names are currently limited to 100 characters, some special names like . are reserved __repo_regex: Pattern = re.compile( - r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9])(/)((?=[^.])([^!#@%^&+=()]*)$|((\.{3,})([' + r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9])(/)((?=[^.])([^!#@%^&+=()]*)$|((\.+)([' r'^!#@%^&+=()]+)$))') def __init__(self, users: List[str] = None, repos: List[str] = None): From 57aadc449c5ab7f5fb4cb74d284b0ec35e461ffd Mon Sep 17 00:00:00 2001 From: Rohitrajak1807 Date: Sun, 11 Jul 2021 19:12:16 +0530 Subject: [PATCH 3/4] add regex test link --- src/gitcomp/gitcomp_core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gitcomp/gitcomp_core.py b/src/gitcomp/gitcomp_core.py index cd76dfd..4276e71 100644 --- a/src/gitcomp/gitcomp_core.py +++ b/src/gitcomp/gitcomp_core.py @@ -16,6 +16,7 @@ class GitComp: # https://regex101.com/r/sYIEPE/2 __username_regex: Pattern = re.compile(r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9]$)') # Repository names are currently limited to 100 characters, some special names like . are reserved + # https://regex101.com/r/ibfDFk/2 __repo_regex: Pattern = re.compile( r'^([A-Za-z0-9])([A-Za-z0-9]*)(-)?([A-Za-z0-9]*)([A-Za-z0-9])(/)((?=[^.])([^!#@%^&+=()]*)$|((\.+)([' r'^!#@%^&+=()]+)$))') From 617196b286e1a46188551c2bacdea6688e555e10 Mon Sep 17 00:00:00 2001 From: Rohitrajak1807 Date: Fri, 16 Jul 2021 20:10:30 +0530 Subject: [PATCH 4/4] using proper conditional --- src/gitcomp/gitcomp_core.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gitcomp/gitcomp_core.py b/src/gitcomp/gitcomp_core.py index 4276e71..960c3e3 100644 --- a/src/gitcomp/gitcomp_core.py +++ b/src/gitcomp/gitcomp_core.py @@ -43,7 +43,7 @@ def __fetch_user_data(self): def __validate_user_names(self): for user in self.users: - if not GitComp.__username_regex.fullmatch(user) is None: + if not GitComp.__username_regex.fullmatch(user): raise ValueError(f""" Improper username {user} """) @@ -61,7 +61,6 @@ def __fetch_repo_data(self): def __validate_repo_string(self): for repo in self.repos: if not GitComp.__repo_regex.fullmatch(repo): - print(re.match(GitComp.__repo_regex, repo)) raise ValueError(""" Improper repository format. Provide the repository name as: /