def has_package(self, name, arch=None): # If this is a file path, it'll need special handling: if (name.find("/") >= 0 or name.find("\\") >= 0) and \ name.find("://") < 0: # (:// would indicate an url) if not os.path.exists(name): # Non-existing dir, cannot look this up. return False try: name = get_package_name(os.path.abspath(name)) except ValueError: # Failed to look up any meaningful name. return False # Try to look up recipe by name: try: recipe = Recipe.get_recipe(name, self) except ValueError: pass else: name = getattr(recipe, 'site_packages_name', None) or name name = name.replace('.', '/') site_packages_dir = self.get_site_packages_dir(arch) return (exists(join(site_packages_dir, name)) or exists(join(site_packages_dir, name + '.py')) or exists(join(site_packages_dir, name + '.pyc')) or exists(join(site_packages_dir, name + '.pyo')) or exists(join(site_packages_dir, name + '.so')) or glob.glob(join(site_packages_dir, name + '-*.egg')))
def test_get_package_name(): # TEST 1 from external ref with mock.patch("pythonforandroid.pythonpackage." "extract_metainfo_files_from_package", fake_metadata_extract): assert get_package_name("TeStPackaGe") == "testpackage" # TEST 2 from a local folder, for which we'll create a fake package: temp_d = tempfile.mkdtemp(prefix="p4a-pythonpackage-test-tmp-") try: with open(os.path.join(temp_d, "setup.py"), "w") as f: f.write(textwrap.dedent("""\ from setuptools import setup setup(name="testpackage") """ )) pkg_name = get_package_name(temp_d) assert pkg_name == "testpackage" finally: shutil.rmtree(temp_d)