예제 #1
0
 def assertInvalid(self, url):
     try:
         domain = Domain.objects.create(name=extract_domain(url))
         website = Website.objects.create(url=url, domain=domain)
         website.delete()
         domain.delete()
         self.fail(u"invalid URL did not raise IntegrityError: '%s'" % url)
     except IntegrityError:
         transaction.rollback()
예제 #2
0
 def assertInvalid(self, url):
     try:
         domain = Domain.objects.create(name=extract_domain(url))
         website = Website.objects.create(url=url, domain=domain)
         website.delete()
         domain.delete()
         self.fail(u"invalid URL did not raise IntegrityError: '%s'" % url)
     except IntegrityError:
         transaction.rollback()
예제 #3
0
def unknown_url(http_request, url):
    """
    Error page for unknown URL.
    """
    domains = Domain.objects.filter(name=extract_domain(url, remove_www=True))
    if len(domains):
        domain_website_list = domains[0].website_set.all()
    return render_to_response('websites/unknown.html', locals(),
        context_instance=RequestContext(http_request))
예제 #4
0
def unknown_url(http_request, url):
    """
    Error page for unknown URL.
    """
    domains = Domain.objects.filter(name=extract_domain(url, remove_www=True))
    if len(domains):
        domain_website_list = domains[0].website_set.all()
    return render_to_response('websites/unknown.html', locals(),
        context_instance=RequestContext(http_request))
예제 #5
0
 def assertValid(self, url):
     self.assertEqual(Website.objects.filter(url=url).count(), 0)
     domain, created = Domain.objects.get_or_create(
         name=extract_domain(url))
     try:
         website = Website.objects.create(url=url, domain=domain)
     except IntegrityError:
         transaction.rollback()
         self.fail(u"valid URL raised IntegrityError: '%s'" % url)
     self.assertEqual(Website.objects.filter(url=url).count(), 1)
     website.delete()
     self.assertEqual(Website.objects.filter(url=url).count(), 0)
예제 #6
0
 def assertValid(self, url):
     self.assertEqual(Website.objects.filter(url=url).count(), 0)
     domain, created = Domain.objects.get_or_create(
         name=extract_domain(url))
     try:
         website = Website.objects.create(url=url, domain=domain)
     except IntegrityError:
         transaction.rollback()
         self.fail(u"valid URL raised IntegrityError: '%s'" % url)
     self.assertEqual(Website.objects.filter(url=url).count(), 1)
     website.delete()
     self.assertEqual(Website.objects.filter(url=url).count(), 0)
예제 #7
0
def submit(http_request, username, encrypted_password, url, browsers):
    """
    Submit a new group of screenshot requests.

    Arguments
    ~~~~~~~~~
    * username string (your user account on the server)
    * encrypted_password string (lowercase hexadecimal, length 32)
    * url string (request screenshots of this website)
    * browsers list (platform, name and version for each browser)

    Return value
    ~~~~~~~~~~~~
    * id int (request group id)

    You can use the returned request group id to check the progress of
    the screenshot requests with requests.status.
    """
    # Get user from database
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        raise Fault(404, "User not found.")
    # Verify authentication
    nonces.verifyUser(http_request, user, encrypted_password)
    # Check priority
    priority = 0
    if 'shotserver04.priority' in settings.INSTALLED_APPS:
        from shotserver04.priority import user_priority
        priority = user_priority(user)
        if priority < 1:
            raise Fault(402, "Priority processing is required.")
    # Create domain and website if needed
    url = normalize_url(url)
    domain_name = extract_domain(url, remove_www=True)
    domain = Domain.objects.get_or_create(name=domain_name)[0]
    website = Website.objects.get_or_create(domain=domain, url=url)[0]
    # Create request group
    expire = datetime.now() + timedelta(minutes=30)
    ip = http_request.META['REMOTE_ADDR']
    request_group = RequestGroup.objects.create(website=website,
                                                user=user,
                                                ip=ip,
                                                expire=expire,
                                                priority=priority)
    # Create browser requests
    platforms = Platform.objects.all()
    browser_groups = BrowserGroup.objects.all()
    for name in browsers:
        parts = name.split('_')
        if len(parts) != 4:
            continue
        platform_name, browser_name, major, minor = parts
        platform_name = platform_name.replace('-', ' ')
        platform = find_by_name(platforms, platform_name)
        if platform is None:
            continue
        browser_group = find_by_name(browser_groups, browser_name)
        if browser_group is None:
            continue
        Request.objects.get_or_create(
            request_group=request_group,
            platform=platform,
            browser_group=browser_group,
            major=int_or_none(major),
            minor=int_or_none(minor),
            priority=priority,
        )
    return request_group.id
예제 #8
0
def submit(http_request, username, encrypted_password, url, browsers):
    """
    Submit a new group of screenshot requests.

    Arguments
    ~~~~~~~~~
    * username string (your user account on the server)
    * encrypted_password string (lowercase hexadecimal, length 32)
    * url string (request screenshots of this website)
    * browsers list (platform, name and version for each browser)

    Return value
    ~~~~~~~~~~~~
    * id int (request group id)

    You can use the returned request group id to check the progress of
    the screenshot requests with requests.status.
    """
    # Get user from database
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        raise Fault(404, "User not found.")
    # Verify authentication
    nonces.verifyUser(http_request, user, encrypted_password)
    # Check priority
    priority = 0
    if 'shotserver04.priority' in settings.INSTALLED_APPS:
        from shotserver04.priority import user_priority
        priority = user_priority(user)
        if priority < 1:
            raise Fault(402, "Priority processing is required.")
    # Create domain and website if needed
    url = normalize_url(url)
    domain_name = extract_domain(url, remove_www=True)
    domain = Domain.objects.get_or_create(name=domain_name)[0]
    website = Website.objects.get_or_create(domain=domain, url=url)[0]
    # Create request group
    expire = datetime.now() + timedelta(minutes=30)
    ip = http_request.META['REMOTE_ADDR']
    request_group = RequestGroup.objects.create(
        website=website, user=user, ip=ip,
        expire=expire, priority=priority)
    # Create browser requests
    platforms = Platform.objects.all()
    browser_groups = BrowserGroup.objects.all()
    for name in browsers:
        parts = name.split('_')
        if len(parts) != 4:
            continue
        platform_name, browser_name, major, minor = parts
        platform_name = platform_name.replace('-', ' ')
        platform = find_by_name(platforms, platform_name)
        if platform is None:
            continue
        browser_group = find_by_name(browser_groups, browser_name)
        if browser_group is None:
            continue
        Request.objects.get_or_create(
            request_group=request_group,
            platform=platform,
            browser_group=browser_group,
            major=int_or_none(major),
            minor=int_or_none(minor),
            priority=priority,
            )
    return request_group.id