Library Idea: Emaillib
※ 이 글은 원본이 갱신되었습니다. 원본을 읽어주시면 감사하겠습니다.
Python 3.5에선 여러가지 기능이 추가되는데 그 중 한가지로@ 연산자가 추가된다.
원래 목적은 행렬곱을 보다 깔끔하게 표현하자는 취지이다.
NumPy등을 배려해주는 취지로 보인다. 하지만 나는 @ 연산자를 보고 엉뚱한 생각을 했다.
저걸로 Email 주소를 표현해보면 어떨까?
일단 첫 아이디어는 다음과 같았다.
>>> from emaillib import Host
>>> gmail = Host('gmail.com')
>>> addr = 'somebody' @ gmail
>>> str(addr)
[email protected]
(소스 강조에 @ 부분에 경고가 떠서 보일텐데, 이건 소스가 아니라 Pygments의 문제이다.
언젠가 고쳐지길 희망해본다.)
이것은 Python 3.5에서 추가되는 __rmulmat__을 구현하면 실제 구현이 가능하다.
이것을 가지고 농담따먹기를 하다가 메일을 실제로 보낼 수도 있어야 하지 않냐는 이야기가 나와서 이런 예제 코드를 만들게 되었다.
>>> from emaillib import Host
>>> gmail = Host('gmail.com')
>>> hotmail = Host('hotmail.com')
>>> subject = 'Hey! You are hacked!'
>>> content = 'Check Your Account!'
>>> 'sender' @ gmail / subject // content >> ['hacked' @ gmail, 'hacked2' @ hotmail]
Sended!
사실 구현 자체는 가능할 것으로 보인다.
다만 문제는 이것은 파이썬의 철학에 철저하게 위배되는 구성이다.
누가 저걸 보고 메일을 보내는 동작이라고 상상이나 할 수 있겠는가?
그래서 조금 더 명확한 표현법을 쓰는 방식으로 바꿔보았다.
>>> from emaillib import Host
>>> gmail = Host('gmail.com')
>>> hotmail = Host('hotmail.com')
>>> mail = 'sender' @ gmail
>>> mail.receivers = ['hacked' @ gmail, 'hacked2' @ hotmail]
>>> mail.subject = 'Hey! You are hacked!'
>>> mail.content = 'Check Your Account!'
>>> mail.attach_file('hack.log', open('hack.log'))
>>> mail.charset = 'utf-8'
>>> mail.server = 'localhost'
>>> mail.send()
Sended!
그나마 이쪽은 조금 더 소스가 눈에 잘 들어온다.
(나만 그럴지도 모르지만)
이쯤 되면 장난감 프로젝트라기보다는 @ 연산자는 joke point일 뿐인 email wrapper가 될 것 같다.
다만 Python 3.5 이상에서만 joke point를 쓸 수 있으니 상관 없을지도 모르겠다.
이것을 실제로 구현을 할지 말지로 고민중에 있긴 한데, 사실 이미 maillib이라는 프로젝트가 있기 때문에 그 앞에 e한글자만 더 붙여서 만드는건 좀 얌체짓 아닌가 싶은 생각을 하고 있다.
(물론 사용법이 절대적으로 다르고 저쪽도 아직 Alpha라는 점이 중요하지만)
아는 프로그래머 E모님께서는1 @ 연산자를 가지고 decorator에 장난을 치는 사람이 나올 것 같다고 하셨는데, 상당히 끔찍한 발상이라고 생각한다.
그에 비하면 내가 낸 아이디어는 그냥 웃고 넘어갈 수 있는 수준이니까 괜찮지 않을까 하는 생각을 해본다.
아마 지금 하고 있는 일이 끝나면 Python 3.5 beta를 깔고 실제로 구현해보지 않을까 하는 생각이 들고 있긴 하다.
- 이상한 모임의 주인장의 별명인
이모님을 말한게 아니다! ↩