-
Benjamin Fischer authoredBenjamin Fischer authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
evil.py 2.20 KiB
# -*- coding: utf-8 -*-
def ccall(func, pass_name=False):
"""
def arguments(): pass
res = func(False, None, 3, key="word", arguments=arguments)``
# becomes
class res(ccall(func), False, None, 3):
key = "word"
def arguments(): pass
"""
class metaclass(type):
def __new__(cls, name, a, d):
d.pop("__module__", 0)
if pass_name:
d["__name__"] = name
return func(*a[1:], **d)
def __call__(*a, **d):
return func(*a, **d)
return type.__new__(metaclass, func.__name__, (), {})
def pin(loc, *skip):
"""
def __init__(self, will, *have, **all):
def the(): pass
variables = 1
del but
pin(locals())
these = 2
"""
loc = dict(loc)
loc.pop("self").__dict__.update(
{
k: v
for k, v in loc.items()
if not any(
s is k or s is True and k.startswith("_") or s is v and isinstance(s, object)
for s in skip
)
}
)
def rebase(obj, want, dont=(), name=None, ns=None):
if isinstance(obj, type):
cls = obj
obj = None
else:
assert obj is not None
cls = type(obj)
if not isinstance(want, (list, tuple)):
want = (want,)
if not isinstance(dont, (list, tuple)):
dont = (dont,)
assert want or dont
want = tuple(w for w in want if w not in cls.__bases__)
if name is None:
name = cls.__name__
for d in dont:
name = name.replace(d.__name__, "", 1)
for w in want:
if w.__name__ not in name:
name += w.__name__
bases = []
for base in cls.__bases__:
if issubclass(base, dont):
bases.extend(want)
want = ()
else:
bases.append(base)
if want:
bases.extend(want)
bases = tuple(bases)
if cls.__bases__ != bases:
if ns is None:
ns = dict(cls.__dict__)
ns.pop("__module__", 1)
if obj is None:
cls = type(name, bases, ns)
else:
obj.__class__ = type(name, bases, ns)
return cls if obj is None else obj