Beispiel #1
0
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
Beispiel #2
0
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