Skip to content

Instantly share code, notes, and snippets.

@NP-chaonay
Last active June 10, 2020 13:54
Show Gist options
  • Save NP-chaonay/7357b7342cf7ee89f4bfca0b6b3920c6 to your computer and use it in GitHub Desktop.
Save NP-chaonay/7357b7342cf7ee89f4bfca0b6b3920c6 to your computer and use it in GitHub Desktop.
My module that contains general object for using.
# Name : NP-chaonay main module
# Description : My module that contains general object for using.
# Author : Nuttapong Punpipat (NP-chaonay)
# License : MIT License
# Language : English
# Version / Last Programmed : V.1.0 09/06/20 14:33 (UTC)
### TODO ###
# - Update this script : Added print_err
# - Improve print_err
# - Improve another object
###
"""User-created module for accessing general object, created by Nuttapong Punpipat (NP-chaoany)"""
######## Initialization ########
import warnings as _warnings
import time as _time
class ValueWarning(Warning):
"""Warning related value content issue"""
pass
_warnings.filterwarnings('always','',ValueWarning,__name__)
######## Completed ########
def display_datetime(epoch_time=None):
"""Display datetime from specific timestamp from epoch (or using current time).
Optional keyword arguments:
- epoch_time (None, int-alike, or float-alike) : Set timestamp from epoch to be displayed. Set as None to get the current time instead.
"""
if epoch_time is not None and not isinstance(epoch_time,(int,float)):
raise TypeError('Inputted value for \'epoch_time\' should be None, integer-like, or float-like, not \''+epoch_time.__class__.__name__+'\'.'+'\nAt: function:display_datetime, package:'+__name__)
if epoch_time is None:
epoch_time=_time.time()
epoch_time=list(map(lambda x:add_lead_zero(x,2,True),_time.localtime(epoch_time)))
return ':'.join(epoch_time[3:6])+' on '+'-'.join(epoch_time[0:3])
######## Data-Type is in progress ########
def add_lead_zero(num,digit,IgnoreDataManipulation=False,RaiseDataManipulationError=False,DigitMustAtLeastTwo=False):
"""Add leading the letters '0' to inputted integer 'num' according to defined 'digit' and return as string.
Required keyword arguments:
- num (int) : Integer (can be positive, zero, or negative)
- digit (int) : How much digits of number should be in returned string.
Optional keyword arguments:
- IgnoreDataManipulation (bool) : Avoid raising acceptable data manipulation warning.
- RaiseDataManipulationError (bool) : Raise every data manipulation warning as error exception. (IgnoreDataManipulation must be False.)
- DigitMustAtLeastTwo (bool) : Raise warning or error if defined digit is less than 2.
Data manipulation error:
- Digit should be at least 2. (Ignore by default)
- Amount of defined digits is less than digits of number in inputted integer.
"""
if type(num) is not int or type(digit) is not int: raise TypeError('parameters \'num\', \'digit\' should be integer.'+'\nAt: function:display_datetime, package:'+__name__)
if type(IgnoreDataManipulation) is not bool or type(RaiseDataManipulationError) is not bool or type(DigitMustAtLeastTwo) is not bool: raise TypeError('parameters \'IgnoreDataManipulation\', \'RaiseDataManipulationError\', and \'DigitMustAtLeastTwo\' should be boolean.'+'\nAt: function:display_datetime, package:'+__name__)
if IgnoreDataManipulation: RaiseDataManipulationError=False
if digit<1: raise ValueError('Digit should be at least one.'+'\nAt: function:display_datetime, package:'+__name__)
if digit<2 and DigitMustAtLeastTwo:
msg='Amount of digits should be at least 2.'+'\nAt: function:display_datetime, package:'+__name__
if not IgnoreDataManipulation and not RaiseDataManipulationError: _warnings.warn(msg,ValueWarning)
if RaiseDataManipulationError: raise ValueError(msg)
# Reuse variable 'digit'
if num>=0:
num=str(num)
IsNegative=False
else:
num=str(abs(num))
IsNegative=True
digit=digit-len(num)
if digit>0:
for x in range(0,digit):
# Reuse variable 'num'
num='0'+num
if not IsNegative: return num
else: return '-'+num
elif digit==0:
if not IsNegative: return num
else: return '-'+num
else:
msg='Defined digits amount is less than digits of number in inputted integer. It possibly means that some of used data has been manipulated incorrectly.'+'\nAt: function:display_datetime, package:'+__name__
if not IgnoreDataManipulation and not RaiseDataManipulationError: _warnings.warn(msg,ValueWarning)
if RaiseDataManipulationError: raise ValueError(msg)
if not IsNegative: return num
else: return '-'+num
######## No documentation ########
def mean(iter):
return sum(iter)/len(iter)
def median(iter):
list_=sorted(length)
num=len(list_)
if num%2==0:
return (iter[num-1]+iter[num-1])/2
else:
return iter[num]
def is_str_is_integer(string):
if string[0]=='-':
n=1
else: n=0
for char in string[n:]:
if char in ['0','1','2','3','4','5','6','7','8','9']: continue
else: return False
return True
def sec_to_hms(sec):
if not isinstance(sec,(int,float)): raise TypeError('Inputted argument should be integer-like or float-like.'+'\nAt: function:display_datetime, package:'+__name__)
if sec<0: raise ValueError('Inputted argument shouldn\'t be negative.'+'\nAt: function:display_datetime, package:'+__name__)
tmp=sec%3600
result=[None,None,None]
result[0]=int(sec//3600)
result[1]=int(tmp//60)
result[2]=round(tmp%60)
return result
def hms_to_min(hms):
hms=hms.split(':')
if len(hms)!=3: raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__)
for num in hms:
if not is_str_is_integer(num): raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__)
hms=list(map(int,hms))
return hms[0]*60+hms[1]+(hms[2]/60)
def hms_to_sec(hms):
hms=hms.split(':')
if len(hms)!=3: raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__)
for num in hms:
if not is_str_is_integer(num): raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__)
hms=list(map(int,hms))
return hms[0]*3600+hms[1]*60+hms[2]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment