| 19 | |
| 20 | |
| 21 | class MagicsDisplay: |
| 22 | def __init__(self, magics_manager, ignore=None): |
| 23 | self.ignore = ignore if ignore else [] |
| 24 | self.magics_manager = magics_manager |
| 25 | |
| 26 | def _lsmagic(self): |
| 27 | """The main implementation of the %lsmagic""" |
| 28 | mesc = magic_escapes['line'] |
| 29 | cesc = magic_escapes['cell'] |
| 30 | mman = self.magics_manager |
| 31 | magics = mman.lsmagic() |
| 32 | out = ['Available line magics:', |
| 33 | mesc + (' '+mesc).join(sorted([m for m,v in magics['line'].items() if (v not in self.ignore)])), |
| 34 | '', |
| 35 | 'Available cell magics:', |
| 36 | cesc + (' '+cesc).join(sorted([m for m,v in magics['cell'].items() if (v not in self.ignore)])), |
| 37 | '', |
| 38 | mman.auto_status()] |
| 39 | return '\n'.join(out) |
| 40 | |
| 41 | def _repr_pretty_(self, p, cycle): |
| 42 | p.text(self._lsmagic()) |
| 43 | |
| 44 | def __repr__(self): |
| 45 | return self.__str__() |
| 46 | |
| 47 | def __str__(self): |
| 48 | return self._lsmagic() |
| 49 | |
| 50 | def _jsonable(self): |
| 51 | """turn magics dict into jsonable dict of the same structure |
| 52 | |
| 53 | replaces object instances with their class names as strings |
| 54 | """ |
| 55 | magic_dict = {} |
| 56 | mman = self.magics_manager |
| 57 | magics = mman.lsmagic() |
| 58 | for key, subdict in magics.items(): |
| 59 | d = {} |
| 60 | magic_dict[key] = d |
| 61 | for name, obj in subdict.items(): |
| 62 | try: |
| 63 | classname = obj.__self__.__class__.__name__ |
| 64 | except AttributeError: |
| 65 | classname = 'Other' |
| 66 | |
| 67 | d[name] = classname |
| 68 | return magic_dict |
| 69 | |
| 70 | def _repr_json_(self): |
| 71 | return self._jsonable() |
| 72 | |
| 73 | |
| 74 | @magics_class |
no outgoing calls
no test coverage detected
searching dependent graphs…