def reload(self): if not self.reloading: from refinery.lib.loader import get_all_entry_points self.reloading = True self.units.clear() self.cache.clear() for executable in get_all_entry_points(): name = executable.__qualname__ self.units[name] = executable.__module__ self.cache[name] = executable self.reloading = False self.save()
def main(): if sys.version_info < (3, 6): print('ERROR: Python version at least 3.6 is required.', file=sys.stderr) sys.exit(0xFADE) if sys.version_info < (3, 7): print('WARNING: Python 3.7 or higher is recommended, some features will be impaired.', file=sys.stderr) def magic(x): return '{}-win64'.format(x) if os.name == 'nt' and x == 'python-magic' else x requirements = [magic(l.strip()) for l in open('requirements.txt', 'r')] requirements = [r for r in requirements if r] with open('README.md', 'r', encoding='UTF8') as README: readme = README.read() readme = re.sub('(?<=\\])\\((?!\\w+://)(.*?)\\)', F'({GITHUB}blob/master/\\1)', readme) setuptools.setup( name='binary-refinery', version='0.1.1', author='Jesko Hüttenhain', description='A toolkit to transform and refine (mostly) binary data.', long_description=readme, long_description_content_type='text/markdown', url=GITHUB, python_requires='>=3.6', classifiers=[ 'Development Status :: 3 - Alpha', 'License :: Other/Proprietary License', 'Operating System :: OS Independent', 'Programming Language :: Python :: 3 :: Only', 'Topic :: System :: Shells', 'Topic :: Utilities' ], packages=setuptools.find_packages( exclude=('test*',) ), install_requires=requirements, entry_points={ 'console_scripts': [ '{}{}={}:{}.run'.format( PREFIX, normalize_name(item.__qualname__), item.__module__, item.__qualname__ ) for item in loader.get_all_entry_points() ] + [ 'binre=refinery.explore:explorer' ] } )
def test_retrofitting(self): log = logging.getLogger() log.warning('retrofit not enforced.') for unit in get_all_entry_points(): legacy_interface = unit.interface.__func__ is not Unit.interface.__func__ if not _retrofitted(unit): if legacy_interface: log.warning(F'requires retrofit: {unit.__qualname__}') continue self.assertFalse( legacy_interface, F'{unit.__qualname__}, is retrofitted but defines an interface.' )
def load(self, *args, **kwargs): name = self._relative_module_path(self.__class__.__module__) try: entry = getattr(refinery, name) except AttributeError: from refinery.lib.loader import get_all_entry_points for entry in get_all_entry_points(): if entry.__name__ == name: break if self._relative_module_path(entry.__module__) == name: break else: raise NameUnknownException(name) return entry(*args, **kwargs)
def setUp(self): super().setUp() self.invertibles = {} self.structured_buffers = [ B'A' * 1024, B'B' + B'A' * 1024, B'FOO' * 200, bytes(range(1, 200)) ] for item in loader.get_all_entry_points(): if item.is_reversible: name = item.__qualname__ try: self.invertibles[name] = (item(), item(reverse=True)) except Exception: pass
def load(self, *args, **kwargs): name = self._relative_module_path(self.__class__.__module__) try: entry = getattr(refinery, name) except AttributeError: from refinery.lib.loader import get_all_entry_points for entry in get_all_entry_points(): if entry.__name__ == name: break if self._relative_module_path(entry.__module__) == name: break else: raise NameUnknownException(name) unit = entry.assemble(*args, **kwargs) unit.log_level = refinery.units.LogLevel.DETACHED return unit
def test_no_legacy_interfaces(self): for unit in get_all_entry_points(): self.assertFalse( hasattr(unit, 'interface') and callable(unit.interface))
def test_unique_entry_point_names(self): entry_points = set() for entry in get_all_entry_points(): self.assertNotIn(entry.__qualname__, entry_points) entry_points.add(entry.__qualname__) self.assertGreaterEqual(len(entry_points), 10)