LSSTApplications  19.0.0-14-gb0260a2+d60062ef16,20.0.0+1540ce6389,20.0.0+7c6b12c2f9,20.0.0+ae956f52c5,20.0.0+be870186d9,20.0.0+e2e26847c2,20.0.0-1-g10df615+7683e4f082,20.0.0-1-g253301a+7c6b12c2f9,20.0.0-1-g2b7511a+46a6078777,20.0.0-1-g3dda6ea+606b36f8c0,20.0.0-1-g4d801e7+901ee84527,20.0.0-1-g5b95a8c+a5fa15ec54,20.0.0-1-gb058bd0+46a6078777,20.0.0-1-gb88604f+acecce4127,20.0.0-1-gc96f8cb+61a4a056b1,20.0.0-1-gedffbd8+4f0e391d5e,20.0.0-10-g0891cd99+aadc987f3e,20.0.0-10-g9a20bd332+576ca7b471,20.0.0-17-gcdbda88+ed0d4927ab,20.0.0-2-g4dae9ad+61a4a056b1,20.0.0-2-g61b8584+85c46248f3,20.0.0-2-gb780d76+f45b7d88f4,20.0.0-2-gf072044+7c6b12c2f9,20.0.0-21-g9bbb7f7+61a4a056b1,20.0.0-22-gc512666+9eba1c4719,20.0.0-23-g8900aa8+68630f7098,20.0.0-3-g1653f94+85c46248f3,20.0.0-3-g4cc78c6+63636aeed8,20.0.0-3-g750bffe+e05f822de9,20.0.0-3-gbd60e8c+ff10c6d78d,20.0.0-32-g15a0e07c+ff1c9f120b,20.0.0-4-g97dc21a+68630f7098,20.0.0-4-gfea843c+f45b7d88f4,20.0.0-5-g357b56b+f45b7d88f4,20.0.0-6-g9a5b7a1+2c4171520d,20.0.0-61-g4de25fb+e4dd172200,20.0.0-7-gcda7bf1+85e953d7e4,w.2020.43
LSSTDataManagementBasePackage
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | List of all members
lsst.pex::policy::UrnPolicyFile Class Reference

A Policy file in the installation directory of an LSST product, referred to using a URN. More...

#include <UrnPolicyFile.h>

Inheritance diagram for lsst.pex::policy::UrnPolicyFile:
lsst.pex::policy::DefaultPolicyFile lsst.pex::policy::PolicyFile lsst.pex::policy::PolicySource lsst::daf::base::Persistable

Public Types

typedef std::shared_ptr< PersistablePtr
 

Public Member Functions

 UrnPolicyFile (const std::string &urn, bool strictUrn=false, bool strictLoads=true)
 Construct a new policy file reference from a URN. More...
 
virtual boost::filesystem::path getInstallPath (const char *const productName)
 return the file path to the installation directory of a given named product. More...
 
const boost::filesystem::path & getRepositoryPath () const
 return the full file path to the repository directory where this file will found. More...
 
virtual void load (Policy &policy) const
 load the data from this Policy source into a Policy object. More...
 
virtual void load (Policy &policy)
 
const std::string getPath () const
 return the file path as a string More...
 
bool exists () const
 return true if the file exists. More...
 
virtual const std::stringgetFormatName ()
 return the name of the format that the data is stored in. More...
 
const std::stringgetFormatName () const
 
template<class Archive >
void serialize (Archive &, unsigned int const)
 Template boost::serialization function for the base class. More...
 

Static Public Member Functions

static std::string productNameFromUrn (const std::string &urn, bool strictUrn=false)
 Extract the product name from a URN. More...
 
static std::string filePathFromUrn (const std::string &urn, bool strictUrn=false)
 Extract the local file path from a URN. More...
 
static std::string reposFromUrn (const std::string &urn, bool strictUrn=false)
 Extract the repository name from a URN, or "" if none. More...
 
static bool looksLikeUrn (const std::string &s, bool strict=false)
 Does s look like a URN? That is, does it start with URN_PREFIX or URN_PREFIX_ABBREV? More...
 
static boost::filesystem::path installPathFor (const char *const productName)
 return the file path to the installation directory of a given named product. More...
 

Static Public Attributes

