예제 #1
0
 def __set_refresh_seconds(self, value):
     if value is not None:
         try:
             value = int(value)
         except (TypeError, ValueError):
             raise api_errors.BadRepositoryAttributeValue("refresh_seconds",
                                                          value=value)
         if value < 0:
             raise api_errors.BadRepositoryAttributeValue("refresh_seconds",
                                                          value=value)
     self.__refresh_seconds = value
예제 #2
0
 def __replace_uris(self, attr, value, trailing_slash=True):
     if value is None:
         value = []
     if not isinstance(value, list):
         raise api_errors.BadRepositoryAttributeValue(attr, value=value)
     uris = []
     for u in value:
         if not isinstance(u, RepositoryURI):
             u = RepositoryURI(u, trailing_slash=trailing_slash)
         elif trailing_slash:
             u.uri = misc.url_affix_trailing_slash(u.uri)
         uris.append(u)
     uris.sort(key=URI_SORT_POLICIES[self.__sort_policy])
     return uris
예제 #3
0
 def __set_ssl_key(self, filename):
     if self.scheme not in SSL_SCHEMES and filename:
         raise api_errors.UnsupportedRepositoryURIAttribute(
             "ssl_key", scheme=self.scheme)
     if filename:
         if not isinstance(filename, basestring):
             raise api_errors.BadRepositoryAttributeValue("ssl_key",
                                                          value=filename)
         filename = os.path.abspath(filename)
         if not os.path.exists(filename):
             raise api_errors.NoSuchKey(filename, uri=self.uri)
     if filename == "":
         filename = None
     # XXX attempt key verification here?
     self.__ssl_key = filename
예제 #4
0
    def __set_last_refreshed(self, value):
        if not self.meta_root:
            return

        if value is not None and not isinstance(value, dt.datetime):
            raise api_errors.BadRepositoryAttributeValue("last_refreshed",
                                                         value=value)

        lcfile = os.path.join(self.meta_root, "last_refreshed")
        if not value:
            # If no value was provided, attempt to remove the
            # tracking file.
            try:
                portable.remove(lcfile)
            except EnvironmentError, e:
                # If the file can't be removed due to
                # permissions, a read-only filesystem, or
                # because it doesn't exist, continue on.
                if e.errno not in (errno.ENOENT, errno.EACCES, errno.EROFS):
                    raise
            return
예제 #5
0
 def __set_trailing_slash(self, value):
     if value not in (True, False):
         raise api_errors.BadRepositoryAttributeValue("trailing_slash",
                                                      value=value)
     self.__trailing_slash = value