Ejemplo n.º 1
0
def mirrorlist(request):
    data = {}
    resources = []
    remote = request.environ[settings.DMIRR_REMOTE_ADDR_KEY]

    client = get_geodata_by_ip(remote)
    repo = get_object_or_404(db.ProjectRepo,
                             label=request.GET.get('repo', None))
    arch = get_object_or_404(db.Arch, label=request.GET.get('arch', None))
    protocol = get_object_or_404(db.Protocol,
                                 label=request.GET.get('protocol', 'http'))

    key = "%s-%s-%s-%s" % (remote, repo.id, arch.id, protocol.id)

    cached_data = cache.get(key)
    if cached_data:
        data = cached_data
    else:
        for resource in repo.project.resources.all():
            if not resource.include_in_mirrorlist:
                continue
            if protocol in resource.protocols.all() and \
               arch in repo.archs.all():
                full_uri = "%s://%s%s%s/" % (
                    protocol.label,
                    resource.system.label,
                    resource.path,
                    re.sub('@arch@', arch.label, repo.path.strip('/')),
                )
                if not client:
                    distance = 'unknown'
                else:
                    distance = get_distance(
                        (client['latitude'], client['longitude']),
                        (resource.system.latitude, resource.system.longitude),
                    )
                resources.append((distance, full_uri, resource))

        resources.sort()
        if not client:
            data['location'] = 'Unknown Location (%s)' % remote
        else:
            loc = get_location(client.get('city', None),
                               client.get('region_name', None),
                               client.get('country_name', None))
            data['location'] = '%s (%s)' % (loc, remote)

        data['resources'] = resources
        cache.set(key, data)

    return render(request,
                  'mirrorlist/list.html',
                  data,
                  content_type='text/plain')
Ejemplo n.º 2
0
Archivo: views.py Proyecto: derks/dmirr
def mirrorlist(request):
    data = {}
    resources = []
    remote = request.environ[settings.DMIRR_REMOTE_ADDR_KEY]

    client = get_geodata_by_ip(remote)
    repo = get_object_or_404(db.ProjectRepo, 
                             label=request.GET.get('repo', None))
    arch = get_object_or_404(db.Arch, 
                             label=request.GET.get('arch', None))
    protocol = get_object_or_404(db.Protocol, 
                             label=request.GET.get('protocol', 'http'))
    
    key = "%s-%s-%s-%s" % (remote, repo.id, arch.id, protocol.id)

    cached_data = cache.get(key)
    if cached_data:
        data = cached_data
    else:
        for resource in repo.project.resources.all():
            if not resource.include_in_mirrorlist:
                continue
            if protocol in resource.protocols.all() and \
               arch in repo.archs.all():
                full_uri = "%s://%s%s%s/" % (
                    protocol.label, 
                    resource.system.label,
                    resource.path,
                    re.sub('@arch@', arch.label, repo.path.strip('/')),
                    )
                if not client:
                    distance = 'unknown'
                else:
                    distance = get_distance( 
                        (client['latitude'], client['longitude']), 
                        (resource.system.latitude, resource.system.longitude),
                        )
                resources.append((distance, full_uri, resource))
            
        resources.sort()
        if not client:
            data['location'] = 'Unknown Location (%s)' % remote
        else:
            loc = get_location(client.get('city', None), 
                               client.get('region_name', None), 
                               client.get('country_name', None))
            data['location'] = '%s (%s)' % (loc, remote)
            
        data['resources'] = resources
        cache.set(key, data)
    
    return render(request, 'mirrorlist/list.html', data, 
                  content_type='text/plain')
Ejemplo n.º 3
0
    def save(self):
        '''custom save function to pull geoip'''

        # extract the domain from Repo URL and then resolve said domain
        ip = socket.gethostbyname(self.label)
        geodata = get_geodata_by_ip(ip)
        self.ip = ip
        self.country = geodata.get('country_name', None)
        self.country_code = geodata.get('country_code', None)
        self.city = geodata.get('city', None)
        self.region = geodata.get('region_name', None)
        self.longitude = geodata.get('longitude', None)
        self.latitude = geodata.get('latitude', None)
        self.postal_code = geodata.get('postal_code', None)
        super(System, self).save()
Ejemplo n.º 4
0
                self.longitude = geodata[1][1]
            except IndexError, e:
                raise IndexError(
                    "Unable to extract longitude and latitude from %s" %
                    geodata)

            try:
                location = geodata[0].split(', ')
                self.country_code = location[2]
            except IndexError:
                raise IndexError("Unable to extract country_code from %s" %
                                 geodata)

        else:
            # Attempt lookup using GeoData
            geodata = get_geodata_by_ip(ip)
            if not geodata:
                raise ValidationError(
                    'Unable to determine location from IP address, please enter manually'
                )
            self.country = geodata.get('country_name', None)
            self.country_code = geodata.get('country_code', None)
            self.city = geodata.get('city', None)
            self.region = geodata.get('region_name', None)
            self.longitude = geodata.get('longitude', None)
            self.latitude = geodata.get('latitude', None)
            self.postal_code = geodata.get('postal_code', None)

        self.ip = ip
        super(System, self).save()
Ejemplo n.º 5
0
            geodata = get_geodata_by_region(*args)
            try:
                self.latitude = geodata[1][0]
                self.longitude = geodata[1][1]
            except IndexError, e:
                raise IndexError("Unable to extract longitude and latitude from %s" % geodata)

            try:
                location = geodata[0].split(', ')
                self.country_code = location[2]
            except IndexError:
                raise IndexError("Unable to extract country_code from %s" % geodata)

        else:
            # Attempt lookup using GeoData
            geodata = get_geodata_by_ip(ip)
            if not geodata:
                raise ValidationError('Unable to determine location from IP address, please enter manually')
            self.country = geodata.get('country_name', None)
            self.country_code = geodata.get('country_code', None)
            self.city = geodata.get('city', None)
            self.region = geodata.get('region_name', None)
            self.longitude = geodata.get('longitude', None)
            self.latitude = geodata.get('latitude', None)
            self.postal_code = geodata.get('postal_code', None)

        self.ip = ip
        super(System, self).save()
        
    @property
    def display_name(self):