示例#1
0
    def test_no_diff(self, db_request, monkeypatch, bq_schema):
        project = ProjectFactory.create()
        release = ReleaseFactory.create(project=project)
        release_file = FileFactory.create(
            release=release, filename=f"foobar-{release.version}.tar.gz")

        query = pretend.stub(result=pretend.call_recorder(
            lambda *a, **kw: [{
                "md5_digest": release_file.md5_digest
            }]))
        get_table = pretend.stub(schema=bq_schema)
        bigquery = pretend.stub(
            get_table=pretend.call_recorder(lambda t: get_table),
            query=pretend.call_recorder(lambda q: query),
        )

        @pretend.call_recorder
        def find_service(name=None):
            if name == "gcloud.bigquery":
                return bigquery
            raise LookupError

        db_request.find_service = find_service
        db_request.registry.settings = {
            "warehouse.release_files_table": "example.pypi.distributions"
        }

        sync_bigquery_release_files(db_request)

        assert db_request.find_service.calls == [
            pretend.call(name="gcloud.bigquery")
        ]
        assert bigquery.get_table.calls == [
            pretend.call("example.pypi.distributions")
        ]
        assert bigquery.query.calls == [
            pretend.call(
                "SELECT md5_digest "
                "FROM example.pypi.distributions "
                f"WHERE md5_digest LIKE '{first}{second}%'", )
            for first, second in product("0123456789abcdef", repeat=2)
        ]
示例#2
0
    def test_sync_rows(self, db_request, monkeypatch, bq_schema):
        project = ProjectFactory.create()
        description = DescriptionFactory.create()
        release = ReleaseFactory.create(project=project,
                                        description=description)
        release.platform = "test_platform"
        release_file = FileFactory.create(
            release=release,
            filename=f"foobar-{release.version}.tar.gz",
            md5_digest="01ca4238a0b923820dcc509a6f75849b",
        )
        release_file2 = FileFactory.create(
            release=release,
            filename=f"fizzbuzz-{release.version}.tar.gz",
            md5_digest="01casd342fb952820dcc509a6f75849b",
        )
        release._classifiers.append(
            ClassifierFactory.create(classifier="foo :: bar"))
        release._classifiers.append(
            ClassifierFactory.create(classifier="foo :: baz"))
        release._classifiers.append(
            ClassifierFactory.create(classifier="fiz :: buz"))
        DependencyFactory.create(release=release, kind=1)
        DependencyFactory.create(release=release, kind=1)
        DependencyFactory.create(release=release, kind=2)
        DependencyFactory.create(release=release, kind=3)
        DependencyFactory.create(release=release, kind=4)
        load_config = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr("warehouse.packaging.tasks.LoadJobConfig",
                            load_config)

        query = pretend.stub(result=pretend.call_recorder(
            lambda *a, **kw: [{
                "md5_digest": release_file2.md5_digest
            }]))
        get_table = pretend.stub(schema=bq_schema)
        get_result = pretend.stub(result=lambda: None)
        bigquery = pretend.stub(
            get_table=pretend.call_recorder(lambda t: get_table),
            load_table_from_json=pretend.call_recorder(
                lambda *a, **kw: get_result),
            query=pretend.call_recorder(lambda q: query),
        )

        @pretend.call_recorder
        def find_service(name=None):
            if name == "gcloud.bigquery":
                return bigquery
            raise LookupError

        db_request.find_service = find_service
        db_request.registry.settings = {
            "warehouse.release_files_table": "example.pypi.distributions"
        }

        sync_bigquery_release_files(db_request)

        assert db_request.find_service.calls == [
            pretend.call(name="gcloud.bigquery")
        ]
        assert bigquery.get_table.calls == [
            pretend.call("example.pypi.distributions")
        ]
        assert bigquery.query.calls == [
            pretend.call("SELECT md5_digest "
                         "FROM example.pypi.distributions "
                         "WHERE md5_digest LIKE '00%'"),
            pretend.call("SELECT md5_digest "
                         "FROM example.pypi.distributions "
                         "WHERE md5_digest LIKE '01%'"),
        ]
        assert bigquery.load_table_from_json.calls == [
            pretend.call(
                [
                    {
                        "metadata_version": None,
                        "name": project.name,
                        "version": release.version,
                        "summary": release.summary,
                        "description": description.raw,
                        "description_content_type": description.content_type
                        or None,
                        "author": release.author or None,
                        "author_email": release.author_email or None,
                        "maintainer": release.maintainer or None,
                        "maintainer_email": release.maintainer_email or None,
                        "license": release.license or None,
                        "keywords": release.keywords or None,
                        "classifiers": release.classifiers or [],
                        "platform": [release.platform] or [],
                        "home_page": release.home_page or None,
                        "download_url": release.download_url or None,
                        "requires_python": release.requires_python or None,
                        "requires": release.requires or [],
                        "provides": release.provides or [],
                        "obsoletes": release.obsoletes or [],
                        "requires_dist": release.requires_dist or [],
                        "provides_dist": release.provides_dist or [],
                        "obsoletes_dist": release.obsoletes_dist or [],
                        "requires_external": release.requires_external or [],
                        "project_urls": release.project_urls or [],
                        "uploaded_via": release_file.uploaded_via,
                        "upload_time": release_file.upload_time.isoformat(),
                        "filename": release_file.filename,
                        "size": release_file.size,
                        "path": release_file.path,
                        "python_version": release_file.python_version,
                        "packagetype": release_file.packagetype,
                        "comment_text": release_file.comment_text or None,
                        "has_signature": release_file.has_signature,
                        "md5_digest": release_file.md5_digest,
                        "sha256_digest": release_file.sha256_digest,
                        "blake2_256_digest": release_file.blake2_256_digest,
                    },
                ],
                "example.pypi.distributions",
                job_config=None,
            )
        ]