コード例 #1
0
ファイル: views.py プロジェクト: bneijt/dynmirror.net
  def get(self):
    #Clean up Imported List
    [f.delete() for f in ImportedList.all().filter('ctime < ', datetime.datetime.now() - datetime.timedelta(days = 7))]
    
    #Clean up Hit List
    #TODO rewrite to make sure we always have a few redirects left
    hitCount = Hit.all().count()
    if hitCount > 30:
      [f.delete() for f in Hit.all().filter('ctime < ', datetime.datetime.now() - datetime.timedelta(days = 30))]

    #Remove old files
    for f in File.all().filter('available = ', True).filter('mtime < ', datetime.datetime.now() - datetime.timedelta(days = 32)).fetch(100):
      f.available = False
      f.put()
コード例 #2
0
ファイル: loadSequence.py プロジェクト: cylfox/kmers-tynsa
def generate_hits(i_file_name_1, i_file_name_2, o_file_name):
    print('\n\n~ generate_hits ~ dic_1: ' + i_file_name_1 + ', dic_2: ' +
          i_file_name_2 + ', output: ' + o_file_name + '\n')
    hits = []
    with open(i_file_name_1, 'rb') as dic_file_1, \
            open(i_file_name_2, 'rb') as dic_file_2, \
            open(o_file_name, 'wb') as hits_file:

        # Load both sorted dictionaries
        dic_1 = pickle.load(dic_file_1)
        dic_2 = pickle.load(dic_file_2)
        i = 0
        j = 0
        while i < len(dic_1) and j < len(dic_2):
            if dic_1[i].k_hash == dic_2[j].k_hash:
                for p_1 in dic_1[i].position:
                    for p_2 in dic_2[j].position:
                        hit = Hit(dic_1[i].k_hash, p_1, p_2)
                        hits.append(hit)
                        #print(str(hit))
                        #print(kmer_index2word(hit.k_hash, 5, ALP), str(hit))
                # print(str(hit))
                i += 1
            elif dic_1[i].k_hash < dic_2[j].k_hash:
                i += 1
            elif dic_1[i].k_hash > dic_2[j].k_hash:
                j += 1
        # Dump array into file using pickle
        pickle.dump(hits, hits_file)
    dic_file_1.close()
    dic_file_2.close()
    hits_file.close()
コード例 #3
0
def completeHit(uid, code):
    hit = Hit.get(Hit.code == code)
    if hit.uid == uid:
        hit.status = 'TERMINATED'
        hit.save()
        return hit.target
    return False
コード例 #4
0
ファイル: middleware.py プロジェクト: bobjansen/django_fabv
def save_hit(request, response):
    """
    Save a hit on a page.
    """
    try:
        username = request.user.username
    except:
        username = ""
    try:
        h = Hit(user=request.fabv_user, username=username,
                path=request.path[:200],
                status_code=response.status_code,
                referer=request.META.get('HTTP_REFERER', ''),
                user_agent=request.META.get('HTTP_USER_AGENT', ''))
        h.save()
    except:
        pass  # What is a sensible action? TODO
コード例 #5
0
def nb_redirect(request, obj_id):

    # increment the current object by 1
    nb = Notebook.objects.get(pk=obj_id)  # TODO: get or 404
    nb.hits_total += 1
    nb.save()
    ip = request.META['REMOTE_ADDR']
    h = Hit(model=nb, created=timezone.now(), ip=ip)
    h.save()
    # increment one view
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(nb.full_html)
    context = {
        'html': str(soup.find('body')),
        'redirect': nb.html_url,
        'title': nb.title
    }
    return render(request, 'web/redirect.html', context)
コード例 #6
0
def getHits(uid):
    hits = {}
    for hit in Hit.select():
        if hit.uid == uid:
            hits[hits.target] = {
                hit.status, hit.weapon.desc, hit.location.desc
            }

    return hits
コード例 #7
0
def reassignHit(current, new):
    hit = Hit.get(Hit.uid == current)
    hit.uid = new
    hit.save()
    return {
        hit.target: {
            hit.status,
            hit.weapon.desc,
            hit.location.desc,
        }
    }
