Пример #1
0
 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)
Пример #2
0
 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"])
Пример #3
0
 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()
Пример #4
0
 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)
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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
Пример #10
0
 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
Пример #11
0
 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
Пример #12
0
    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)
Пример #13
0
 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)
Пример #14
0
 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)
Пример #15
0
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"))
Пример #16
0
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"))
Пример #17
0
 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)