AOP (Aspect-Oriented Programming) helper for Python
Project description
AOPHelper – Python을 위한 강력한 AOP 라이브러리
AOPHelper는 Python에서 **Aspect-Oriented Programming(AOP, 관점 지향 프로그래밍)**을 쉽게 적용할 수 있도록 도와주는 라이브러리입니다.
@Aspect 데코레이터를 사용하여 로깅, 성능 측정, 예외 처리 등을 간편하게 적용하세요!
🚀 설치 방법
pip install aophelper
🔥 빠른 시작
✅ 기본 AOP 적용 예제
from aophelper import Aspect, BaseAdvice
class LoggingAdvice(BaseAdvice):
def before(self, func, *args, **kwargs):
print(f"🚀 {func.__name__} 실행 시작!")
def after(self, func, result, *args, **kwargs):
print(f"✅ {func.__name__} 실행 완료! 결과: {result}")
aspect = Aspect()
aspect.set_advice(LoggingAdvice())
@aspect.apply
def add(x, y):
return x + y
print(add(10, 20))
출력 결과
🚀 add 실행 시작! ✅ add 실행 완료! 결과: 30
📌 주요 기능
기능 설명
- ✅ before() 함수 실행 전에 수행할 작업 추가
- ⚡ around() 함수 실행 시간 측정 및 실행 방식 제어 가능
- 🛑 on_exception() 예외 발생 시 자동 처리 및 로깅 가능
- 📢 after() 함수 실행 후 결과를 후처리 가능
- 🔄 비동기 지원 async def 함수에도 AOP 적용 가능
🛠 각 기능의 예제 코드
✅ before() – 함수 실행 전에 동작 추가
from aophelper import Aspect, BaseAdvice
class MyAdvice(BaseAdvice):
def before(self, func, *args, **kwargs):
print(f"{func.__name__} 실행 전! 매개변수: {args}, {kwargs}")
aspect = Aspect()
aspect.set_advice(MyAdvice())
@aspect.apply
def greet(name):
print(f"안녕하세요, {name}님!")
greet("Alice")
출력 결과
greet 실행 전! 매개변수: ('Alice',), {}
안녕하세요, Alice님!
⚡ around() – 실행 시간 측정 및 동작 변경
import time
class TimerAdvice(BaseAdvice):
def around(self, func, *args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 실행 시간: {end - start:.4f}초")
return result
aspect.set_advice(TimerAdvice())
@aspect.apply
def slow_function():
time.sleep(2)
print("작업 완료!")
slow_function()
출력 결과
작업 완료!
slow_function 실행 시간: 2.0050초
🛑 on_exception() – 예외 발생 시 자동 처리
class ErrorHandlerAdvice(BaseAdvice):
def on_exception(self, func, exception, *args, **kwargs):
print(f"{func.__name__}에서 오류 발생: {exception}")
aspect.set_advice(ErrorHandlerAdvice())
@aspect.apply
def error_function():
raise ValueError("잘못된 값!")
error_function()
출력 결과
error_function에서 오류 발생: 잘못된 값!
📢 after() – 실행 후 후처리
class PostProcessingAdvice(BaseAdvice):
def after(self, func, result, *args, **kwargs):
print(f"{func.__name__} 실행 완료! 결과: {result}")
aspect.set_advice(PostProcessingAdvice())
@aspect.apply
def multiply(x, y):
return x * y
print(multiply(5, 10))
출력 결과
multiply 실행 완료! 결과: 50
50
🔄 비동기 함수(async def) 지원
AOPHelper는 async def 함수에도 적용할 수 있습니다.
import asyncio
class AsyncAdvice(BaseAdvice):
async def before(self, func, *args, **kwargs):
print(f"(비동기) {func.__name__} 실행 전!")
aspect.set_advice(AsyncAdvice())
@aspect.apply
async def async_task():
await asyncio.sleep(1)
print("비동기 작업 완료!")
asyncio.run(async_task())
출력 결과
(비동기) async_task 실행 전!
비동기 작업 완료!
이제 더 강력한 AOP 기능을 활용해 보세요! 🚀
기여 방법
버그 리포트나 기능 제안은 GitHub Issues에 남겨주세요
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aophelper-0.5.0.tar.gz.
File metadata
- Download URL: aophelper-0.5.0.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d6c3a9beb9f4270adc2cf2d11b21354111e71bbe2c8f70ca16908435ee2af58
|
|
| MD5 |
374aa164979e8d74b87e71370bfba030
|
|
| BLAKE2b-256 |
1bf8e9759df461e32278b241d5084e6d040f530ab5d1d1dd2c273fb2fcf55f42
|
File details
Details for the file aophelper-0.5.0-py3-none-any.whl.
File metadata
- Download URL: aophelper-0.5.0-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c05f6ad2b445fd693be89d5796648ce2f1117cf693d34c4c50e385fe7bc7369a
|
|
| MD5 |
f425fb71ddd0e6109abdb9220e2f0346
|
|
| BLAKE2b-256 |
a878d8a75d97c2093798849eae811bd9025443e9efbbf78bf032cf1d69db0f43
|