static const std::string URN_PREFIX
 The prefix that a Policy URN starts with. More...
 
static const std::string URN_PREFIX_ABBREV
 
static const std::string EXT_PAF
 
static const std::string EXT_XML
 the PAF file extension, ".paf" More...
 
static const boost::regex SPACE_RE
 the XML file extension, ".xml" More...
 
static const boost::regex COMMENT
 reg-exp for an empty line More...
 
static const boost::regex CONTENTID
 reg-exp for the start of a comment More...
 
static SupportedFormats::Ptr defaultFormats
 a default set of formats More...
 

Protected Attributes

boost::filesystem::path _file
 the path to the underlying policy file More...
 
SupportedFormats::Ptr _formats
 

Detailed Description

A Policy file in the installation directory of an LSST product, referred to using a URN.

For use of URN references in PAF-formatted policy files, see Policy Authoring Format.

The syntax is urn:eupspkg:[PRODUCT_NAME][:REPOSITORY]:PATH, although "urn:eupspkg:" may optionally be abbreviated with "@". PRODUCT_NAME is the name of an LSST product (see DefaultPolicyFile for more details on LSST product installation dirs), and REPOSITORY is a subdirectory, which other references within the Policy will be relative to (see Policy for more details on repositories).

For example:

Caveat: Only supports Dictionary's "DictionaryFile" directive if the value is prefixed like a normal URN reference with "@urn:eupspkg:" or "@@".

Definition at line 68 of file UrnPolicyFile.h.

Member Typedef Documentation

◆ Ptr

Definition at line 77 of file Persistable.h.

Constructor & Destructor Documentation

◆ UrnPolicyFile()

lsst.pex::policy::UrnPolicyFile::UrnPolicyFile ( const std::string urn,
bool  strictUrn = false,
bool  strictLoads = true 
)
inlineexplicit

Construct a new policy file reference from a URN.

Basically, the only required element is a colon, separating the product directory from the local path.

Parameters
urnThe URN of the policy file. A prefix such as "urn:eupspkg:" or "@" is optional.
strictUrnif true, the URN must strictly begin with "@urn:eupspkg:" or "urn:eupspkg:".
strictLoadsif true (default), load() will throw an exception if it encounters recoverable parsing errors in the underlying file (or any of the files it references). Otherwise, the loaded Policy will be incomplete. This is identical to the strict argument to Policy's loadPolicyFiles().

Definition at line 84 of file UrnPolicyFile.h.

86  : DefaultPolicyFile(productNameFromUrn(urn, strictUrn).c_str(), filePathFromUrn(urn, strictUrn),
87  reposFromUrn(urn, strictUrn), strictLoads),
88  _urn(urn) {}

Member Function Documentation

◆ exists()

bool lsst.pex::policy::PolicyFile::exists ( ) const
inlineinherited

return true if the file exists.

Definition at line 171 of file PolicyFile.h.

171 { return boost::filesystem::exists(_file); }

◆ filePathFromUrn()

static std::string lsst.pex::policy::UrnPolicyFile::filePathFromUrn ( const std::string urn,
bool  strictUrn = false 
)
static

Extract the local file path from a URN.

For example,

  • "@urn:eupspkg:product:repos:PATH/TO/FILE.PAF"
  • "@@product:repos:PATH/TO/FILE.PAF"
  • "@product:PATH/TO/FILE.PAF"

◆ getFormatName() [1/2]

virtual const std::string& lsst.pex::policy::PolicyFile::getFormatName ( )
virtualinherited

return the name of the format that the data is stored in.

This may cause the first few records of the source to be read. In this implementation, once the format is definitely determined, the format name is cached internally, preventing re-determination on the next call to this function.

Exceptions
IOErrorif an error occurs while reading the first few characters of the source stream.

Implements lsst.pex::policy::PolicySource.

◆ getFormatName() [2/2]

const std::string& lsst.pex::policy::PolicyFile::getFormatName ( ) const
inlineinherited

Definition at line 183 of file PolicyFile.h.

183 { return const_cast<PolicyFile*>(this)->getFormatName(); }

◆ getInstallPath()

fs::path lsst.pex::policy::DefaultPolicyFile::getInstallPath ( const char *const  productName)
virtualinherited

