import urllib from functools import wraps from uuid import uuid4 def parse_namespace_repository(repository): parts = repository.rstrip('/').split('/', 1) if len(parts) < 2: namespace = 'library' repository = parts[0] else: (namespace, repository) = parts repository = urllib.quote_plus(repository) return (namespace, repository) def parse_repository_name(f): @wraps(f) def wrapper(repository, *args, **kwargs): (namespace, repository) = parse_namespace_repository(repository) return f(namespace, repository, *args, **kwargs) return wrapper def format_robot_username(parent_username, robot_shortname): return '%s+%s' % (parent_username, robot_shortname) def parse_robot_username(robot_username): if not '+' in robot_username: return None return robot_username.split('+', 2) uuid_generator = lambda: str(uuid4()) def urn_generator(namespace_portions, id_generator=uuid_generator): prefix = 'urn:%s:' % ':'.join(namespace_portions) def generate_urn(): return prefix + id_generator() return generate_urn