def __set_uri(self, uri): if uri is None: raise api_errors.BadRepositoryURI(uri) # Decompose URI to verify attributes. scheme, netloc, path, params, query = \ urlparse.urlsplit(uri, allow_fragments=0) # The set of currently supported protocol schemes. if scheme.lower() not in SUPPORTED_SCHEMES: raise api_errors.UnsupportedRepositoryURI(uri) # XXX valid_pub_url's check isn't quite right and could prevent # usage of IDNs (international domain names). if not netloc or not misc.valid_pub_url(uri): raise api_errors.BadRepositoryURI(uri) # Normalize URI scheme. uri = uri.replace(scheme, scheme.lower(), 1) if self.__trailing_slash: uri = misc.url_affix_trailing_slash(uri) if scheme.lower() not in SSL_SCHEMES: self.__ssl_cert = None self.__ssl_key = None self.__uri = uri
def has_origin(self, origin): """Returns a boolean value indicating whether a matching 'origin' exists for the repository. 'origin' can be a RepositoryURI object or a URI string.""" if not isinstance(origin, RepositoryURI): origin = misc.url_affix_trailing_slash(origin) return origin in self.origins
def has_mirror(self, mirror): """Returns a boolean value indicating whether a matching 'mirror' exists for the repository. 'mirror' can be a RepositoryURI object or a URI string.""" if not isinstance(mirror, RepositoryURI): mirror = misc.url_affix_trailing_slash(mirror) return mirror in self.mirrors
def get_origin(self, origin): """Returns a RepositoryURI object representing the origin that matches 'origin'. 'origin' can be a RepositoryURI object or a URI string.""" if not isinstance(origin, RepositoryURI): origin = misc.url_affix_trailing_slash(origin) for o in self.origins: if origin == o.uri: return o raise api_errors.UnknownRepositoryOrigin(origin)
def get_mirror(self, mirror): """Returns a RepositoryURI object representing the mirror that matches 'mirror'. 'mirror' can be a RepositoryURI object or a URI string.""" if not isinstance(mirror, RepositoryURI): mirror = misc.url_affix_trailing_slash(mirror) for m in self.mirrors: if mirror == m.uri: return m raise api_errors.UnknownRepositoryMirror(mirror)
def remove_origin(self, origin): """Removes the origin matching 'origin' from the repository. 'origin' can be a RepositoryURI object or a URI string.""" if not isinstance(origin, RepositoryURI): origin = misc.url_affix_trailing_slash(origin) for i, o in enumerate(self.origins): if origin == o.uri: # Immediate return as the index into the array # changes with each removal. del self.origins[i] return raise api_errors.UnknownRepositoryOrigin(origin)
def remove_mirror(self, mirror): """Removes the mirror matching 'mirror' from the repository. 'mirror' can be a RepositoryURI object or a URI string.""" if not isinstance(mirror, RepositoryURI): mirror = misc.url_affix_trailing_slash(mirror) for i, m in enumerate(self.mirrors): if mirror == m.uri: # Immediate return as the index into the array # changes with each removal. del self.mirrors[i] return raise api_errors.UnknownRepositoryMirror(mirror)
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