23N/A# The contents of this file are subject to the terms of the 23N/A# Common Development and Distribution License (the "License"). 23N/A# You may not use this file except in compliance with the License. 23N/A# See the License for the specific language governing permissions 23N/A# and limitations under the License. 23N/A# When distributing Covered Code, include this CDDL HEADER in each 23N/A# If applicable, add the following below this CDDL HEADER, with the 23N/A# fields enclosed by brackets "[]" replaced with your own identifying 23N/A# information: Portions Copyright [yyyy] [name of copyright owner] 3339N/A# Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. 221N/A"""Interfaces and implementation for the Catalog object, as well as functions 221N/Athat operate on lists of package FMRIs.""" 1352N/A """Private helper class used to serialize catalog data and generate 1833N/A # Determines whether data is encoded in a single pass (uses 1833N/A # more memory) or iteratively. 2962N/A # catalog signatures *must* use sha-1 only since clients 2962N/A # compare entire dictionaries against the reported hash from 2962N/A # the catalog in the various <CatalogPartBase>.validate() 2962N/A # methods rather than just attributes within those dictionaries. 2962N/A # If old clients are to interoperate with new repositories, the 2962N/A # computed and expected dictionaries must be identical at 2962N/A # present, so we must use sha-1. 1463N/A # Only needed if not writing to __fileobj. 1463N/A # Call statvfs to find optimal blocksize for destination. 1463N/A # Set the file buffer size to the blocksize of our 1463N/A # os.statvfs is not available on some platforms. 1352N/A """Returns a dictionary mapping digest algorithms to the 1352N/A hex-encoded digest values of the text of the catalog.""" 1352N/A """Serializes and stores the provided data in JSON format.""" 1352N/A # sort_keys is necessary to ensure consistent signature 1352N/A # generation. It has a minimal performance cost as well (on 1358N/A # on SPARC and x86), so shouldn't be an issue. However, it 1358N/A # is only needed if the caller has indicated that the content 1463N/A # Whenever possible, avoid using the write wrapper (self) as 1463N/A # this can greatly increase write times. 1463N/A # Can't sign unless a file object is provided. And if 1463N/A # one is provided, but no signing is to be done, then 1463N/A # ensure the fileobject is discarded. 1463N/A # Ensure file object goes out of scope. 1463N/A # Calculating sha-1 this way is much faster than intercepting 1463N/A # write calls because of the excessive number of write calls 1463N/A # that json.dump() triggers (1M+ for /dev catalog files). 1463N/A # Open the JSON file so that the signature data can be added. 3339N/A # The last bytes should be "}\n", which is where the 3339N/A # signature data structure needs to be appended. 3339N/A # Add the signature data and close. 3339N/A # Catalog is not empty, so a separator is needed. 1352N/A """Wrapper function that should not be called by external 1833N/A """Wrapper function that should not be called by external 1352N/A """A CatalogPartBase object is an abstract class containing core 1352N/A functionality shared between CatalogPart and CatalogAttrs.""" 1352N/A # The file mode to be used for all catalog files. 1352N/A """Initializes a CatalogPartBase object.""" 2810N/A # Sanity check: part names can't be pathname-ish. 1352N/A # Operations shouldn't attempt to load the part data 1352N/A # unless meta_root is defined and the data exists. 1352N/A """A UTC datetime object representing the time the file used to 1352N/A to store object metadata was modified, or None if it does not 1431N/A """Removes any on-disk files that exist for the catalog part and 1352N/A """A boolean value indicating wheher a file for the catalog part 1352N/A exists at <self.meta_root>/<self.name>.""" 1352N/A """Load the serialized data for the catalog part and return the 1352N/A # Not a valid catalog file. 1358N/A # Signature data, if present, should be removed from the struct 1358N/A # on load and then stored in the signatures object property. 1352N/A """The absolute path of the file used to store the data for 1352N/A this part or None if meta_root or name is not set.""" 1352N/A """Serialize and store the transformed catalog part's 'data' in 1352N/A a file using the pathname <self.meta_root>/<self.name>. 1833N/A 'single_pass' is an optional boolean indicating whether the data 1833N/A should be serialized in a single pass. This is significantly 1833N/A faster, but requires that the entire set of data be serialized 1833N/A in-memory instead of iteratively writing it to the target 1352N/A # Update in-memory copy to reflect stored data. 1431N/A # Ensure the permissions on the new file are correct. 1352N/A # Finally, set the file times to match the last catalog change. 1352N/A """A CatalogPart object is the representation of a subset of the package 1352N/A FMRIs available from a package repository.""" 1352N/A """Initializes a CatalogPart object.""" 1537N/A """Private generator function to iterate over catalog entries. 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the CatalogPart has been saved since the last 1537N/A modifying operation, or sort() has has been called, this will 1537N/A also be the newest version of the package. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1549N/A """Add a catalog entry for a given FMRI or FMRI components. 1352N/A 'metadata' is an optional dict containing the catalog 1352N/A metadata that should be stored for the specified FMRI. 1352N/A The dict representing the entry is returned to callers, 1352N/A but should not be modified. 1549N/A # Hot path, so avoid calling load unless necessary, even 1549N/A # though it performs this check already. 1606N/A """Removes any on-disk files that exist for the catalog part and 1352N/A """A generator function that produces tuples of the form 1352N/A (fmri, entry) as it iterates over the contents of the catalog 1352N/A part (where entry is the related catalog entry for the fmri). 1352N/A Callers should not modify any of the data that is returned. 1537N/A 'cb' is an optional callback function that will be executed for 1537N/A each package. It must accept two arguments: 'pkg' and 'entry'. 1537N/A 'pkg' is an FMRI object and 'entry' is the dictionary structure 1537N/A of the catalog entry for the package. If the callback returns 1537N/A False, then the entry will not be included in the results. 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the CatalogPart has been saved since the last 1537N/A modifying operation, or sort() has has been called, this will 1537N/A also be the newest version of the package. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A Results are always in catalog version order on a per- 1352N/A """A generator function that produces tuples of (version, 1352N/A entries), where entries is a list of tuples of the format 1352N/A (fmri, entry) where entry is the catalog entry for the 1537N/A FMRI) as it iterates over the CatalogPart contents. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1537N/A """A generator function that produces FMRIs as it iterates 1537N/A over the contents of the catalog part. 1537N/A 'last' is a boolean value that indicates only the last fmri 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the CatalogPart has been saved since the last 1537N/A modifying operation, or sort() has has been called, this will 1537N/A also be the newest version of the package. 1352N/A 'objects' is an optional boolean value indicating whether 1352N/A FMRIs should be returned as FMRI objects or as strings. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A Results are always in catalog version order on a per- 1537N/A publisher, per-stem basis.""" 1352N/A """A generator function that produces tuples of (version, 1352N/A fmris), where fmris is a list of the fmris related to the 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1549N/A """Returns the catalog part entry for the given package FMRI or 1537N/A # Since this is a hot path, this function checks for loaded 1537N/A # status before attempting to call the load function. 1352N/A """Returns a tuple of integer values (package_count, 1352N/A package_version_count). The first is the number of 1352N/A unique packages (per-publisher), and the second is the 1352N/A number of unique package versions (per-publisher and 1968N/A """Returns a generator of tuples of the form (pub, 1968N/A package_count, package_version_count). 'pub' is the publisher 1968N/A prefix, 'package_count' is the number of unique packages for the 1968N/A publisher, and 'package_version_count' is the number of unique 1968N/A package versions for the publisher. 1352N/A """Load and transform the catalog part's data, preparing it 1352N/A # Already loaded, or only in-memory. 1352N/A """Returns a set containing the names of all the packages in 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1537N/A """A generator function that produces package tuples of the form 1537N/A (pub, stem) as it iterates over the contents of the CatalogPart. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 2547N/A the results to. If specified, publishers will be sorted in 1537N/A Results are always returned sorted by stem and then by 1537N/A # Results have to be sorted by stem first, and by 1431N/A """A generator function that returns publisher prefixes as it 1463N/A iterates over the package data in the CatalogPart. 1463N/A 'pubs' is an optional list that contains the prefixes of the 1463N/A publishers to restrict the results to.""" 1463N/A # Any entries starting with "_" are part of the 1431N/A # reserved catalog namespace. 1352N/A """Remove a package and its metadata.""" 1352N/A # Safe to do this since a 'break' is done 1352N/A # immediately after removals are performed. 1352N/A # When all version entries for a 1352N/A # package are removed, its stem 1352N/A # When all package stems for a 1352N/A # publisher have been removed, 1352N/A """Transform and store the catalog part's data in a file using 1833N/A the pathname <self.meta_root>/<self.name>. 1833N/A 'single_pass' is an optional boolean indicating whether the data 1833N/A should be serialized in a single pass. This is significantly 1833N/A faster, but requires that the entire set of data be serialized 1833N/A in-memory instead of iteratively writing it to the target 1352N/A # Assume this is in-memory only. 2022N/A # Ensure content is loaded before attempting save. 1352N/A """Re-sorts the contents of the CatalogPart such that version 1352N/A entries for each package stem are in ascending order. 1463N/A 'pfmris' is an optional set of FMRIs to restrict the sort to. 1463N/A This is useful during catalog operations as only entries for 1463N/A the corresponding package stem(s) need to be sorted. 1463N/A 'pubs' is an optional set of publisher prefixes to restrict 1463N/A the sort to. This is useful during catalog operations as only 1463N/A entries for the corresponding publisher stem(s) need to be 1463N/A sorted. This option has no effect if 'pfmris' is also 1463N/A If neither 'pfmris' or 'pubs' is provided, all entries will be 1463N/A # The specified FMRI may not exist in this 1463N/A # CatalogPart, so continue if it does not 1537N/A """A generator function that produces FMRI tuples as it 1537N/A iterates over the contents of the catalog part. 1537N/A 'last' is a boolean value that indicates only the last FMRI 1537N/A tuple for each package on a per-publisher basis should be 1537N/A returned. As long as the CatalogPart has been saved since 1537N/A the last modifying operation, or sort() has has been called, 1537N/A this will also be the newest version of the package. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1537N/A """A generator function that produces tuples of the form ((pub, 1537N/A stem, version), entry) as it iterates over the contents of the 1537N/A catalog part (where entry is the related catalog entry for the 1537N/A fmri). Callers should not modify any of the data that is 1537N/A 'cb' is an optional callback function that will be executed for 1537N/A each package. It must accept two arguments: 'pkg' and 'entry'. 1537N/A 'pkg' is an FMRI tuple and 'entry' is the dictionary structure 1537N/A of the catalog entry for the package. If the callback returns 1537N/A False, then the entry will not be included in the results. 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the CatalogPart has been saved since the last 1537N/A modifying operation, or sort() has has been called, this will 1537N/A also be the newest version of the package. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1537N/A Results are always in catalog version order on a per-publisher, 1352N/A """Verifies whether the signatures for the contents of the 1352N/A CatalogPart match the specified signature data, or if not 1352N/A provided, the current signature data. Raises the exception 1352N/A named 'BadCatalogSignatures' on failure.""" 2810N/A # Nothing to validate, and we're not required to. 2022N/A # Ensure content is loaded before attempting to retrieve 2022N/A # or generate signature data. 1352N/A """A CatalogUpdate object is an augmented representation of a subset 1352N/A of the package data contained within a Catalog.""" 1352N/A """Initializes a CatalogUpdate object.""" 1352N/A """Records the specified catalog operation and any related 1352N/A catalog metadata for the specified package FMRI. 1352N/A 'operation' must be one of the following constant values 1352N/A provided by the CatalogUpdate class: 1352N/A 'op_time' is a UTC datetime object indicating the time 1352N/A the catalog operation was performed. 1352N/A 'metadata' is an optional dict containing the catalog 1352N/A metadata that should be stored for the specified FMRI 1352N/A indexed by catalog part (e.g. "dependency", "summary", 1352N/A # To ensure the update log is viewed as having been updated 1352N/A # at the exact same time as the catalog, the last_modified 1352N/A # time of the update log must match the operation time. 1352N/A """Load and transform the catalog update's data, preparing it 1352N/A # Already loaded, or only in-memory. 1431N/A """A generator function that returns publisher prefixes as it 1431N/A iterates over the package data in the CatalogUpdate.""" 1463N/A # Any entries starting with "_" are part of the 1431N/A # reserved catalog namespace. 1352N/A """Transform and store the catalog update's data in a file using 1352N/A the pathname <self.meta_root>/<self.name>.""" 1352N/A # Assume this is in-memory only. 2022N/A # Ensure content is loaded before attempting save. 1352N/A """A generator function that produces tuples of the format 1352N/A (fmri, op_type, op_time, metadata). Where: 1352N/A * 'fmri' is a PkgFmri object for the package. 1352N/A * 'op_type' is a CatalogUpdate constant indicating 1352N/A the catalog operation performed. 1352N/A * 'op_time' is a UTC datetime object representing the 1352N/A time time the catalog operation was performed. 1352N/A * 'metadata' is a dict containing the catalog metadata 1352N/A for the FMRI indexed by catalog part name. 1352N/A Results are always in ascending operation time order on a 1352N/A per-publisher, per-stem basis. 1352N/A """Verifies whether the signatures for the contents of the 1352N/A CatalogUpdate match the specified signature data, or if not 1352N/A provided, the current signature data. Raises the exception 1352N/A named 'BadCatalogSignatures' on failure.""" 2810N/A # Nothing to validate, and we're not required to. 2022N/A # Ensure content is loaded before attempting to retrieve 2022N/A # or generate signature data. 1352N/A """A CatalogAttrs object is the representation of the attributes of a 2810N/A # This structure defines defaults (for use in __init__) as well as 2810N/A # the set of required elements for this catalog part. See also the 2810N/A "package-version-count":
0,
1352N/A """Initializes a CatalogAttrs object.""" 1352N/A # If the data is already seen as 'loaded' during init, 1352N/A # this is actually a new object, so setup some sane 1352N/A # Assume that the attributes of the catalog can be 1352N/A """Duplicate and transform 'self.__data' for saving.""" 1352N/A # Use a copy to prevent the in-memory version from being 1352N/A # affected by the transformations. 1352N/A # Convert datetime objects to an ISO-8601 1352N/A """Load and transform the catalog attribute data.""" 1352N/A # Already loaded, or only in-memory. 2810N/A # Check to see that struct is as we expect: it must be a dict 2810N/A # and have all of the elements in self.__DEFAULT_ELEMS. 1352N/A # Convert ISO-8601 basic format strings to 2810N/A # 'parts' and 'updates' have a more complex 2810N/A # structure. Check that all of the subparts 3362N/A # Check if subpart is a symbolic link 3362N/A # that would cause an access to be 3362N/A # redirected outside of 'file_root'. 2810N/A # Build datetimes from timestamps. 1352N/A """Transform and store the catalog attribute data in a file 1352N/A using the pathname <self.meta_root>/<self.name>.""" 1352N/A # Assume this is in-memory only. 2022N/A # Ensure content is loaded before attempting save. 1352N/A """Verifies whether the signatures for the contents of the 1352N/A CatalogAttrs match the specified signature data, or if not 1352N/A provided, the current signature data. Raises the exception 1352N/A named 'BadCatalogSignatures' on failure.""" 2810N/A # Nothing to validate, and we're not required to. 2022N/A # Ensure content is loaded before attempting to retrieve 2022N/A # or generate signature data. 1352N/A """A Catalog is the representation of the package FMRIs available from 1352N/A # The file mode to be used for all catalog files. 1352N/A # These properties are declared here so that they show up in the pydoc 1352N/A # documentation as private, and for clarity in the property declarations 1352N/A # found near the end of the class definition. 1352N/A # These are used to cache or store CatalogPart and CatalogUpdate objects 1352N/A # as they are used. It should not be confused with the CatalogPart 1352N/A # names and CatalogUpdate names stored in the CatalogAttrs object. 1352N/A """Initializes a Catalog object. 1352N/A 'batch_mode' is an optional boolean value that indicates that 1352N/A the caller intends to perform multiple modifying operations on 1352N/A catalog before saving. This is useful for performance reasons 1352N/A as the contents of the catalog will not be sorted after each 1352N/A change, and the package counts will not be updated (except at 1352N/A save()). By default this value is False. If this value is 1352N/A True, callers are responsible for calling finalize() to ensure 1352N/A that catalog entries are in the correct order and package counts 1352N/A accurately reflect the catalog contents. 1352N/A 'meta_root' is an optional absolute pathname of a directory 1352N/A that catalog metadata can be written to and read from, and 1352N/A must already exist. If no path is supplied, then it is 1352N/A assumed that the catalog object will be used for in-memory 1352N/A 'log_updates' is an optional boolean value indicating whether 1352N/A updates to the catalog should be logged. This enables consumers 1352N/A of the catalog to perform incremental updates. 1352N/A 'read_only' is an optional boolean value that indicates if 1352N/A operations that modify the catalog are allowed (an assertion 1358N/A error will be raised if one is attempted and this is True). 1358N/A 'sign' is an optional boolean value that indicates that the 1358N/A the catalog data should have signature data generated and 1358N/A embedded when serialized. This option is primarily a matter 1358N/A of convenience for callers that wish to trade integrity checks 1358N/A for improved catalog serialization performance.""" 1352N/A # Must be set after the above. 1352N/A # Must be set after the above. 1431N/A # This lock is used to protect the catalog file from multiple 1431N/A # threads writing to it at the same time. 1463N/A """Private version; caller responsible for locking.""" 1463N/A # Use the same operation time and date for all operations so 1463N/A # that the last modification times will be synchronized. This 1463N/A # also has the benefit of avoiding extra datetime object 1463N/A # For each entry in the 'src' catalog, add its BASE entry to the 1463N/A # current catalog along and then add it to the 'd'iscard dict if 1463N/A # 'cb' is defined and returns False. 1463N/A # If the 'd'iscards dict is populated and pfmri is 1463N/A # defined, then there is nothing more to do. 1463N/A # Finally, merge any catalog part entries that exist unless the 1463N/A # FMRI is found in the 'd'iscard dict. 1463N/A # Part doesn't exist in-memory or on-disk, so 1463N/A # Package isn't in this part; skip it. 1537N/A # Catalog contains nothing. 1537N/A # Data not available for this 1537N/A # Part doesn't have this FMRI, 1537N/A # Part doesn't have this FMRI, 1352N/A """Private finalize method; exposes additional controls for 1352N/A # If the base Catalog didn't exist (in-memory or on- 1352N/A # disk) that implies there is nothing to sort and 1352N/A # there are no packages (since the base catalog part 1352N/A # must always exist for packages to be present). 1352N/A # Some operations don't need this, such as 3110N/A # pfmri is assumed to be a FMRI tuple. 1970N/A # Accumulate errors and continue so that as 1970N/A # much of the action data as possible can be 1970N/A # Allocate this here to avoid overhead 1537N/A # Don't filter actual facet or variant 1369N/A """Private helper function to iterate over a Manifest's actions 1369N/A by action type, returning tuples of (action, attr_name).""" 1352N/A # First, check if the update has already been cached, 1352N/A # Next, if the update hasn't been cached, 1352N/A # Update doesn't exist on-disk, 1352N/A # so don't return anything. 1352N/A """Locks the catalog preventing multiple threads or external 1352N/A consumers of the catalog from modifying it during operations. 1352N/A # XXX need filesystem lock too? 1352N/A """Helper function to log catalog changes.""" 1352N/A # The catalog.attrs needs to be updated to reflect 1463N/A # the changes made. A sort doesn't need to be done 1463N/A # here as the individual parts will automatically do 1463N/A # that as needed in this case. 1352N/A # This must be set to exactly the same time as the update logs 1352N/A # so that the changes in the update logs are not marked as 1352N/A # being newer than the catalog or vice versa. 1352N/A # The last component of the updatelog filename is the 1352N/A # Signature data for each part needs to be cleared, 1352N/A # and will only be available again after save(). 2510N/A """A generator function that yields a list of tuples of the form 2510N/A (pattern, error, fmri, matcher) based on the provided patterns, 2510N/A where 'error' is any exception encountered while parsing the 2510N/A pattern, 'fmri' is the resulting FMRI object, and 'matcher' is 2510N/A one of the following pkg.fmri matching functions: 2510N/A Indicates that the name portion of the pattern 2510N/A must match exactly and the version (if provided) 2510N/A must be considered a successor or equal to the 2510N/A Indicates that the name portion of the pattern 2510N/A must be a proper subset and the version (if 2510N/A provided) must be considered a successor or 2510N/A Indicates that the name portion of the pattern 2510N/A uses fnmatch rules for pattern matching (shell- 2510N/A style wildcards) and that the version can either 2510N/A match exactly, match partially, or contain 2510N/A # Whatever the error was, return it. 1352N/A """Private save function. Caller is responsible for locking 1352N/A # Replace the existing signature data 1352N/A # with the new signature data. 1352N/A # Save any CatalogParts that are currently in-memory, 1352N/A # updating their related information in catalog.attrs 1352N/A # Must save first so that signature data is 1833N/A # single-pass encoding is not used for summary part as 2810N/A # it increases memory usage substantially (30MB at 1833N/A # current for /dev). No significant difference is 1833N/A # detectable for other parts though. 1352N/A # Now replace the existing signature data with 1352N/A # Finally, save the catalog attributes. 1352N/A # If the Catalog's meta_root changes, the meta_root of all of 1352N/A # its parts must be changed too. 3362N/A # If the Catalog's file_root changes, the file_root of all of 3362N/A # its parts must be changed too. 1352N/A """Sets permissions on attrs and parts if not read_only and if 1352N/A the current user can do so; raises BadCatalogPermissions if the 1352N/A permissions are wrong and cannot be corrected.""" 814N/A # Force file_mode, so that unprivileged users can read these. 1352N/A # If the file doesn't exist yet, move on. 814N/A # If the mode change failed for another reason, 814N/A # check to see if we actually needed to change 814N/A # it, and if so, add it to bad_modes. 1358N/A # If the Catalog's sign property changes, the value of that 1431N/A # property for its attributes, etc. must be changed too. 1352N/A """Unlocks the catalog allowing other catalog consumers to 1352N/A # XXX need filesystem unlock too? 1369N/A """A generator function that produces tuples of the format 1369N/A (fmri, actions) as it iterates over the contents of the 1369N/A catalog (where 'actions' is a generator that returns the 1431N/A Actions corresponding to the requested information). 1431N/A If the catalog doesn't contain any action data for the package 3329N/A entry, it will return an empty iterator. 1369N/A 'excludes' is a list of variants which will be used to determine 1369N/A what should be allowed by the actions generator in addition to 1537N/A what is specified by 'info_needed'. 1537N/A 'cb' is an optional callback function that will be executed for 1537N/A each package before its action data is retrieved. It must accept 1537N/A two arguments: 'pkg' and 'entry'. 'pkg' is an FMRI object and 1537N/A 'entry' is the dictionary structure of the catalog entry for the 1537N/A package. If the callback returns False, then the entry will not 1537N/A be included in the results. This can significantly improve 1537N/A performance by avoiding action data retrieval for results that 1369N/A 'info_needed' is a set of one or more catalog constants 1369N/A indicating the types of catalog data that will be returned 1369N/A in 'actions' in addition to the above: 1369N/A Depend and set Actions for package obsoletion, 1369N/A Any remaining set Actions not listed above, such 1369N/A as pkg.summary, pkg.description, etc. 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the catalog has been saved since the last modifying 1537N/A operation, or finalize() has has been called, this will also be 1537N/A the newest version of the package. 1369N/A 'locales' is an optional set of locale names for which Actions 1369N/A should be returned. The default is set(('C',)) if not provided. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pfmri' is an optional FMRI to limit the returned results to. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A """Add a package and its related metadata to the catalog and 1352N/A 'manifest' is an optional Manifest object that will be used 1352N/A to retrieve the metadata related to the package. 1352N/A 'metadata' is an optional dict of additional metadata to store 1352N/A with the package's BASE record.""" 1352N/A # Summary actions are grouped by locale, since each 1352N/A # goes to a locale-specific catalog part. 1352N/A # variant and facet data goes to the 1352N/A # Redundant in the case of the catalog. 1352N/A # All other set actions go to the summary 1352N/A # catalog parts, grouped by locale. To 1352N/A # determine the locale, the set attribute's 1352N/A # name is split by ':' into its field and 1352N/A # locale components. If ':' is not present, 1352N/A # then the 'C' locale is assumed. 1352N/A # Use the same operation time and date for all 1352N/A # operations so that the last modification times 1352N/A # of all catalog parts and update logs will be 1352N/A # Always add packages to the base catalog. 1352N/A # Without a manifest, only the base catalog data 1352N/A # Only dependency and set actions are currently 1352N/A # used by the remaining catalog parts. 1369N/A """Appends the entries in the specified 'src' catalog to that 1369N/A of the current catalog. The caller is responsible for ensuring 1463N/A that no duplicates exist and must call finalize() afterwards to 1463N/A to ensure consistent catalog state. This function cannot be 1463N/A used when log_updates or read_only is enabled. 1369N/A 'cb' is an optional callback function that must accept src, 1369N/A an FMRI, and entry. Where 'src' is the source catalog the 1369N/A FMRI's entry is being copied from, and entry is the source 1369N/A catalog entry. It must return a tuple of the form (append, 1369N/A metadata), where 'append' is a boolean value indicating if 1369N/A the specified package should be appended, and 'metadata' is 1369N/A a dict of additional metadata to store with the package's 1369N/A 'pfmri' is an optional FMRI of a package to append. If not 1431N/A provided, all FMRIs in the 'src' catalog will be appended. 1431N/A This filtering is applied before any provided callback. 1431N/A 'pubs' is an optional list of publisher prefixes to restrict 1431N/A the append operation to. FRMIs that have a publisher not in 1431N/A the list will be skipped. This filtering is applied before 1431N/A any provided callback. If not provided, no publisher 1463N/A filtering will be applied.""" 1463N/A # Append operations are much slower if batch mode is 1463N/A # not enabled. This ensures that the current state 1463N/A # is stored and then reset on completion or failure. 1463N/A # Since append() is never used as part of the 1463N/A # publication process (log_updates == True), 1352N/A """Apply any CatalogUpdates available to the catalog based on 1352N/A the list returned by get_updates_needed. The caller must 1352N/A retrieve all of the resources indicated by get_updates_needed 1352N/A and place them in the directory indicated by 'path'.""" 1352N/A # Used to store the original time each part was modified 1352N/A # as a basis for determining whether to apply specific 1352N/A # Load the CatalogUpdate from the path specified. 1352N/A # (Which is why __get_update is not used.) 1352N/A # Part doesn't exist; skip. 1352N/A # Only add updates to the part 1352N/A # that occurred after the last 1431N/A # Nothing has changed, so nothing to do. 1352N/A # The provided update is an incremental. 1352N/A # The provided update is a full update. 1352N/A # Next, verify that all of the updated parts have a 1352N/A # signature that matches the new catalog.attrs file. 1352N/A # This must be done to ensure that the catalog 1352N/A # signature matches that of the source. 1352N/A # Finally, save the catalog, and then copy the new 1352N/A # catalog attributes file into place and reload it. 1537N/A """Returns a set of tuples of the form (scheme, category) 1537N/A containing the names of all categories in use by the last 1537N/A version of each unique package in the catalog on a per- 1537N/A 'excludes' is a list of variants which will be used to 1537N/A determine what category actions will be checked. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A """A UTC datetime object indicating the time the catalog was 1352N/A """Removes any on-disk files that exist for the catalog and 1606N/A # Finally, ensure that if there are any leftover files from 1606N/A # an interrupted destroy in the past that they are removed 1352N/A """A generator function that produces tuples of the format 1352N/A (fmri, metadata) as it iterates over the contents of the 1352N/A catalog (where 'metadata' is a dict containing the requested 1352N/A 'metadata' always contains the following information at a 1352N/A 'metadata' will be populated with Manifest 1352N/A signature data, if available, using key-value 1352N/A pairs of the form 'signature-<name>': value. 1431N/A 'info_needed' is an optional list of one or more catalog 1352N/A constants indicating the types of catalog data that will 1352N/A be returned in 'metadata' in addition to the above: 1352N/A 'metadata' will contain depend and set Actions 1352N/A for package obsoletion, renaming, variants, 1352N/A and facets stored in a list under the 1352N/A 'metadata' will contain any remaining Actions 1352N/A not listed above, such as pkg.summary, 1352N/A pkg.description, etc. in a list under the key 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the catalog has been saved since the last modifying 1537N/A operation, or finalize() has has been called, this will also be 1537N/A the newest version of the package. 1352N/A 'locales' is an optional set of locale names for which Actions 1352N/A should be returned. The default is set(('C',)) if not provided. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A """A generator function that produces tuples of the format 1352N/A (version, entries) as it iterates over the contents of the 1352N/A the catalog, where entries is a list of tuples of the format 1352N/A (fmri, metadata) and metadata is a dict containing the 1352N/A 'metadata' always contains the following information at a 1352N/A 'metadata' will be populated with Manifest 1352N/A signature data, if available, using key-value 1352N/A pairs of the form 'signature-<name>': value. 1431N/A 'info_needed' is an optional list of one or more catalog 1352N/A constants indicating the types of catalog data that will 1352N/A be returned in 'metadata' in addition to the above: 1352N/A 'metadata' will contain depend and set Actions 1352N/A for package obsoletion, renaming, variants, 1352N/A and facets stored in a list under the 1352N/A 'metadata' will contain any remaining Actions 1352N/A not listed above, such as pkg.summary, 1352N/A pkg.description, etc. in a list under the key 1352N/A 'locales' is an optional set of locale names for which Actions 1352N/A should be returned. The default is set(('C',)) if not provided. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A # Catalog contains nothing. 1352N/A # Data not available for this 1537N/A # Part doesn't have this FMRI, 1537N/A """A generator function that produces tuples of the format 1537N/A ((pub, stem, version), entry, actions) as it iterates over 1537N/A the contents of the catalog (where 'actions' is a generator 1537N/A that returns the Actions corresponding to the requested 1537N/A If the catalog doesn't contain any action data for the package 3329N/A entry, it will return an empty iterator. 1537N/A 'excludes' is a list of variants which will be used to determine 1537N/A what should be allowed by the actions generator in addition to 1537N/A what is specified by 'info_needed'. 1537N/A 'cb' is an optional callback function that will be executed for 1537N/A each package before its action data is retrieved. It must accept 1537N/A two arguments: 'pkg' and 'entry'. 'pkg' is an FMRI object and 1537N/A 'entry' is the dictionary structure of the catalog entry for the 1537N/A package. If the callback returns False, then the entry will not 1537N/A be included in the results. This can significantly improve 1537N/A performance by avoiding action data retrieval for results that 1537N/A 'info_needed' is a set of one or more catalog constants 1537N/A indicating the types of catalog data that will be returned 1537N/A in 'actions' in addition to the above: 1537N/A Depend and set Actions for package obsoletion, 1537N/A Any remaining set Actions not listed above, such 1537N/A as pkg.summary, pkg.description, etc. 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the catalog has been saved since the last modifying 1537N/A operation, or finalize() has has been called, this will also be 1537N/A the newest version of the package. 1537N/A 'locales' is an optional set of locale names for which Actions 1537N/A should be returned. The default is set(('C',)) if not provided. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pfmri' is an optional FMRI to limit the returned results to. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A """A boolean value indicating whether the Catalog exists 1352N/A # If the Catalog attrs file exists on-disk, 1352N/A """This function re-sorts the contents of the Catalog so that 1352N/A version entries are in the correct order and sets the package 1463N/A counts for the Catalog based on its current contents. 1463N/A 'pfmris' is an optional set of FMRIs that indicate what package 1463N/A entries have been changed since this function was last called. 1463N/A It is used to optimize the finalization process. 1463N/A 'pubs' is an optional set of publisher prefixes that indicate 1463N/A what publisher has had package entries changed. It is used 1463N/A to optimize the finalization process. This option has no effect 1463N/A if 'pfmris' is also provided.""" 1352N/A """A generator function that produces FMRIs as it iterates 1352N/A over the contents of the catalog. 1537N/A 'last' is a boolean value that indicates only the last FMRI 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the catalog has been saved since the last modifying 1537N/A operation, or finalize() has has been called, this will also be 1537N/A the newest version of the package. 1352N/A 'objects' is an optional boolean value indicating whether 1537N/A FMRIs should be returned as FMRI objects or as strings. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A # Catalog contains nothing. 1352N/A # This construction is necessary to get python to 1352N/A # return no results properly to callers expecting 1352N/A """A generator function that produces tuples of (version, 1352N/A fmris), where fmris is a of the fmris related to the 1537N/A version, for the given package name. 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A # Catalog contains nothing. 1352N/A # This construction is necessary to get python to 1352N/A # return no results properly to callers expecting 1352N/A """Returns a dict containing the metadata for the specified 1537N/A FMRI containing the requested information. If the specified 1537N/A FMRI does not exist in the catalog, a value of None will be 1352N/A 'metadata' always contains the following information at a 1352N/A 'metadata' will be populated with Manifest 1352N/A signature data, if available, using key-value 1352N/A pairs of the form 'signature-<name>': value. 1431N/A 'info_needed' is an optional list of one or more catalog 1352N/A constants indicating the types of catalog data that will 1352N/A be returned in 'metadata' in addition to the above: 1352N/A 'metadata' will contain depend and set Actions 1352N/A for package obsoletion, renaming, variants, 1352N/A and facets stored in a list under the 1352N/A 'metadata' will contain any remaining Actions 1352N/A not listed above, such as pkg.summary, 1352N/A pkg.description, etc. in a list under the key 1352N/A 'locales' is an optional set of locale names for which Actions 1352N/A should be returned. The default is set(('C',)) if not provided. 1352N/A # Always attempt to retrieve the BASE entry as FMRIs 1352N/A # must be present in the BASE catalog part. 1352N/A # Data not available for this 1537N/A # Part doesn't have this FMRI, 1369N/A """A generator function that produces Actions as it iterates 1369N/A over the catalog entry of the specified FMRI corresponding to 1369N/A the requested information). If the catalog doesn't contain 3329N/A any action data for the package entry, it will return an empty 1369N/A 'excludes' is a list of variants which will be used to determine 1369N/A what should be allowed by the actions generator in addition to 1369N/A what is specified by 'info_needed'. If not provided, only 1369N/A 'info_needed' will determine what actions are returned. 1369N/A 'info_needed' is a set of one or more catalog constants 1369N/A indicating the types of catalog data that will be returned 1369N/A in 'actions' in addition to the above: 1369N/A Depend and set Actions for package obsoletion, 1369N/A Any remaining set Actions not listed above, such 1369N/A as pkg.summary, pkg.description, etc. 1369N/A 'locales' is an optional set of locale names for which Actions 1369N/A should be returned. The default is set(('C',)) if not provided. 1369N/A """A generator function that yields tuples of the format 1369N/A (var_name, variants); where var_name is the name of the 1369N/A variant and variants is a list of the variants for that 1431N/A """A generator function that yields tuples of the form (sig, 1431N/A value) where 'sig' is the name of the signature, and 'value' is 1431N/A the raw catalog value for the signature. Please note that the 1431N/A data type of 'value' is dependent on the signature, so it may 1431N/A be a string, list, dict, etc.""" 1369N/A """A generator function that returns the variants for the 1369N/A specified variant name. If no variants exist for the 1369N/A specified name, None will be returned.""" 1369N/A # A package can only have one set of values 1369N/A # for a single variant name, so return it. 2510N/A """A generator function that produces tuples of the form: 2510N/A pub, - (string) the publisher of the package 2510N/A stem, - (string) the name of the package 2510N/A version - (string) the version of the package 2510N/A attributes - (dict) package attributes 2510N/A Results are always sorted by stem, publisher, and then in 2510N/A 'collect_attrs' is an optional boolean that indicates whether 2510N/A all package attributes should be collected and returned in the 2510N/A fifth element of the return tuple. If False, that element will 2510N/A 'matched' is an optional set to add matched patterns to. 2510N/A 'patterns' is an optional list of FMRI wildcard strings to 2510N/A 'pubs' is an optional list of publisher prefixes to restrict 2510N/A 'unmatched' is an optional set to add unmatched patterns to. 2510N/A 'return_fmris' is an optional boolean value that indicates that 2510N/A an FMRI object should be returned in place of the (pub, stem, 2510N/A ver) tuple that is normally returned.""" 2510N/A # Each pattern in patterns can be a partial or full FMRI, so 2510N/A # extract the individual components for use in filtering. 2510N/A # Duplicate patterns are ignored. 2510N/A # A different form of the same pattern 2510N/A # was specified already; ignore this 2510N/A # Keep track of listed stems for all other packages on a 2510N/A # Need dependency and summary actions. 2510N/A # A newer version has already been listed, so 2510N/A # any additional entries need to be marked for 2510N/A # omission before continuing. 2510N/A # Package allowed by pattern, 2510N/A # If this entry matched at least one 2510N/A # pattern, then ensure it is returned. 2510N/A # It's faster to stop as soon 2510N/A # If caller has requested other match 2510N/A # cases be returned, then all patterns 2510N/A # must be tested for every entry. This 2510N/A # is slower, so only done if necessary. 2510N/A # Package didn't match critera; skip it. 2510N/A # Collect attribute data if requested. 3339N/A # use OrderedDict to get a deterministic output 3398N/A # (k1, frozenset([k1_1, k1_2])) 3398N/A # (k2, frozenset([k2_1, k2_2])) 3398N/A # will later be converted by the 3398N/A # k1: frozenset([k1_1, k1_2]), 3398N/A # k2: frozenset([k2_1, k2_2]) 2510N/A if k
not in (
"name",
"value")
3398N/A # Historical summary field. 2510N/A # Ignore errors for packages that have invalid 2510N/A # Package didn't match criteria; skip it. 2510N/A # Only after all other filtering has been 2510N/A # applied are the patterns that the package 2510N/A # matched considered "matching". 2510N/A # Return the requested package data. 2510N/A # Caller has requested that matched patterns be 2510N/A # Caller has requested that unmatched patterns be 2301N/A """Given a user-specified list of FMRI pattern strings, return 2301N/A a tuple of ('matching', 'references', 'unmatched'), where 2301N/A matching is a dict of matching fmris, references is a dict of 2301N/A the patterns indexed by matching FMRI, and unmatched is a set of 2301N/A the patterns that did not match any FMRIs respectively: 2301N/A pkgname: [fmri1, fmri2, ...], 2301N/A pkgname: [fmri1, fmri2, ...], 2301N/A set(['unmatched1', 'unmatchedN']) 2301N/A 'patterns' is the list of package patterns to match. 2301N/A Constraint used is always AUTO as per expected UI behavior when 2301N/A determining successor versions. 2301N/A Note that patterns starting w/ pkg:/ require an exact match; 2301N/A patterns containing '*' will using fnmatch rules; the default 2301N/A trailing match rules are used for remaining patterns. 2301N/A Exactly duplicated patterns are ignored. 2301N/A Routine raises PackageMatchErrors if errors occur: it is 2301N/A illegal to specify multiple different patterns that match the 2301N/A same package name. Only patterns that contain wildcards are 2301N/A allowed to match multiple packages. 2510N/A # Each pattern in patterns can be a partial or full FMRI, so 2510N/A # extract the individual components for use in filtering. 2510N/A # Duplicate patterns are ignored. 2510N/A # A different form of the same pattern 2510N/A # was specified already; ignore this 2301N/A # Create a dictionary of patterns, with each value being a 2301N/A # dictionary of pkg names & fmris that match that pattern. 2301N/A continue # name doesn't match 2301N/A continue # version doesn't match 2301N/A # Discard all but the newest version of each match. 2301N/A # Rebuild ret based on latest version of every package. 2301N/A # Assign new version of ret and discard latest list. 2301N/A # Determine match failures. 2301N/A if l ==
0:
# no matches at all 2301N/A # for each matching package name 2591N/A # Group the matching patterns by package name and allow multiple 2301N/A # construct references so that we can know which pattern 1968N/A """Returns a generator of tuples of the form (pub, 1968N/A package_count, package_version_count). 'pub' is the publisher 1968N/A prefix, 'package_count' is the number of unique packages for the 1968N/A publisher, and 'package_version_count' is the number of unique 1968N/A package versions for the publisher. 1968N/A # Catalog contains nothing. 1968N/A # This construction is necessary to get python to 1968N/A # return no results properly to callers expecting 1369N/A """Returns the CatalogPart object for the named catalog part. 1369N/A 'must_exist' is an optional boolean value that indicates that 1369N/A the catalog part must already exist in-memory or on-disk, if 1369N/A not a value of None will be returned.""" 1369N/A # First, check if the part has already been cached, and if so, 1549N/A # If the caller said the part must_exist, then it must already 1549N/A # be part of the catalog attributes to be valid. 1549N/A # Next, since the part hasn't been cached, create an object 1549N/A # for it and add it to catalog attributes. 1549N/A # This is a double-check for the client case where 1549N/A # there is a part that is known to the catalog but 1549N/A # that the client has purposefully not retrieved. 1549N/A # (Think locale specific data.) 1387N/A # Add a new entry to the catalog attributes for this new 1387N/A # part since it didn't exist previously. 1352N/A """Returns a list of the catalog files needed to update 1352N/A the existing catalog parts, based on the contents of the 1352N/A catalog.attrs file in the directory indicated by 'path'. 1431N/A A value of None will be returned if the the catalog has 1431N/A not been modified, while an empty list will be returned 1431N/A if no catalog parts need to be updated, but the catalog 1431N/A # No updates needed (not even to attrs), so return None. 1431N/A # It's very likely that the catalog has been recreated 1431N/A # or this is a completely different catalog than was 1431N/A # expected. In either case, an update isn't possible. 1431N/A # No updates needed (not even to attrs), so return None. 1352N/A # First, verify that all of the catalog parts the client has 1352N/A # still exist. If they no longer exist, the catalog is no 1352N/A # longer valid and cannot be updated. 1352N/A # The last component of the update name is the locale. 1352N/A # Now check to see if an update log is still offered for 1352N/A # the last time this catalog part was updated. If it 1352N/A # does not, then an incremental update cannot be safely 1352N/A # performed since updates may be missing. 1431N/A # XXX in future, add current locale to this. For now, just 1431N/A # ensure that all of the locales of parts that were changed 1431N/A # and exist on-disk are included. 1431N/A # Now determine if there are any new parts for this locale that 1431N/A # this version of the API knows how to use that the client 1431N/A # The last component of the name is the locale. 1431N/A # Currently, only these parts are used by the client, 1431N/A # so only they need to be retrieved. 1431N/A # If a new part has been added for the current 1431N/A # locale, then incremental updates can't be 1431N/A # performed since updates for this locale can 1431N/A # only be applied to parts that already exist. 1431N/A # No updates needed to catalog parts on-disk, but 1352N/A # Since an incremental update cannot be performed, 1352N/A # just return the updated parts for retrieval. 1352N/A # Finally, determine the update logs needed based on the catalog 1352N/A # parts that need updating on a per-locale basis. 1352N/A # Determine the newest catalog part for a given locale, 1352N/A # this will be used to determine which update logs are 1352N/A # needed for an incremental update. 1352N/A # The last component of the update name is the 1352N/A # This update log doesn't apply to the 1352N/A # locale being evaluated for updates. 1352N/A # Older or same as newest catalog part 1352N/A # for this locale; so skip. 1352N/A # If this updatelog was changed after the 1352N/A # newest catalog part for this locale, then 1352N/A # it is needed to update one or more catalog 1352N/A # Ensure updates are in chronological ascending order. 1352N/A """Returns a set containing the names of all the packages in 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A # Catalog contains nothing. 1352N/A """The number of unique packages in the catalog.""" 1352N/A """The number of unique package versions in the catalog.""" 1352N/A """A dict containing the list of CatalogParts that the catalog 1352N/A is composed of along with information about each part.""" 1537N/A """A generator function that produces package tuples of the form 1537N/A (pub, stem) as it iterates over the contents of the catalog. 1537N/A 'pubs' is an optional list that contains the prefixes of the 1537N/A publishers to restrict the results to.""" 1537N/A # Catalog contains nothing. 1537N/A # This construction is necessary to get python to 1537N/A # return no results properly to callers expecting 1431N/A """Returns a set containing the prefixes of all the publishers 1431N/A # Catalog contains nothing. 1352N/A """Remove a package and its metadata.""" 1352N/A # The package has to be removed from every known part. 1352N/A # Use the same operation time and date for all 1352N/A # operations so that the last modification times 1352N/A # of all catalog parts and update logs will be 1431N/A # Entry should exist in at least 1431N/A # Skip; package's presence is optional 1352N/A """Finalize current state and save to file if possible.""" 1352N/A """Returns a dict of the files the catalog is composed of along 1352N/A with the last known signatures of each if they are available.""" 1537N/A """A generator function that produces FMRI tuples as it 1537N/A iterates over the contents of the catalog. 1537N/A 'last' is a boolean value that indicates only the last FMRI 1537N/A tuple for each package on a per-publisher basis should be 1537N/A returned. As long as the catalog has been saved since the 1537N/A last modifying operation, or finalize() has has been called, 1537N/A this will also be the newest version of the package. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1431N/A # Catalog contains nothing. 1431N/A # This construction is necessary to get python to 1431N/A # return no results properly to callers expecting 1537N/A """A generator function that produces tuples of the format 1537N/A ((pub, stem, version), entry, actions) as it iterates over 1537N/A the contents of the catalog (where 'metadata' is a dict 1537N/A containing the requested information). 1537N/A 'metadata' always contains the following information at a 1537N/A 'metadata' will be populated with Manifest 1537N/A signature data, if available, using key-value 1537N/A pairs of the form 'signature-<name>': value. 1537N/A 'info_needed' is an optional list of one or more catalog 1537N/A constants indicating the types of catalog data that will 1537N/A be returned in 'metadata' in addition to the above: 1537N/A 'metadata' will contain depend and set Actions 1537N/A for package obsoletion, renaming, variants, 1537N/A and facets stored in a list under the 1537N/A 'metadata' will contain any remaining Actions 1537N/A not listed above, such as pkg.summary, 1537N/A pkg.description, etc. in a list under the key 1537N/A 'last' is a boolean value that indicates only the last entry 1537N/A for each package on a per-publisher basis should be returned. 1537N/A As long as the catalog has been saved since the last modifying 1537N/A operation, or finalize() has has been called, this will also be 1537N/A the newest version of the package. 1537N/A 'locales' is an optional set of locale names for which Actions 1537N/A should be returned. The default is set(('C',)) if not provided. 1537N/A 'ordered' is an optional boolean value that indicates that 1537N/A results should sorted by stem and then by publisher and 1537N/A be in descending version order. If False, results will be 1537N/A in a ascending version order on a per-publisher, per-stem 1537N/A 'pubs' is an optional list of publisher prefixes to restrict 1352N/A """A dict containing the list of known updates for the catalog 1352N/A along with information about each update.""" 1369N/A """Updates the metadata stored in a package's BASE catalog 2352N/A record for the specified package. Cannot be used when read_only 1369N/A or log_updates is enabled; should never be used with a Catalog 1369N/A intended for incremental update usage. 2352N/A 'metadata' must be a dict of additional metadata to store with 1369N/A 'pfmri' is the FMRI of the package to update the entry for. 2352N/A 'pub' is the publisher of the package. 2352N/A 'stem' is the stem of the package. 2352N/A 'ver' is the version string of the package. 2352N/A 'pfmri' or 'pub', 'stem', and 'ver' must be provided. 1369N/A # get_entry returns the actual catalog entry, so updating it 1369N/A # simply requires reassignment. 1352N/A """Verifies whether the signatures for the contents of the 1352N/A catalog match the current signature data. Raises the 1352N/A exception named 'BadCatalogSignatures' on failure.""" 2022N/A # Allow validate() to perform its own fallback 2022N/A # logic if signature data isn't available. 1352N/A # Part does not exist; no validation needed. 1352N/A # Update does not exist; no validation needed. 1369N/A doc=
"A UTC datetime object indicating the last time the catalog " 1431N/A# Methods used by external callers 1431N/A """Convert the catalog part named by filename into the correct 1431N/A type of Catalog object and then call its validate method to ensure 1431N/A that is contents are self-consistent.""" 1431N/A # With the else case above, this should never be None. 1352N/A# Methods used by Catalog classes. 1352N/A """Take datetime object dt, and convert it to a ts in ISO-8601 1352N/A """Take datetime object dt, and convert it to a ts in ISO-8601 1352N/A """Take datetime object dt, and convert it to a ts in ISO-8601 1352N/A # Drop the minutes and seconds portion. 1352N/A """Returns the current UTC time as timestamp in ISO-8601 basic 1352N/A """Returns the current UTC time as timestamp in ISO-8601 basic 1352N/A """Take timestamp ts in ISO-8601 format, and convert it to a 289N/A # usec is not in the string if 0 1352N/A """Take timestamp ts in ISO-8601 basic format, and convert it to a 1352N/A # usec is not in the string if 0