def remove_conanfile_files(conanname, version, username, channel, auth_user): """ Remove any existing conanfiles or its packages created """ conan_reference = ConanFileReference(conanname, version, username, channel) conan_service = ConanService(app.authorizer, app.file_manager, auth_user) payload = json.load(request.body) files = [os.path.normpath(filename) for filename in payload["files"]] conan_service.remove_conanfile_files(conan_reference, files)
def remove_packages(conanname, version, username, channel, auth_user): """ Remove any existing conanfiles or its packages created """ conan_reference = ConanFileReference(conanname, version, username, channel) conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reader = codecs.getreader("utf-8") payload = json.load(reader(request.body)) conan_service.remove_packages(conan_reference, payload["package_ids"])
def search(auth_user): pattern = request.params.get("q", None) ignorecase = request.params.get("ignorecase", True) if isinstance(ignorecase, str): ignorecase = False if 'false' == ignorecase.lower() else True conan_service = ConanService(app.authorizer, app.file_manager, auth_user) info = conan_service.search(pattern, ignorecase) return info.serialize()
def remove_packages_files(conanname, version, username, channel, package_id, auth_user): """ Remove any existing conanfiles or its packages created """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) package_reference = PackageReference(reference, package_id) reader = codecs.getreader("utf-8") payload = json.load(reader(request.body)) files = [os.path.normpath(filename) for filename in payload["files"]] conan_service.remove_package_files(package_reference, files)
def get_conanfile_download_urls(conanname, version, username, channel, auth_user): """ Get a dict with all files and the download url """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) urls = conan_service.get_conanfile_download_urls(reference) urls_norm = {filename.replace("\\", "/"): url for filename, url in urls.items()} return urls_norm
def get_conan_digest_url(conanname, version, username, channel, auth_user): """ Get a dict with all files and the download url """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) urls = conan_service.get_conanfile_download_urls(reference, [CONAN_MANIFEST]) if not urls: raise NotFoundException("No digest found") return urls
def get_conanfile_snapshot(conanname, version, username, channel, auth_user): """ Get a dictionary with all files and their each md5s """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) snapshot = conan_service.get_conanfile_snapshot(reference) snapshot_norm = {filename.replace("\\", "/"): the_md5 for filename, the_md5 in snapshot.items()} return snapshot_norm
def get_package_download_urls(conanname, version, username, channel, package_id, auth_user): """ Get a dict with all packages files and the download url for each one """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) package_reference = PackageReference(reference, package_id) urls = conan_service.get_package_download_urls(package_reference) urls_norm = {filename.replace("\\", "/"): url for filename, url in urls.iteritems()} return urls_norm
def get_package_upload_urls(conanname, version, username, channel, package_id, auth_user): """ Get a dict with all files and the upload url """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) package_reference = PackageReference(reference, package_id) filesizes = json.load(request.body) urls = conan_service.get_package_upload_urls(package_reference, filesizes) urls_norm = {filename.replace("\\", "/"): url for filename, url in urls.iteritems()} return urls_norm
def get_conanfile_upload_urls(conanname, version, username, channel, auth_user): """ Get a dict with all files and the upload url """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) reader = codecs.getreader("utf-8") filesizes = json.load(reader(request.body)) urls = conan_service.get_conanfile_upload_urls(reference, filesizes) urls_norm = {filename.replace("\\", "/"): url for filename, url in urls.items()} return urls_norm
def get_package_digest_url(conanname, version, username, channel, package_id, auth_user): """ Get a dict with all files and the download url """ conan_service = ConanService(app.authorizer, app.file_manager, auth_user) reference = ConanFileReference(conanname, version, username, channel) package_reference = PackageReference(reference, package_id) urls = conan_service.get_package_download_urls(package_reference, [CONAN_MANIFEST]) if not urls: raise NotFoundException("No digest found") urls_norm = {filename.replace("\\", "/"): url for filename, url in urls.items()} return urls_norm
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 remove_all_packages(name, version, username, channel, auth_user, revision=None): """ Remove a file from a recipe. The revision is mandatory, because it comes from the upload and the revision is mandatory in v2""" ref = ConanFileReference(name, version, username, channel, revision) conan_service = ConanService(app.authorizer, app.server_store, auth_user) conan_service.remove_all_packages(ref)
def remove_conanfile(conanname, version, username, channel, auth_user): """ Remove any existing conanfiles or its packages created """ conan_reference = ConanFileReference(conanname, version, username, channel) conan_service = ConanService(app.authorizer, app.file_manager, auth_user) conan_service.remove_conanfile(conan_reference)
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"))
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.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.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_conanfile_snapshot(self): snap = self.service.get_conanfile_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 + "/" + "/".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.server_store.package(self.package_reference), {CONANINFO: conan_vars1}) save_files(self.server_store.package(package_ref2), {CONANINFO: conan_vars2}) save_files(self.server_store.package(package_ref3), {CONANINFO: conan_vars3}) 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) 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.server_store.export(conan_ref2), {"fake.txt": "//fake"}) save_files(self.server_store.package(package_ref2), {"fake.txt": "//fake"}) save_files(self.server_store.package(package_ref3), {"fake.txt": "//fake"}) # 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, '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"))