Skip to content

Commit 9665975

Browse files
Initial
0 parents  commit 9665975

File tree

5 files changed

+136
-0
lines changed

5 files changed

+136
-0
lines changed

README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Python Add-ons
2+
I programmed This Module for python which<br>
3+
add some ability python don`t have<br>
4+
like **Overriding**
5+
## Overriding
6+
the class uses Type Hints for Overriding
7+
sample of Overriding in python
8+
9+
from addons import Override
10+
11+
@Override # Always Need Type Hint
12+
def printer(data:str)->None:
13+
print("String Data:",data)
14+
15+
@printer.override # automate overriding using Type Hint
16+
def printer_int(data:int)->None:
17+
print("Integer Data:",data)
18+
19+
@printer.override_manual(float)
20+
def printer_float(data)->None:
21+
print("Float Data:",data)
22+
23+
@printer.default
24+
def printer_default(data)->None:
25+
print("Other Data:",data)
26+
27+
printer("123") # output: String Data: 123
28+
printer(123) # output: Integer Data: 123
29+
printer(12.3) # output: FLoat Data: 12.3
30+
printer([1,2,3]) # output: Other Data: [1,2,3]
31+
## Creator
32+
**Author**: **Vahab Programmer**<br>
33+
**Github Page**: **[Vahab-Programmer](https://github.com/Vahab-Programmer)**<br>
34+
**Email**: **vahab.goudarzi.2011@gmail.com**<br>
35+
**Telegram**: **[Vahab Programmer Channel](https://t.me/VPPchl)**<br>

addons/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .classes import *
2+
author="Vahab Programmer https://github.com/Vahab-Programmer"
3+
version="1.0.0"

addons/classes.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from .imports import stdout,stderr,datetime
2+
DEBUG=1
3+
INFO=2
4+
WARNING=3
5+
ERROR=4
6+
CRITICAL=5
7+
UNKNOWN=6
8+
class Override:
9+
def __init__(self,function):
10+
self.__funcmap={}
11+
self.__default=function
12+
self.override(function)
13+
def override(self,function):
14+
args = function.__annotations__.copy()
15+
args.pop("return",None)
16+
args = tuple(args.values())
17+
self.__funcmap[args] = function
18+
return function
19+
def override_manual(self,*args):
20+
args=tuple([arg.__class__ if type(arg) != type else arg for arg in args])
21+
funcmap=self.__funcmap
22+
def wrapper(function):
23+
funcmap[args]=function
24+
return function
25+
return wrapper
26+
def default(self,function)->None:self.__default=function
27+
def __call__(self, *args, **kwargs) -> any:
28+
arg = [type(a) for a in args] + [type(k) for k in kwargs.values()]
29+
func = self.__funcmap.get(tuple(arg), self.__default)
30+
return func(*args, **kwargs) if func else None
31+
class SpecialAscii:
32+
reset = "\033[0m"
33+
bold = "\033[1m"
34+
underline = "\033[4m"
35+
invert = "\033[7m"
36+
black = "\033[30m"
37+
red = "\033[31m"
38+
green = "\033[32m"
39+
yellow = "\033[33m"
40+
blue = "\033[34m"
41+
purple = "\033[35m"
42+
cyan = "\033[36m"
43+
white = "\033[37m"
44+
bg_black = "\033[40m"
45+
bg_red = "\033[41m"
46+
bg_green = "\033[42m"
47+
bg_yellow = "\033[43m"
48+
bg_blue = "\033[44m"
49+
bg_purple = "\033[45m"
50+
bg_cyan = "\033[46m"
51+
bg_white = "\033[47m"
52+
bright_black = "\033[90m"
53+
bright_red = "\033[91m"
54+
bright_green = "\033[92m"
55+
bright_yellow = "\033[93m"
56+
bright_blue = "\033[94m"
57+
bright_purple = "\033[95m"
58+
bright_cyan = "\033[96m"
59+
bright_white = "\033[97m"
60+
bg_bright_black = "\033[100m"
61+
bg_bright_red = "\033[101m"
62+
bg_bright_green = "\033[102m"
63+
bg_bright_yellow = "\033[103m"
64+
bg_bright_blue = "\033[104m"
65+
bg_bright_purple = "\033[105m"
66+
bg_bright_cyan = "\033[106m"
67+
bg_bright_white = "\033[107m"
68+
class Logger:
69+
colorized={DEBUG:SpecialAscii.bright_cyan+"DEBUG"+SpecialAscii.reset,INFO:SpecialAscii.bright_green+"INFO"+SpecialAscii.reset,WARNING:SpecialAscii.bright_yellow+"WARNING"+SpecialAscii.reset,ERROR:SpecialAscii.red+"ERROR"+SpecialAscii.reset,CRITICAL:SpecialAscii.bright_white+SpecialAscii.bg_red+"CRITICAL"+SpecialAscii.reset,UNKNOWN:SpecialAscii.white + SpecialAscii.bg_purple+"UNKNOWN"+SpecialAscii.reset}
70+
non_colorized={DEBUG:"DEBUG",INFO:"INFO",WARNING:"WARNING",ERROR:"ERROR",CRITICAL:"CRITICAL",UNKNOWN:"UNKNOWN"}
71+
def __init__(self,name:str=__name__,log_level:int=INFO,color:bool=True,std_out=stdout,std_err=stderr):
72+
self.__name=name
73+
self.__textmap=self.colorized if color else self.non_colorized
74+
self.__level=log_level
75+
self.__stdout=std_out
76+
self.__stderr=std_err
77+
def log(self,message:str,level:int)->None:
78+
if level <self.__level:return
79+
time=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
80+
level_msg=self.__textmap.get(level)
81+
if not level_msg:level_msg=self.__textmap.get(UNKNOWN)
82+
print("[{}] [{}] {}: {}".format(time,level_msg,self.__name,message),file=self.__stdout if level <=WARNING else self.__stderr)

addons/imports.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from datetime import datetime
2+
from sys import stdout,stderr
3+
from os import name
4+
if name == "nt":
5+
from ctypes import windll,c_uint32,byref
6+
def enable_ansi(hid:int)->None:
7+
kernel32 = windll.kernel32
8+
handle=kernel32.GetStdHandle(hid)
9+
mode=c_uint32()
10+
kernel32.GetConsoleMode(handle,byref(mode))
11+
kernel32.SetConsoleMode(handle,mode.value|0x0004)
12+
enable_ansi(-10)
13+
enable_ansi(-11)
14+
enable_ansi(-12)

setup.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from setuptools import setup, find_packages
2+
setup(name="addons",version="1.0.0",packages=find_packages(),install_requires=[],author="Vahab Programmer",author_email="vahab.goudarzi.2011@gamil.com",description="Python Addons",long_description=open("README.md").read(),long_description_content_type="text/markdown",url="https://github.com/Vahab-Programmer/Python-Addons",classifiers=["Programming Language :: Python :: 3","License :: OSI Approved :: MIT License","Operating System :: OS Independent",],python_requires='>=3.8')

0 commit comments

Comments
 (0)