Beispiel #1
0
    def deserialize(cls, manifest_url, data):
        """Deserialize a payload into a PackageIndex.

        Args:
            manifest_url (unicode):
                The URL to the manifest file being deserialized.

            data (dict):
                The JSON dictionary data for the package bundle definition.

        Returns:
            PackageIndex:
            The resulting package index.
        """
        index = PackageIndex(
            manifest_url=manifest_url,
            last_updated_timestamp=dateutil.parser.parse(
                data['last_updated_timestamp']))

        base_url = urljoin(manifest_url, '.')

        index.bundles = [
            PackageBundle.deserialize(
                base_url=base_url,
                manifest_url=bundle_data['manifest_file'],
                data=bundle_data)
            for bundle_data in data['bundles']
        ]

        return index
Beispiel #2
0
    def lookup_package_bundle(self, name):
        """Look up a package bundle by name.

        Args:
            name (unicode):
                The name of the package bundle.

        Returns:
            PackageBundle:
            The package bundle, if found, or ``None`` if a bundle with
            that name doesn't exist.
        """
        package_bundle = self._package_bundle_cache.get(name)

        if package_bundle is None:
            path = self._build_package_bundle_path(name)

            try:
                package_bundle_data = get_data_loader().load_by_path(path)
            except LoadDataError as e:
                raise PackageLookupError(six.text_type(e))

            package_bundle = PackageBundle.deserialize(
                base_url=self.BASE_PATH, manifest_url=path, data=package_bundle_data
            )

            self._package_bundle_cache[name] = package_bundle

        return package_bundle
    def test_deserialize_with_all_info(self):
        """Testing PackageBundle.deserialize with all available info"""
        bundle = PackageBundle.deserialize(
            "/packages/",
            "TestPackage/index.json",
            {
                "format_version": "1.0",
                "name": "TestPackage",
                "description": ["This is the summary.", "", "This is the multi-line", "description."],
                "created_timestamp": "2015-10-10T08:17:29.958569",
                "last_updated_timestamp": "2015-10-15T08:17:29.958569",
                "current_version": "1.0.5",
                "package_names": [{"system": ["centos", "rhel"], "name": "reviewboard", "type": "rpm"}],
                "channel_aliases": {"stable": "1.0.x", "beta": "2.0.x"},
                "channels": [
                    {
                        "name": "2.0.x",
                        "created_timestamp": "2015-10-13T08:17:29.958569",
                        "last_updated_timestamp": "2015-10-14T08:17:29.958569",
                        "latest_version": "2.0beta1",
                        "current": False,
                        "visible": True,
                        "manifest_file": "2.0.x.json",
                    },
                    {
                        "name": "1.0.x",
                        "created_timestamp": "2015-10-11T08:17:29.958569",
                        "last_updated_timestamp": "2015-10-12T08:17:29.958569",
                        "latest_version": "1.0.5",
                        "current": True,
                        "visible": True,
                        "manifest_file": "1.0.x.json",
                    },
                ],
            },
        )

        self.assertEqual(bundle.manifest_url, "TestPackage/index.json")
        self.assertEqual(bundle.absolute_manifest_url, "/packages/TestPackage/index.json")
        self.assertEqual(bundle.name, "TestPackage")
        self.assertEqual(bundle.description, "This is the summary.\n" "\n" "This is the multi-line\n" "description.")
        self.assertEqual(bundle.current_version, "1.0.5")
        self.assertEqual(bundle.created_timestamp, datetime(2015, 10, 10, 8, 17, 29, 958569))
        self.assertEqual(bundle.last_updated_timestamp, datetime(2015, 10, 15, 8, 17, 29, 958569))
        self.assertEqual(bundle.package_names, [{"system": ["centos", "rhel"], "name": "reviewboard", "type": "rpm"}])
        self.assertEqual(bundle.channel_aliases, {"stable": "1.0.x", "beta": "2.0.x"})

        # The exact details will be compared in a later unit test. Just
        # sanity-check that we have what we expect.
        self.assertEqual(len(bundle.channels), 2)
        self.assertEqual(bundle.channels[0].name, "2.0.x")
        self.assertEqual(bundle.channels[1].name, "1.0.x")
    def test_deserialize_with_minimal_info(self):
        """Testing PackageBundle.deserialize with minimum info"""
        bundle = PackageBundle.deserialize(
            "/packages/",
            "TestPackage/index.json",
            {
                "format_version": "1.0",
                "name": "TestPackage",
                "created_timestamp": "2015-10-10T08:17:29.958569",
                "last_updated_timestamp": "2015-10-15T08:17:29.958569",
                "channels": [
                    {
                        "name": "2.0.x",
                        "created_timestamp": "2015-10-13T08:17:29.958569",
                        "last_updated_timestamp": "2015-10-14T08:17:29.958569",
                        "latest_version": "2.0beta1",
                        "current": False,
                        "visible": True,
                        "manifest_file": "2.0.x.json",
                    },
                    {
                        "name": "1.0.x",
                        "created_timestamp": "2015-10-11T08:17:29.958569",
                        "last_updated_timestamp": "2015-10-12T08:17:29.958569",
                        "latest_version": "1.0.5",
                        "current": True,
                        "visible": True,
                        "manifest_file": "1.0.x.json",
                    },
                ],
            },
        )

        self.assertEqual(bundle.manifest_url, "TestPackage/index.json")
        self.assertEqual(bundle.absolute_manifest_url, "/packages/TestPackage/index.json")
        self.assertEqual(bundle.name, "TestPackage")
        self.assertEqual(bundle.description, None)
        self.assertEqual(bundle.created_timestamp, datetime(2015, 10, 10, 8, 17, 29, 958569))
        self.assertEqual(bundle.last_updated_timestamp, datetime(2015, 10, 15, 8, 17, 29, 958569))
        self.assertEqual(bundle.current_version, None)
        self.assertEqual(bundle.package_names, [])
        self.assertEqual(bundle.channel_aliases, {})

        # The exact details will be compared in a later unit test. Just
        # sanity-check that we have what we expect.
        self.assertEqual(len(bundle.channels), 2)
        self.assertEqual(bundle.channels[0].name, "2.0.x")
        self.assertEqual(bundle.channels[1].name, "1.0.x")