return the file path to the installation directory of a given named product.

This implementation uses the implementation provided by DefaultPolicyFile::installPathFor().

Exceptions
lsst::pex::exception::NotFoundErrorif the environement variable is not defined.

Definition at line 48 of file DefaultPolicyFile.cc.

48  {
49  return DefaultPolicyFile::installPathFor(productName);
50 }

◆ getPath()

const std::string lsst.pex::policy::PolicyFile::getPath ( ) const
inlineinherited

return the file path as a string

Definition at line 166 of file PolicyFile.h.

166 { return _file.string(); }

◆ getRepositoryPath()

const boost::filesystem::path& lsst.pex::policy::DefaultPolicyFile::getRepositoryPath ( ) const
inlineinherited

return the full file path to the repository directory where this file will found.

Definition at line 104 of file DefaultPolicyFile.h.

104 { return _repos; }

◆ installPathFor()

fs::path lsst.pex::policy::DefaultPolicyFile::installPathFor ( const char *const  productName)
staticinherited

return the file path to the installation directory of a given named product.

In this implementation, the installation directory will be taken from the value of an environment variable PRODUCTNAME_DIR where PRODUCTNAME is the given name of the product with all letters converted to upper case.

Definition at line 61 of file DefaultPolicyFile.cc.

61  {
62  std::string productName_DIR(productName);
63 
64  // transform to upper case
65  std::transform(productName_DIR.begin(), productName_DIR.end(), productName_DIR.begin(),
66  std::ptr_fun<int, int>(std::toupper));
67 
68  // append _DIR
69  productName_DIR += "_DIR";
70 
71  // get installation directory from environment
72  const char* ipath = getenv(productName_DIR.c_str());
73  if (ipath == 0)
74  throw LSST_EXCEPT(pexExcept::NotFoundError, productName_DIR + ": environment variable not set");
75 
76  return fs::path(ipath);
77 }

◆ load() [1/2]

virtual void lsst.pex::policy::PolicyFile::load ( Policy policy)
inlinevirtualinherited

Implements lsst.pex::policy::PolicySource.

Definition at line 194 of file PolicyFile.h.

194  {
195  ((const PolicyFile*)this)->load(policy); // delegate to const version
196  }

◆ load() [2/2]

void lsst.pex::policy::DefaultPolicyFile::load ( Policy policy) const
virtualinherited

load the data from this Policy source into a Policy object.

This implementation will automatically de-reference any file include directives in the policy file.

Parameters
policythe policy object to load the data into
Exceptions
ParserExceptionif an error occurs while parsing the data
IOErrorif an I/O error occurs while reading from the source stream.

Reimplemented from lsst.pex::policy::PolicyFile.

Definition at line 88 of file DefaultPolicyFile.cc.

88  {
89  PolicyFile::load(policy);
90  policy.loadPolicyFiles(_repos, _strict);
91 }

◆ looksLikeUrn()

static bool lsst.pex::policy::UrnPolicyFile::looksLikeUrn ( const std::string s,
bool  strict = false 
)
static

Does s look like a URN? That is, does it start with URN_PREFIX or URN_PREFIX_ABBREV?

Parameters
sthe string to be tested
strictif false, "@" will be accepted as a substitute for "urn:eupspkg:"; if true, urn:eupspkg must be present.

◆ productNameFromUrn()

static std::string lsst.pex::policy::UrnPolicyFile::productNameFromUrn ( const std::string urn,
bool  strictUrn = false 
)
static

Extract the product name from a URN.

For example,

  • @urn:eupspkg:PRODUCT:repos:path/to/file.paf
  • @@PRODUCT:repos:path/to/file.paf
  • @PRODUCT:path/to/file.paf

◆ reposFromUrn()

static std::string lsst.pex::policy::UrnPolicyFile::reposFromUrn ( const std::string urn,
bool  strictUrn = false 
)
static

Extract the repository name from a URN, or "" if none.

For example,

  • "@urn:eupspkg:product:REPOS:path/to/file.paf"
  • "@@product:REPOS:path/to/file.paf"
  • "@product:path/to/file.paf" – no repository, returns ""

◆ serialize()

template<class Archive >
void lsst::daf::base::Persistable::serialize ( Archive &  ,
unsigned int const   
)
inlineinherited

