From 42b8fe4b2d487854f32323ce3221db05fe136b4f Mon Sep 17 00:00:00 2001 From: justvlade Date: Fri, 26 May 2023 01:07:07 +0300 Subject: [PATCH 1/3] Update utils.py Added restriction_time_to_human_readable function --- utils.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/utils.py b/utils.py index 2b7c3fc..8cfb6f0 100644 --- a/utils.py +++ b/utils.py @@ -20,3 +20,19 @@ def get_restriction_time(string: str) -> typing.Optional[int]: if number.isdigit() and letter in suffix: # if number contains only digits and letter can be converted to seconds return int(number) * suffix[letter] # convert number to seconds return None # if string is not correct we come here and return None + +def restriction_time_to_human_readable(number: int) -> str: + """ + Convert number of seconds to human readable date + :number: seconds + :return: string with human readable data + Month is 4 weeks, not 30 days + Year is 48 weeks and not 365 days + """ + day_order = [ 'y', 'mo', 'w', 'd', 'h', 'm', 's' ] # type of human readable date + day_div = [ None, 12, 4, 7, 24, 60, 60 ] # divider to convert current type to next type + day_content={ _:0 for _ in day_order } # empty date + for i in range(len(day_order)-1,0,-1): # convert number in reverse order to human readable + number, day_content[ day_order[i] ] = divmod(number, day_div[i]) # get current type value and excess number for next conversion + day_content[ day_order[i-1] ] = number # store excess number to next item + return ' '.join([ str(day_content[day])+day for day in day_order if day_content[day] ]) # concatenate nonzero values with their names From b460cc980dd50c0517da8a65afa21f4eb025a41a Mon Sep 17 00:00:00 2001 From: justvlade Date: Mon, 12 Jun 2023 04:10:35 +0300 Subject: [PATCH 2/3] Update utils.py Human readable rewritten to shorten the ouput --- utils.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/utils.py b/utils.py index 8cfb6f0..58a2111 100644 --- a/utils.py +++ b/utils.py @@ -25,14 +25,21 @@ def restriction_time_to_human_readable(number: int) -> str: """ Convert number of seconds to human readable date :number: seconds - :return: string with human readable data - Month is 4 weeks, not 30 days - Year is 48 weeks and not 365 days + :return: string with human readable data one or two nonzero values d,h,m,s or d h, h m, m s """ - day_order = [ 'y', 'mo', 'w', 'd', 'h', 'm', 's' ] # type of human readable date - day_div = [ None, 12, 4, 7, 24, 60, 60 ] # divider to convert current type to next type - day_content={ _:0 for _ in day_order } # empty date - for i in range(len(day_order)-1,0,-1): # convert number in reverse order to human readable - number, day_content[ day_order[i] ] = divmod(number, day_div[i]) # get current type value and excess number for next conversion - day_content[ day_order[i-1] ] = number # store excess number to next item - return ' '.join([ str(day_content[day])+day for day in day_order if day_content[day] ]) # concatenate nonzero values with their names + result=['навсегда'] # permanent ban by default + if number>=30 or number<=31622400: # if <30s or > 366d - permanent ban + day_order = [ 'd', 'h', 'm', 's'] # type of human readable date + day_div = [ 86400, 3600, 60, 1] # divider to convert to this type from seconds + day_last = len(day_order)-1 + for i in range(day_last): # convert number to human readable from larger scale to smaller, except last unit + x, number = divmod(number, day_div[i]) # get current units and the rest seconds to number + if x: # if current units is not zero + result = [str(x) + day_order[i]] # save value and units to answer + y = number // day_div[i+1] # get next unit value + if y: # if next unit value is not zero + result.append(str(y) + day_order[i+1]) # append next unit and value to answer + break # break on first non zero unit found + else: # if no item in for fits + result = [str(number//day_div[day_last]) + day_order[day_last]] # use last units + return ' '.join(result) # unite items with space and return From 4bab65c7dfca27cb5d6f5cfc1fb0fbe69786e58a Mon Sep 17 00:00:00 2001 From: justvlade Date: Mon, 12 Jun 2023 04:12:21 +0300 Subject: [PATCH 3/3] Update utils.py fix typo in not ban if check --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 58a2111..6fd69c4 100644 --- a/utils.py +++ b/utils.py @@ -28,7 +28,7 @@ def restriction_time_to_human_readable(number: int) -> str: :return: string with human readable data one or two nonzero values d,h,m,s or d h, h m, m s """ result=['навсегда'] # permanent ban by default - if number>=30 or number<=31622400: # if <30s or > 366d - permanent ban + if number>=30 and number<=31622400: # if <30s or > 366d - permanent ban day_order = [ 'd', 'h', 'm', 's'] # type of human readable date day_div = [ 86400, 3600, 60, 1] # divider to convert to this type from seconds day_last = len(day_order)-1