def search_packages(conanname, version, username, channel, auth_user): query = request.params.get("q", None) search_service = SearchService(app.authorizer, app.search_manager, auth_user) conan_reference = ConanFileReference(conanname, version, username, channel) info = search_service.search_packages(conan_reference, query) return info
def search_packages(name, version, username, channel, auth_user): query = request.params.get("q", None) search_service = SearchService(app.authorizer, app.server_store, auth_user) conan_reference = ConanFileReference(name, version, username, channel) info = search_service.search_packages(conan_reference, query, v2_compatibility_mode=True) return info
def search_packages(name, version, username, channel, auth_user, revision=None): query = request.params.get("q", None) search_service = SearchService(app.authorizer, app.server_store, auth_user) ref = ConanFileReference(name, version, username, channel, revision) info = search_service.search_packages(ref, query) return info
def search_packages(name, version, username, channel, auth_user, revision=None): v2_compatibility_mode = request.headers.get( "V2_COMPATIBILITY_MODE", "0") == "1" query = request.params.get("q", None) search_service = SearchService(app.authorizer, app.server_store, auth_user) conan_reference = ConanFileReference(name, version, username, channel, revision) info = search_service.search_packages(conan_reference, query, v2_compatibility_mode) return info
class ConanServiceTest(unittest.TestCase): def setUp(self): self.conan_reference = ConanFileReference.loads("openssl/2.0.3@lasote/testing#%s" % DEFAULT_REVISION_V1) self.package_reference = PackageReference(self.conan_reference, "123123123", DEFAULT_REVISION_V1) self.tmp_dir = temp_folder() read_perms = [("*/*@*/*", "*")] write_perms = [] authorizer = BasicAuthorizer(read_perms, write_perms) self.fake_url = "http://url" updown_auth_manager = JWTUpDownAuthManager("secret", timedelta(seconds=200)) adapter = ServerDiskAdapter(self.fake_url, self.tmp_dir, updown_auth_manager) self.server_store = ServerStore(storage_adapter=adapter) self.service = ConanService(authorizer, self.server_store, "lasote") self.search_service = SearchService(authorizer, self.server_store, "lasote") files = hello_source_files("test") save_files(self.server_store.export(self.conan_reference), files) self.server_store.update_last_revision(self.conan_reference) self.conan_digest = FileTreeManifest.create(self.server_store.export(self.conan_reference)) conan_digest_path = os.path.join(self.server_store.export(self.conan_reference), CONAN_MANIFEST) save(conan_digest_path, str(self.conan_digest)) files = hello_source_files("package") save_files(self.server_store.package(self.package_reference), files) def test_get_recipe_snapshot(self): snap = self.service.get_recipe_snapshot(self.conan_reference) base_path = self.server_store.export(self.conan_reference) snap_expected = {'hello.cpp': md5sum(os.path.join(base_path, "hello.cpp")), 'conanmanifest.txt': md5sum(os.path.join(base_path, "conanmanifest.txt")), 'executable': md5sum(os.path.join(base_path, "executable")), 'main.cpp': md5sum(os.path.join(base_path, "main.cpp")), 'CMakeLists.txt': md5sum(os.path.join(base_path, "CMakeLists.txt")), 'hellotest.h': md5sum(os.path.join(base_path, "hellotest.h"))} self.assertEquals(snap, snap_expected) def test_get_conanfile_download_urls(self): urls = self.service.get_conanfile_download_urls(self.conan_reference) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return (self.fake_url + "/" + self.conan_reference.dir_repr() + "/" + self.conan_reference.revision + "/export/" + filename) expected_urls = {'CMakeLists.txt': fake_url_build('CMakeLists.txt'), 'conanmanifest.txt': fake_url_build('conanmanifest.txt'), 'executable': fake_url_build('executable'), 'hello.cpp': fake_url_build('hello.cpp'), 'hellotest.h': fake_url_build('hellotest.h'), 'main.cpp': fake_url_build('main.cpp')} self.assertEquals(urls, expected_urls) def test_get_package_download_urls(self): urls = self.service.get_package_download_urls(self.package_reference) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return (self.fake_url + "/" + self.package_reference.conan.dir_repr() + "/" + self.package_reference.conan.revision + "/package/" + self.package_reference.package_id + "/" + self.package_reference.revision + "/" + filename) expected_urls = {'CMakeLists.txt': fake_url_build('CMakeLists.txt'), 'executable': fake_url_build('executable'), 'hello.cpp': fake_url_build('hello.cpp'), 'hellopackage.h': fake_url_build('hellopackage.h'), 'main.cpp': fake_url_build('main.cpp')} self.assertEquals(urls, expected_urls) def test_get_conanfile_upload_urls(self): urls = self.service.get_conanfile_upload_urls(self.conan_reference, {"conanfile.py": 23, "conanmanifest.txt": 24}) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return (self.fake_url + "/" + self.conan_reference.dir_repr() + "/" + self.conan_reference.revision + "/export/" + filename) expected_urls = {'conanfile.py': fake_url_build('conanfile.py'), 'conanmanifest.txt': fake_url_build('conanmanifest.txt')} self.assertEquals(urls, expected_urls) def test_get_package_upload_urls(self): urls = self.service.get_package_upload_urls(self.package_reference, {"uno.lib": 23, "dos.dll": 24}) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return (self.fake_url + "/" + self.package_reference.conan.dir_repr() + "/" + self.package_reference.conan.revision + "/package/" + self.package_reference.package_id + "/" + self.package_reference.revision + "/" + filename) expected_urls = {'uno.lib': fake_url_build('uno.lib'), 'dos.dll': fake_url_build('dos.dll')} self.assertEquals(urls, expected_urls) def test_search(self): """ check the dict is returned by get_packages_info service """ # Creating and saving conans, packages, and conans.vars conan_ref2 = ConanFileReference("openssl", "3.0", "lasote", "stable", DEFAULT_REVISION_V1) conan_ref3 = ConanFileReference("Assimp", "1.10", "fenix", "stable", DEFAULT_REVISION_V1) conan_ref4 = ConanFileReference("assimpFake", "0.1", "phil", "stable", DEFAULT_REVISION_V1) package_ref2 = PackageReference(conan_ref2, "12345587754", DEFAULT_REVISION_V1) package_ref3 = PackageReference(conan_ref3, "77777777777", DEFAULT_REVISION_V1) conan_vars = """ [options] use_Qt=%s """ conan_vars1 = conan_vars % "True" conan_vars2 = conan_vars % "False" conan_vars3 = conan_vars % "True" save_files(self.server_store.package(self.package_reference), {CONANINFO: conan_vars1}) self.server_store.update_last_package_revision(self.package_reference) save_files(self.server_store.package(package_ref2), {CONANINFO: conan_vars2}) self.server_store.update_last_package_revision(package_ref2) save_files(self.server_store.package(package_ref3), {CONANINFO: conan_vars3}) self.server_store.update_last_package_revision(package_ref3) save_files(self.server_store.export(conan_ref4), {"dummy.txt": "//"}) info = self.search_service.search() expected = [conan_ref3, conan_ref4, self.conan_reference, conan_ref2] self.assertEqual(expected, info) info = self.search_service.search(pattern="Assimp*", ignorecase=False) self.assertEqual(info, [conan_ref3]) info = self.search_service.search_packages(conan_ref2, None, v2_compatibility_mode=False) self.assertEqual(info, {'12345587754': {'full_requires': [], 'options': {'use_Qt': 'False'}, 'settings': {}, 'recipe_hash': None}}) info = self.search_service.search_packages(conan_ref3, None, v2_compatibility_mode=False) self.assertEqual(info, {'77777777777': {'full_requires': [], 'options': {'use_Qt': 'True'}, 'settings': {}, 'recipe_hash': None}}) def remove_test(self): conan_ref2 = ConanFileReference("OpenCV", "3.0", "lasote", "stable", DEFAULT_REVISION_V1) conan_ref3 = ConanFileReference("Assimp", "1.10", "lasote", "stable", DEFAULT_REVISION_V1) package_ref2 = PackageReference(conan_ref2, "12345587754", DEFAULT_REVISION_V1) package_ref3 = PackageReference(conan_ref3, "77777777777", DEFAULT_REVISION_V1) save_files(self.server_store.export(conan_ref2), {"fake.txt": "//fake"}) self.server_store.update_last_revision(conan_ref2) save_files(self.server_store.package(package_ref2), {"fake.txt": "//fake"}) self.server_store.update_last_package_revision(package_ref2) save_files(self.server_store.package(package_ref3), {"fake.txt": "//fake"}) self.server_store.update_last_package_revision(package_ref3) # Delete all the conans folder self.service.remove_conanfile(self.conan_reference) conan_path = self.server_store.conan(self.conan_reference) self.assertFalse(os.path.exists(conan_path)) # Delete one package self.service.remove_packages(conan_ref3, ["77777777777"]) package_folder_3 = self.server_store.package(PackageReference(conan_ref3, '77777777777')) self.assertFalse(os.path.exists(package_folder_3)) # Raise an exception self.assertRaises(NotFoundException, self.service.remove_conanfile, ConanFileReference("Fake", "1.0", "lasote", "stable"))
class ConanServiceTest(unittest.TestCase): def setUp(self): self.conan_reference = ConanFileReference.loads("openssl/2.0.3@lasote/testing") self.package_reference = PackageReference(self.conan_reference, "123123123") self.tmp_dir = temp_folder() read_perms = [("*/*@*/*", "*")] write_perms = [] authorizer = BasicAuthorizer(read_perms, write_perms) self.fake_url = "http://url" updown_auth_manager = JWTUpDownAuthManager("secret", timedelta(seconds=200)) adapter = ServerDiskAdapter(self.fake_url, self.tmp_dir, updown_auth_manager) self.paths = SimplePaths(self.tmp_dir) self.file_manager = FileManager(self.paths, adapter) search_adapter = DiskSearchAdapter() self.search_manager = DiskSearchManager(self.paths, search_adapter) self.service = ConanService(authorizer, self.file_manager, "lasote") self.search_service = SearchService(authorizer, self.search_manager, "lasote") files = hello_source_files("test") save_files(self.paths.export(self.conan_reference), files) self.conan_digest = FileTreeManifest.create(self.paths.export(self.conan_reference)) conan_digest_path = os.path.join(self.paths.export(self.conan_reference), CONAN_MANIFEST) save(conan_digest_path, str(self.conan_digest)) files = hello_source_files("package") save_files(self.paths.package(self.package_reference), files) def test_get_conanfile_snapshot(self): snap = self.service.get_conanfile_snapshot(self.conan_reference) base_path = self.paths.export(self.conan_reference) snap_expected = {'hello.cpp': md5sum(os.path.join(base_path, "hello.cpp")), 'conanmanifest.txt': md5sum(os.path.join(base_path, "conanmanifest.txt")), 'executable': md5sum(os.path.join(base_path, "executable")), 'main.cpp': md5sum(os.path.join(base_path, "main.cpp")), 'CMakeLists.txt': md5sum(os.path.join(base_path, "CMakeLists.txt")), 'hellotest.h': md5sum(os.path.join(base_path, "hellotest.h"))} self.assertEquals(snap, snap_expected) def test_get_conanfile_download_urls(self): urls = self.service.get_conanfile_download_urls(self.conan_reference) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return self.fake_url + "/" + "/".join(self.conan_reference) + "/export/" + filename expected_urls = {'CMakeLists.txt': fake_url_build('CMakeLists.txt'), 'conanmanifest.txt': fake_url_build('conanmanifest.txt'), 'executable': fake_url_build('executable'), 'hello.cpp': fake_url_build('hello.cpp'), 'hellotest.h': fake_url_build('hellotest.h'), 'main.cpp': fake_url_build('main.cpp')} self.assertEquals(urls, expected_urls) def test_get_package_download_urls(self): urls = self.service.get_package_download_urls(self.package_reference) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return self.fake_url + "/" + "/".join(self.package_reference.conan) \ + "/package/" + self.package_reference.package_id + "/" + filename expected_urls = {'CMakeLists.txt': fake_url_build('CMakeLists.txt'), 'executable': fake_url_build('executable'), 'hello.cpp': fake_url_build('hello.cpp'), 'hellopackage.h': fake_url_build('hellopackage.h'), 'main.cpp': fake_url_build('main.cpp')} self.assertEquals(urls, expected_urls) def test_get_conanfile_upload_urls(self): urls = self.service.get_conanfile_upload_urls(self.conan_reference, {"conanfile.py": 23, "conanmanifest.txt": 24}) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return self.fake_url + "/" + "/".join(self.conan_reference) + "/export/" + filename expected_urls = {'conanfile.py': fake_url_build('conanfile.py'), 'conanmanifest.txt': fake_url_build('conanmanifest.txt')} self.assertEquals(urls, expected_urls) def test_get_package_upload_urls(self): urls = self.service.get_package_upload_urls(self.package_reference, {"uno.lib": 23, "dos.dll": 24}) # Remove parameters urls = {name: url.split("?signature")[0] for name, url in urls.items()} def fake_url_build(filename): return self.fake_url + "/" + "/".join(self.package_reference.conan) \ + "/package/" + self.package_reference.package_id + "/" + filename expected_urls = {'uno.lib': fake_url_build('uno.lib'), 'dos.dll': fake_url_build('dos.dll')} self.assertEquals(urls, expected_urls) def test_search(self): """ check the dict is returned by get_packages_info service """ # Creating and saving conans, packages, and conans.vars conan_ref2 = ConanFileReference("openssl", "3.0", "lasote", "stable") conan_ref3 = ConanFileReference("Assimp", "1.10", "fenix", "stable") conan_ref4 = ConanFileReference("assimpFake", "0.1", "phil", "stable") package_ref2 = PackageReference(conan_ref2, "12345587754") package_ref3 = PackageReference(conan_ref3, "77777777777") conan_vars = """ [options] use_Qt=%s """ conan_vars1 = conan_vars % "True" conan_vars2 = conan_vars % "False" conan_vars3 = conan_vars % "True" save_files(self.paths.package(self.package_reference), {CONANINFO: conan_vars1}) save_files(self.paths.package(package_ref2), {CONANINFO: conan_vars2}) save_files(self.paths.package(package_ref3), {CONANINFO: conan_vars3}) save_files(self.paths.export(conan_ref4), {"dummy.txt": "//"}) info = self.search_service.search() expected = [conan_ref3, conan_ref4, self.conan_reference, conan_ref2] self.assertEqual(expected, info) info = self.search_service.search(pattern="Assimp*", ignorecase=False) self.assertEqual(info, [conan_ref3]) info = self.search_service.search_packages(conan_ref2, None) self.assertEqual(info, {'12345587754': {'full_requires': [], 'options': {'use_Qt': 'False'}, 'settings': {}, 'recipe_hash': None}}) info = self.search_service.search_packages(conan_ref3, None) self.assertEqual(info, {'77777777777': {'full_requires': [], 'options': {'use_Qt': 'True'}, 'settings': {}, 'recipe_hash': None}}) def remove_test(self): conan_ref2 = ConanFileReference("OpenCV", "3.0", "lasote", "stable") conan_ref3 = ConanFileReference("Assimp", "1.10", "lasote", "stable") package_ref2 = PackageReference(conan_ref2, "12345587754") package_ref3 = PackageReference(conan_ref3, "77777777777") save_files(self.paths.export(conan_ref2), {"fake.txt": "//fake"}) save_files(self.paths.package(package_ref2), {"fake.txt": "//fake"}) save_files(self.paths.package(package_ref3), {"fake.txt": "//fake"}) # Delete all the conans folder self.service.remove_conanfile(self.conan_reference) conan_path = self.paths.conan(self.conan_reference) self.assertFalse(os.path.exists(conan_path)) # Delete one package self.service.remove_packages(conan_ref3, ["77777777777"]) package_folder_3 = self.paths.package(PackageReference(conan_ref3, '077777777777')) self.assertFalse(os.path.exists(package_folder_3)) # Raise an exception self.assertRaises(NotFoundException, self.service.remove_conanfile, ConanFileReference("Fake", "1.0", "lasote", "stable"))