mapping = {"⚰️": "deathbeds", "🐼": "pandas", "📈": "matplotlib", "📉": "matplotlib", "📊": "seaborn"}
Create a string transformer that replaces emojis.
Permit the ability to name emojis using a double equal sign.
import ast
Emojis from equal sign and imports These are two separate functions
def emoji_from_assignment(str, mapping):
if '=' not in str: return
emojis = []
for part in str.split('=', 2)[:2]:
if not part: break # This is an equal sign
try:
if isinstance(getattr(ast.parse(part.strip()).body[0], 'value', None), ast.Name):
while emojis: mapping[emojis.pop()] = part.strip()
except SyntaxError: emojis.append(part.strip())
Emojis should be defined in the import line.
def emoji_from_import_as(str, mapping): ...
from deathbeds.__Markdown__ import CallableTransformer
class EmojiTransformer(CallableTransformer):
def __call__(self, str):
global mapping
for section in str.split(';'):
emoji_from_assignment(str, mapping)
emoji_from_import_as(str, mapping)
for key, value in mapping.items():
str = str.replace(key, value)
return str
def load_ipython_extension(ip): ip.input_transformer_manager.physical_line_transforms.insert(0, EmojiTransformer())
def unload_ipython_extension(ip): ip.input_transformer_manager.physical_line_transforms = [
object for object in ip.input_transformer_manager.physical_line_transforms if not isinstance(object, EmojiTransformer)]
from pytest import fixture
@fixture
def ip(): ip = __import__('IPython').get_ipython(); load_ipython_extension(ip); yield ip; unload_ipython_extension(ip)
def _emoji_replacement(ip):
ip.run_cell(""">>> import 🎩👒
>>> from 📉.pyplot import gca
>>> import 🐼
>>> assert 🐼.util.testing.makeDataFrame() is not None
>>> import ⚰️
>>> import 👀🐍
>>> assert 👀🐍👀(👀🐍)""")