コード例 #8
0
ファイル: views.py プロジェクト: bneijt/dynmirror.net
 def get(self):
   query = self.request.get('q')
   if query:
     return self.render_to_response('home.html', search(query))
   #path == /metalink/ comment == link
   last = []
   referers = []
   for l in Hit.all().filter('path =', '/metalink/').order('-ctime').fetch(20):
     if not last.count(l.comment):
       last.append(l.comment)
     r = l.referer.strip('/')
     if r and not referers.count(r):
       referers.append(r)
   return self.render_to_response('home.html', {'last_metalinks': last, 'last_referrers': referers})
コード例 #9
0
ファイル: views.py プロジェクト: unicefuganda/rapidsms-mvrs
def ussd_menu(req, input_form=YoForm, output_template='ussd/yo.txt'):
    hit = Hit()
    hit.save()
    logger.info('Created a hit at: %s' % hit.created_on)
    register_custom_field_types()
    form = input_form(req.REQUEST)
    if form and form.is_valid():
        session = form.cleaned_data['transactionId']
        request_string = form.cleaned_data['ussdRequestString']
        if request_string:
            logger.info('They Answered: %s' % request_string)
        if session.navigations.count()>=2:#Starting to cache if there if away from root menu
            if not session.connection.identity in cache:
                sess= {'pk': session.pk, 'transaction_id': session.transaction_id}
                cache.set(session.connection.identity, sess, 1800)


        response_screen = session.advance_progress(request_string)#submit input and advance to the next screen
        if isinstance(response_screen,Menu):
            last_nav = Navigation.objects.order_by('-date').filter(session=session)[0]
            logger.info('We asked: %s' % last_nav.screen.downcast())
        else:
            question = response_screen.question if isinstance(response_screen,Question) else response_screen.label
            logger.info('We asked: %s' % question)

        if response_screen.slug in settings.END_SCREENS:#if we have already progressed to the last screen, the user must have put in a pin or cancelled, lets forward to UTL
            cache.delete(session.connection.identity)
            logger.info('Preparing to submit this data...')
            if request_string == '0':
                if response_screen.slug in ["delete_thank_you","validate_thank_you","val_thank_you"]:
                    response_screen = "Your request was not submitted. Please start again."
                elif response_screen.slug == "new_name_thank":
                    response_screen = "The information was not updated. Please start again."
                else:
                    response_screen = 'The information was not recorded. Please start again.'

                logger.info("Submission canceled by user... ")
            else:
                response_screen =  forward_to_utl(session,forward_url=settings.FORWARD_URL)
            return render_to_response(output_template, {
                        'response_content':urllib.quote(str(response_screen)),
                        'action':'end',
                        }, context_instance=RequestContext(req))



        action = 'end' if response_screen.is_terminal() else 'request'

        label = response_screen if type(response_screen) == unicode or type(response_screen) == str else response_screen.label
        if label == getattr(settings,'ROOT_MENU_DICT',None).get('resume'):
            if session.connection.identity in cache:
                ses=cache.get(session.connection.identity)
                prev_session=Session.objects.get(pk=ses.get('pk'))
                response_screen=prev_session.navigations.latest('date').text
                prev_session.transaction_id=session.transaction_id
                prev_session.save()
                session.delete()
                logger.info('Resumed Broken Session: %s' % prev_session.transaction_id)
            else:
                response_screen="You Have No Resumable Sessions"
                action = 'end'

        return render_to_response(output_template, {
            'response_content':urllib.quote(str(response_screen)),
            'action':action,
            }, context_instance=RequestContext(req))

    logging.info('Status is 404...')
    return HttpResponse(status=404)
