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
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")