Template boost::serialization function for the base class.

Doesn't actually do anything, since there is no data associated with the base. Inline to allow expansion wherever needed.

Definition at line 87 of file Persistable.h.

87 {}

Member Data Documentation

◆ _file

boost::filesystem::path lsst.pex::policy::PolicyFile::_file
protectedinherited

the path to the underlying policy file

Definition at line 214 of file PolicyFile.h.

◆ _formats

SupportedFormats::Ptr lsst.pex::policy::PolicySource::_formats
protectedinherited

Definition at line 135 of file PolicySource.h.

◆ COMMENT

const boost::regex lsst.pex::policy::PolicyFile::COMMENT
staticinherited

reg-exp for an empty line

Definition at line 203 of file PolicyFile.h.

◆ CONTENTID

const boost::regex lsst.pex::policy::PolicyFile::CONTENTID
staticinherited

reg-exp for the start of a comment

reg-exp for a Policy content identifier, "<?cfg [format] [content] ?>"

Definition at line 208 of file PolicyFile.h.

◆ defaultFormats

SupportedFormats::Ptr lsst.pex::policy::PolicySource::defaultFormats
staticinherited

a default set of formats

Definition at line 130 of file PolicySource.h.

◆ EXT_PAF

const std::string lsst.pex::policy::PolicyFile::EXT_PAF
staticinherited

Definition at line 199 of file PolicyFile.h.

◆ EXT_XML

const std::string lsst.pex::policy::PolicyFile::EXT_XML
staticinherited

the PAF file extension, ".paf"

Definition at line 200 of file PolicyFile.h.

◆ SPACE_RE

const boost::regex lsst.pex::policy::PolicyFile::SPACE_RE
staticinherited

the XML file extension, ".xml"

Definition at line 202 of file PolicyFile.h.

◆ URN_PREFIX

const std::string lsst.pex::policy::UrnPolicyFile::URN_PREFIX
static

The prefix that a Policy URN starts with.

May be abbreviated as "@".

Definition at line 118 of file UrnPolicyFile.h.

◆ URN_PREFIX_ABBREV

const std::string lsst.pex::policy::UrnPolicyFile::URN_PREFIX_ABBREV
static

Definition at line 119 of file UrnPolicyFile.h.


The documentation for this class was generated from the following file:
lsst.pex::policy::UrnPolicyFile::productNameFromUrn
static std::string productNameFromUrn(const std::string &urn, bool strictUrn=false)
Extract the product name from a URN.
std::string
STL class.
lsst.pex::policy::PolicyFile::load
virtual void load(Policy &policy) const
load the data from this Policy source into a Policy object
lsst.pex::exceptions::NotFoundError
Reports attempts to access elements using an invalid key.
Definition: Runtime.h:151
lsst.pex::policy::UrnPolicyFile::reposFromUrn
static std::string reposFromUrn(const std::string &urn, bool strictUrn=false)
Extract the repository name from a URN, or "" if none.
lsst.pex::policy::DefaultPolicyFile::installPathFor
static boost::filesystem::path installPathFor(const char *const productName)
return the file path to the installation directory of a given named product.
Definition: DefaultPolicyFile.cc:61
lsst.pex::policy::PolicyFile::getFormatName
virtual const std::string & getFormatName()
return the name of the format that the data is stored in.
lsst.pex::policy::UrnPolicyFile::filePathFromUrn
static std::string filePathFromUrn(const std::string &urn, bool strictUrn=false)
Extract the local file path from a URN.
std::getenv
T getenv(T... args)
std::transform
T transform(T... args)
std::toupper
T toupper(T... args)
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
lsst.pex::policy::PolicyFile::_file
boost::filesystem::path _file
the path to the underlying policy file
Definition: PolicyFile.h:214
lsst.pex::policy::DefaultPolicyFile::DefaultPolicyFile
DefaultPolicyFile(const char *const productName, const std::string &filepath, const std::string &repos="", bool strict=true)
define a default policy file
Definition: DefaultPolicyFile.cc:40
lsst.pex::policy::PolicyFile::PolicyFile
PolicyFile(const std::string &filepath, const SupportedFormats::Ptr &fmts=defaultFormats)
create a Policy file that points a file with given path.