def bind(domain_string, mydomain): """ Calculate and save in db the last assignment valid to short classic Params domain_s - a domain : string mydomain - a domain who provide the service : string Return last assignament : string """ last_assignment = '' query = db.Query(Domain).filter('name_domain = ', domain_string) if query.count() != 0: dt = query.fetch(1)[0] last_assignment = dt.last_assignament while True: last_assignament = compute_next(last_assignment) short = '/'.join( (mydomain, domain_string, last_assignament) ) if not functions.isAlredyCustum(short): break dt.last_assignament = last_assignament db.put(dt) return dt.last_assignament
def short(url, custom_string=None): """ Perform the shortening of given url. Optionally use a custom string instead of using internal algorithm provided by core module Params url - the url to shorten: url custom_string - the string to use to short the link: string Return shorted url: url string """ domain_name = parse_domain(url) if is_blacklisted(domain_name): raise DomainBlacklistedError(domain_name) if custom_string and shorting_frag_already_exists(custom_string, False): raise URLExistsError(custom_string) domain = get_or_create_domain(domain_name) urlbox = None if custom_string: urlbox = UrlBox() urlbox.shorting_frag = custom_string urlbox.custom = True else: urlbox = respawn_urlbox(domain) if not urlbox: urlbox = UrlBox() short = compute_next(domain.last_shorting_frag_assigned) while shorting_frag_already_exists(domain, short): short = compute_next(short) urlbox.shorting_frag = short urlbox.custom = False urlbox.domain = domain urlbox.url = url urlbox.put() return urlbox.shorted_url