コード例 #10
0
ファイル: view_metalink.py プロジェクト: bneijt/dynmirror.net
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        devhelp_url = '\n\nPlease visit http://www.dynmirror.net/help/developers/ for more information.'
        #If url is given, use that as the digest
        digest = os.path.basename(self.request.path)
        if len(digest) and not digest.endswith('.metalink'):
            return self.not_found(
                '404 not found: If you do file look-ups by digest, it needs to end in ".metalink".'
                + devhelp_url)
        digest = digest[:-len('.metalink')]
        digests = {}
        url = self.request.get('url')
        fileLink = LinkElement()

        if len(url):
            #Try to load the digest from the database
            url = File.urlparse(url).geturl()

            #Add Coral link if wanted
            if self.request.get('coral', default_value='not_set') != 'not_set':
                cu = urlparse.urlparse(url)  #Parse for the coral url
                if cu.scheme == 'http' and not cu.netloc.endswith('.nyud.net'):
                    fileLink.urls.append({
                        'v':
                        'http://' + cu.hostname + '.nyud.net' + cu.path,
                        'a': {
                            'type': File.urlparse(url).scheme
                        }
                    })
            Hit(path=self.request.path,
                remote_addr=self.request.remote_addr,
                referer=self.request.headers.get('referer', ''),
                comment=url).save()
            f = File.get_by_key_name(url)
            if f == None:
                #Host a link only metalink
                fileLink.name = os.path.basename(url)
                fileLink.urls.insert(0, {
                    'v': url,
                    'a': {
                        'type': File.urlparse(url).scheme
                    }
                })
                self.response.headers[
                    'Content-Type'] = 'application/metalink+xml'
                self.response.headers[
                    'Content-Disposition'] = 'attachment; filename="%s.metalink"' % os.path.basename(
                        url).replace('"', '\\"')
                return self.render_to_response(
                    'metalink.xml', {
                        'files': [fileLink],
                        'comment':
                        'Link only, because no validated link information could be found in the database. Make sure you use the _exact_ url you used to add the metadata.'
                    })
            #inherit all the digest information from the file in db
            fileLink.name = f.name
            fileLink.size = f.size
            fileLink.digests.update(f.digests())
            if len(digest) > 0:
                return self.response.out.write(
                    'For security reasons, you can not combine digest and url, because we can not determine which is authorative and what to do in case they do not match in the database.'
                    + devhelp_url)

        if len(digest) > 0:
            #Malformed digest
            if not hash_sizes.has_key(len(digest)):
                return self.not_found(
                    '404 Not Found, the digest is considered malformed. Make sure it is lowercase hex representing an MD5, SHA1, SHA256 or SHA512.'
                    + devhelp_url)
            if not lower_hex_regex.match(digest):
                return self.not_found(
                    '404 Not Found, the digest is considered malformed because it did not match /[0-9a-f]/.'
                    + devhelp_url)
            #OK, so a digest is given, set the digest in the fileLink to the given value
            fileLink.digests[hash_sizes[len(digest)]] = digest

        #TODO Unique hosts; hosts = set
        #Explode the file using all known digests, both url and digest
        names = {}
        sizes = {}
        cntry_regex = re.compile(
            '.*\.(a[cdefgilmnoqrstuwxz]|c[acdfghiklmnoruvxyz]|b[abdefghijmnorstvwyz]|e[ceghrstu]|d[ejkmoz]|g[abdefghilmnpqrstuwy]|f[ijkmor]|i[delmnoqrst]|h[kmnrtu]|k[eghimnprwyz]|j[emop]|m[acdeghklmnopqrstuvwxyz]|l[abcikrstuvy]|o[m]|n[acefgilopruz]|q[a]|p[aefghklmnrstwy]|s[abcdeghijklmnortuvyz]|r[eosuw]|u[agkmsyz]|t[cdfghjklmnoprtvwz]|w[fs]|v[aceginu]|y[etu]|z[amw])$'
        )
        for digest_type in fileLink.digests:
            files = File.all().filter('%s = ' % digest_type,
                                      fileLink.digests[digest_type]).fetch(20)
            for f in files:
                attr = {
                    'type': 'http'
                }  #Optimization, currently only HTTP supported f.scheme
                cntry = cntry_regex.match(f.hostname)
                if cntry:
                    attr['location'] = cntry.group(1)
                fileLink.urls.append({'v': f.url(), 'a': attr})
                names.setdefault(f.name, 0)
                names[f.name] += 1
                sizes.setdefault(f.size, 0)
                sizes[f.size] += 1

        #If a name is given, just rename the file
        name = self.request.get('name')
        if name:
            fileLink.name = name
        if not fileLink.name:
            #Democratic naming
            names = [(names[k], k) for k in names]
            names.sort()
            fileLink.name = names[-1][1]
        if not fileLink.size:
            #Democratic size
            sizes[0] = 0
            sizes = [(sizes[k], k) for k in sizes]
            sizes.sort()
            fileLink.size = sizes[-1][1]
        random.shuffle(fileLink.urls)
        self.response.headers['Content-Type'] = 'application/metalink+xml'
        self.response.headers[
            'Content-Disposition'] = 'attachment; filename="%s.metalink"' % os.path.basename(
                fileLink.name).replace('"', '\\"')
        return self.render_to_response('metalink.xml', {'files': [fileLink]})