예제 #1
0
    def send(self):

        feedback = request.params['feedback']

        response.write("Your feedback has been sent to the triggr team - thanks for getting in touch!")

	# Send a new account notification
	addrFrom = '*****@*****.**'
	addrTo = '*****@*****.**'
	subject = 'Triggr: Customer Feedback'

	body = """\
From: %s
To: %s
Subject: %s

%s
""" % (addrFrom, addrTo, subject, feedback)

	server = smtplib.SMTP('smtp.gmail.com', 587)
	server.ehlo()
	server.starttls()
	server.login('*****@*****.**', 'T3llM3Wh3n')
	server.sendmail(addrFrom, addrTo, body)
	server.quit()
예제 #2
0
 def GetInfo(self):
     from pprint import pformat
     request.headers['Content-Type'] = 'text/ascii'
     response.write('Some info about this service\n')
     for layer in model.ukcip02.layers:
         response.write('Layer %s: %s\n' %
                        (layer, pformat(g.ukcip02_layers[layer].__dict__)))
예제 #3
0
    def _writeImageResponse(self, pilImage, format):

        buf = StringIO()
        pilImage.save(buf, self._pilImageFormats[format])

        response.headers['Content-Type'] = format

        if config.get('cows.browser_caching_enabled', '').lower() == 'true':
            response.headers["cache-control"] = "public, max-age=3600"
            response.headers["pragma"] = ""

        response.write(buf.getvalue())
예제 #4
0
 def void(self):
     """send VoID of every dataset in a ZIP file"""
     rdfdocs = Session.query(model.RDFDoc).filter(model.RDFDoc.active==True).join(model.RDFDoc.current_stats).filter(and_(model.StatResult.triples > 0, model.RDFDoc.format != 'sparql'))
     zip_temp_file = tempfile.NamedTemporaryFile(prefix='lodstatswww_voidzip')
     zip_temp = zipfile.ZipFile(zip_temp_file, 'w', zipfile.ZIP_DEFLATED)
     for r in rdfdocs:
         zip_temp.writestr("%s.ttl" % r.name, r.current_stats.void)
     zip_temp.close()
     zip_temp_file.seek(0)
     response.content_type = 'application/zip'
     response.headers['Content-Disposition'] = "filename=LODStats_all_void.zip"
     # FIXME: use paste.fileapp if this ever gets too large
     for data in zip_temp_file:
         response.write(data)
예제 #5
0
파일: api.py 프로젝트: avl/SwFlightPlanner
 def getnewadchart(self):
     def writeInt(x):
         response.write(struct.pack(">I",x))
     def writeLong(x):
         response.write(struct.pack(">Q",x))
     def writeUTF(s):
         if s==None: s=u""
         try:
             encoded=s.encode('utf8')
         except Exception,cause:
             print "While trying to encode: %s"%(s,)
             raise
         l=len(encoded)
         response.write(struct.pack(">H",l)) #short
         response.write(encoded)
예제 #6
0
    def getnewadchart(self):
        def writeInt(x):
            response.write(struct.pack(">I", x))

        def writeLong(x):
            response.write(struct.pack(">Q", x))

        def writeUTF(s):
            if s == None: s = u""
            try:
                encoded = s.encode('utf8')
            except Exception, cause:
                print "While trying to encode: %s" % (s, )
                raise
            l = len(encoded)
            response.write(struct.pack(">H", l))  #short
            response.write(encoded)
예제 #7
0
파일: api.py 프로젝트: avl/SwFlightPlanner
 def getadchart(self):
     def writeInt(x):
         response.write(struct.pack(">I",x))
     def writeFloat(f):
         response.write(struct.pack(">f",f))
     def writeDouble(f):
         response.write(struct.pack(">d",f))
     def writeUTF(s):
         if s==None: s=u""
         try:
             encoded=s.encode('utf8')
         except Exception,cause:
             print "While trying to encode: %s"%(s,)
             raise
         l=len(encoded)
         #print "Writing %s, length %d"%(repr(encoded),l)
         response.write(struct.pack(">H",l)) #short
         response.write(encoded)
예제 #8
0
    def fetchFile(self, file):
        logging.info("Fetching file, '%s'" % file)

        #given the filename, these are the paths to the file, and to the accompanying text file
        filePath = config['cows.csml.publish_dir'] + '/' + file

        #just return the file, no security check implemented for now.
        fileToReturn = open(filePath, 'r')
        mType = self._getMimeType(file)
        response.headers['Content-Type'] = mType
        return response.write(fileToReturn.read())
예제 #9
0
    def getadchart(self):
        def writeInt(x):
            response.write(struct.pack(">I", x))

        def writeFloat(f):
            response.write(struct.pack(">f", f))

        def writeDouble(f):
            response.write(struct.pack(">d", f))

        def writeUTF(s):
            if s == None: s = u""
            try:
                encoded = s.encode('utf8')
            except Exception, cause:
                print "While trying to encode: %s" % (s, )
                raise
            l = len(encoded)
            #print "Writing %s, length %d"%(repr(encoded),l)
            response.write(struct.pack(">H", l))  #short
            response.write(encoded)
예제 #10
0
    def GetCoverage(self):
        # Housekeeping
        version = self.getOwsParam('version', default=self.validVersions[0])
        if version not in self.validVersions:
            raise InvalidParameterValue('Version %s not supported' % version,
                                        'version')
        # Layer handling
        layerName, layerObj = self._getLayerParam()
        
        # Coordinate parameters
        bbox = tuple(float(x) for x in self.getOwsParam('bbox').split(','))

        srs = self.getOwsParam('crs')

        #if srs not in layerObj.crss:
         #   raise InvalidParameterValue('Layer %s does not support SRS %s' % (layerName, srs))

        # Get format
        format = self.getOwsParam('format')
        if srs not in layerObj.crss:
            raise InvalidParameterValue('Layer %s does not support SRS %s' % (layerName, srs))
        times= self.getOwsParam('time', default=None)
        
        #process times parameter so it is either a single string (one time) or a tuple (range) (OR None)        
        if times is not None:
            if len(times.split(',')) >1:
                times=tuple(times.split(','))
        
        kwargs={}
        for axis in layerObj.axisDescriptions: #TODO - axisDescriptions attribute
            log.debug('axis: %s'%axis.name)
            axisvalues=self.getOwsParam(axis.name, default=None)
            log.debug('values: %s'%axisvalues)
            if axisvalues:
                values=tuple(float(x) for x in axisvalues.split(','))
                if len(values)==1:
                    values=(values[0], values[0],) #set min and max to be equal if single value
                kwargs[axis.name]=values    
        
#     
        filepath = layerObj.getCvg(bbox, time=times, **kwargs) #TODO, refactor so is more flexible (e.g. not just netcdf)
        fileToReturn=open(filepath, 'r')
        mType='application/cf-netcdf'
        response.headers['Content-Type']=mType
        response.headers['Content-Disposition'] = paste.httpheaders.CONTENT_DISPOSITION(attachment=True, filename=filepath)
        u=fileToReturn.read()
        #close and delete file from file system
        fileToReturn.close()
        log.debug('deleting temporary file %s'%filepath)
        os.system('rm %s'%filepath)
        return response.write(u)
예제 #11
0
   return decorator(ExceptionToCode)

@decorator
def ExceptionToError(f, *args, **kwargs):
   try:
      return f(*args, **kwargs)
   except HTTPError, e:
      # Let explicit HTTP error codes that we raise pass through as-is.
      response.status = e.code
   except Exception, e:
      # So that it shows up under the caller's logger.
      log = logging.getLogger(f.__module__)
      log.exception('Error')

      error = { 'type': e.__class__.__name__, 'message': str(e) }
      response.write(json.dumps(error))

      response.status = httplib.BAD_REQUEST

class BaseController(WSGIController):
   def _getClient(self, environ):
      client = environ.get('converter.client')

      # Can't put this in environ.get() call because the
      # config['converter.client'] isn't set for testing.
      if client is None:
         client = config['converter.client']

      return client

   def _sendFileResponse(self, filePath, fileName):
예제 #12
0
        writeDouble(matrix[5])

        if version >= 2:
            writeInt(width)
            writeInt(height)
            print "Writing width,height", chartname, width, height

        writeInt(0xaabbccde)
        for level in xrange(5):
            chart, cksum = parse_landing_chart.get_chart(blobname=chartname,
                                                         cksum=cksum,
                                                         level=level)
            writeUTF(cksum)
            print "Chart:", cksum, "Writing level", level, "size:", len(chart)
            writeInt(len(chart))
            response.write(chart)
            writeInt(0xaabbccdf)
        writeInt(0xf111)
        print "finished writing chart"
        return

    def getmap(self):

        users = meta.Session.query(User).filter(
            User.user == request.params['user']).all()
        badpass = False
        if len(users) == 0:
            badpass = True
        else:
            user, = users
            if user.password != request.params[
예제 #13
0
    def GetFeatureInfo(self):
        # Housekeeping
        version = self.getOwsParam('version', default=self.validVersions[0])
        if version not in self.validVersions:
            raise InvalidParameterValue('Version %s not supported' % version,
                                        'version')

        # Coordinate parameters
        bbox = tuple(float(x) for x in self.getOwsParam('bbox').split(','))
        width = int(self.getOwsParam('width'))
        height = int(self.getOwsParam('height'))

        # Get pixel location
        i = int(self.getOwsParam('i'))
        j = int(self.getOwsParam('j'))

        format = self.getOwsParam('info_format', default='text/html')

        layers = self._getLayerParam('query_layers')
        for layerObj in layers:
            layerName = layerObj.name
            log.debug('Format: %s' % format)
            log.debug('Title: %s' % layerObj.title)
            log.debug('FeatureInfoFormats: %s' % layerObj.featureInfoFormats)

        # ### Only process first layer if more than one. ###
        layerObj = layers[0]

        if format not in layerObj.featureInfoFormats:
            raise InvalidParameterValue(
                'Layer %s does not support GetFeatureInfo in format %s' %
                (layerName, format), 'info_format')

        srs = self._getSrsParam(version)
        if srs not in layerObj.crss:
            raise InvalidParameterValue('Layer %s does not support SRS %s' %
                                        (layerName, srs))

        # Convert coordinates to (long, lat) if necessary.
        bbox = self._convertBboxForCrs(bbox, version, srs)

        log.debug("(i,j) (%d,%d)  bbox ((%d,%d)(%d,%d))  crs %s" %
                  (i, j, bbox[0], bbox[1], bbox[2], bbox[3], srs))

        # Translate to geo-coordinates
        x, y = bbox_util.pixelToGeo(i, j, bbox, width, height)

        #start preparing GetFeatureInfo response. Assumes "HTML" output format
        #        htmlResponse = "<html><body><p> <b>Feature Information about pixel position: "+self.getOwsParam('i')+","+self.getOwsParam('j')+"/geo position: "+str(x)+","+str(y) +"<b/></p>"

        #Adjusts response for multiple layers
        #        if len(layers) > 1:
        #            htmlResponse = htmlResponse+" Multiple possible features found as follows:"

        #        htmlResponse = htmlResponse+"<ul>"

        # Dimension handling
        dimValues = {}
        for dimName, dim in layerObj.dimensions.items():
            defaultValue = dim.extent[0]
            dimValues[dimName] = self.getOwsParam(dimName,
                                                  default=defaultValue)
            log.debug("dimName: %s  dimValue: %s" %
                      (dimName, dimValues[dimName]))

        value = layerObj.getFeatureInfo(format, srs, (x, y), dimValues)
        htmlResponse = ((
            "<table style='width:100%%'><tr><td>Longitude</td><td>%s</td></tr>"
            + "<tr><td>Latitude</td><td>%s</td></tr>" +
            "<tr><td>Value</td><td>%s</td></tr></table>") %
                        (str(x), str(y), value))

        response.headers['Content-Type'] = format
        response.write(htmlResponse)
예제 #14
0
파일: api.py 프로젝트: avl/SwFlightPlanner
 def writeInt(x):
     response.write(struct.pack(">I",x))
예제 #15
0
파일: api.py 프로젝트: avl/SwFlightPlanner
 def writeLong(x):
     response.write(struct.pack(">Q",x))
예제 #16
0
파일: api.py 프로젝트: avl/SwFlightPlanner
    def getmap(self):

        users=meta.Session.query(User).filter(User.user==request.params['user']).all()
        badpass=False
        if len(users)==0:
            badpass=True
        else:
            user,=users
            if user.password!=request.params['password'] and user.password!=md5str(request.params['password']):
                badpass=True
        maptype=request.params.get('maptype','nolabel')
        def writeInt(x):
            response.write(struct.pack(">I",x))
        def writeLong(x):
            response.write(struct.pack(">Q",x))
        response.headers['Content-Type'] = 'application/binary'        

        version,level,offset,maxlen,maxlevel=\
            [int(request.params[x]) for x in "version","level","offset","maxlen","maxlevel"];
        
        writeInt(0xf00df00d)
        writeInt(1) #version
        if badpass:
            print "badpassword"
            writeInt(1) #error, bad pass
            return None
        #print "Correct password"
        
        totalsize=0
        stamp=0
        for lev in xrange(maxlevel+1):
            tlevelfile=os.path.join(os.getenv("SWFP_DATADIR"),"tiles/"+maptype+"/level"+str(lev))
            totalsize+=os.path.getsize(tlevelfile)
            stamp=max(stamp,os.stat(tlevelfile)[stat.ST_MTIME])
        #print "Maxlevel: %d, stamp: %d"%(maxlevel,stamp)
        levelfile=os.path.join(os.getenv("SWFP_DATADIR"),"tiles/"+maptype+"/level"+str(level))
        curlevelsize=os.path.getsize(levelfile)    
        cursizeleft=curlevelsize-offset
        #print "cursize left:",cursizeleft
        #print "maxlen:",maxlen
        if cursizeleft<0:
            cursizeleft=0
        if maxlen>cursizeleft:
            maxlen=cursizeleft
        if maxlen>1000000:
            maxlen=1000000
        
         
        writeInt(0) #no error
        #print "No error"
        writeLong(stamp) #"data version"
        #print "stamp:",stamp
        writeLong(curlevelsize)
        writeLong(totalsize)
        writeLong(cursizeleft)
        writeInt(0xa51c2)
        latest=meta.Session.query(Download).filter(Download.user==user.user).order_by(sa.desc(Download.when)).first()
        if not latest or datetime.utcnow()-latest.when>timedelta(0,3600):
            down=Download(user.user, maxlen)
            meta.Session.add(down)
        else:
            down=latest
            down.bytes+=maxlen
        meta.Session.flush()
        meta.Session.commit()

        f=open(levelfile)

        if offset<curlevelsize:
            #print "seeking to %d of file %s, then reading %d bytes"%(offset,levelfile,maxlen)
            f.seek(offset)
            data=f.read(maxlen)
            #print "Writing %d bytes to client"%(len(data),)
            response.write(data)
        f.close()
        return None
예제 #17
0
파일: api.py 프로젝트: avl/SwFlightPlanner
 def writeDouble(f):
     response.write(struct.pack(">d",f))
예제 #18
0
파일: api.py 프로젝트: avl/SwFlightPlanner
 def writeFloat(f):
     response.write(struct.pack(">f",f))
예제 #19
0
파일: i18nc.py 프로젝트: bluker/pylons
 def no_lang(self):
     set_lang(None)
     response.write(_('No language'))
     set_lang([])
     response.write(_('No languages'))
     return ''
예제 #20
0
 def no_lang(self):
     set_lang(None)
     response.write(_('No language'))
     set_lang([])
     response.write(_('No languages'))
     return ''
예제 #21
0
 def writeDouble(f):
     response.write(struct.pack(">d", f))
예제 #22
0
 def writeLong(x):
     response.write(struct.pack(">Q", x))
예제 #23
0
            # We should insert our HTML block at the bottom of the page with
            # the appropriate CSS to render it at the top.  Easier to insert
            # before </body>.
            c.url = resource.url
            replacement = render("data/cache_header.html")
            try:
                compiled_body = re.compile(re.escape("</body>"), re.IGNORECASE)
                content = compiled_body.sub("{0}</body>".format(replacement),
                                            content, re.IGNORECASE)
            except Exception, e:
                log.warn(
                    "Failed to do the replacement in resource<{0}> and file: {1}"
                    .format(resource.id, filepath))
                return

        response.write(content)

    def viz_upload(self):
        """
        Provides direct upload to DGU for users in specific publishers.
        This is specifically for the social investment publishers so that
        they can host their files somewhere.
        """
        import ckan.model as model

        ALLOWED_PUBLISHERS = set([
            'seedbed'
            'health-social-ventures',
            'big-issue-cooperate',
            'social-incubator-east',
            'young-academy',
예제 #24
0
 def writeFloat(f):
     response.write(struct.pack(">f", f))
예제 #25
0
파일: api.py 프로젝트: avl/SwFlightPlanner
            
        writeDouble(matrix[4])
        writeDouble(matrix[5])
        
        if version>=2:
            writeInt(width)
            writeInt(height)
            print "Writing width,height",chartname,width,height
            
        writeInt(0xaabbccde)
        for level in xrange(5):            
            chart,cksum=parse_landing_chart.get_chart(blobname=chartname,cksum=cksum,level=level)
            writeUTF(cksum)
            print "Chart:",cksum,"Writing level",level,"size:",len(chart)
            writeInt(len(chart))
            response.write(chart)
            writeInt(0xaabbccdf)
        writeInt(0xf111)
        print "finished writing chart"
        return 
        
    def getmap(self):

        users=meta.Session.query(User).filter(User.user==request.params['user']).all()
        badpass=False
        if len(users)==0:
            badpass=True
        else:
            user,=users
            if user.password!=request.params['password'] and user.password!=md5str(request.params['password']):
                badpass=True
예제 #26
0
    def getmap(self):

        users = meta.Session.query(User).filter(
            User.user == request.params['user']).all()
        badpass = False
        if len(users) == 0:
            badpass = True
        else:
            user, = users
            if user.password != request.params[
                    'password'] and user.password != md5str(
                        request.params['password']):
                badpass = True
        maptype = request.params.get('maptype', 'nolabel')

        def writeInt(x):
            response.write(struct.pack(">I", x))

        def writeLong(x):
            response.write(struct.pack(">Q", x))

        response.headers['Content-Type'] = 'application/binary'

        version,level,offset,maxlen,maxlevel=\
            [int(request.params[x]) for x in "version","level","offset","maxlen","maxlevel"]

        writeInt(0xf00df00d)
        writeInt(1)  #version
        if badpass:
            print "badpassword"
            writeInt(1)  #error, bad pass
            return None
        #print "Correct password"

        totalsize = 0
        stamp = 0
        for lev in xrange(maxlevel + 1):
            tlevelfile = os.path.join(os.getenv("SWFP_DATADIR"),
                                      "tiles/" + maptype + "/level" + str(lev))
            totalsize += os.path.getsize(tlevelfile)
            stamp = max(stamp, os.stat(tlevelfile)[stat.ST_MTIME])
        #print "Maxlevel: %d, stamp: %d"%(maxlevel,stamp)
        levelfile = os.path.join(os.getenv("SWFP_DATADIR"),
                                 "tiles/" + maptype + "/level" + str(level))
        curlevelsize = os.path.getsize(levelfile)
        cursizeleft = curlevelsize - offset
        #print "cursize left:",cursizeleft
        #print "maxlen:",maxlen
        if cursizeleft < 0:
            cursizeleft = 0
        if maxlen > cursizeleft:
            maxlen = cursizeleft
        if maxlen > 1000000:
            maxlen = 1000000

        writeInt(0)  #no error
        #print "No error"
        writeLong(stamp)  #"data version"
        #print "stamp:",stamp
        writeLong(curlevelsize)
        writeLong(totalsize)
        writeLong(cursizeleft)
        writeInt(0xa51c2)
        latest = meta.Session.query(Download).filter(
            Download.user == user.user).order_by(sa.desc(
                Download.when)).first()
        if not latest or datetime.utcnow() - latest.when > timedelta(0, 3600):
            down = Download(user.user, maxlen)
            meta.Session.add(down)
        else:
            down = latest
            down.bytes += maxlen
        meta.Session.flush()
        meta.Session.commit()

        f = open(levelfile)

        if offset < curlevelsize:
            #print "seeking to %d of file %s, then reading %d bytes"%(offset,levelfile,maxlen)
            f.seek(offset)
            data = f.read(maxlen)
            #print "Writing %d bytes to client"%(len(data),)
            response.write(data)
        f.close()
        return None
예제 #27
0
 def no_lang(self):
     set_lang(None)
     response.write(_("No language"))
     set_lang([])
     response.write(_("No languages"))
     return ""
예제 #28
0
 def writeInt(x):
     response.write(struct.pack(">I", x))
예제 #29
0
	def __init__ (self, PrintableClass):
		for name in dir(PrintableClass):
			value = getattr(PrintableClass,name)
			if  '_' not in str(name).join(str(value)):
				response.write('  .%s: %r' % (name, value))
예제 #30
0
파일: data.py 프로젝트: metaodi/ckanext-dgu
        try:
            f = open(filepath, "r")
        except IOError:
            log.error('Error reading resource cache file: %s', filepath)
            abort(403, "The system was unable to read this resource from the cache. Admins have been notified")

        content = f.read()
        f.close()

        if not re.search("<base ", content, re.IGNORECASE):
            compiled_head = re.compile(re.escape("<head>"), re.IGNORECASE)
            content = compiled_head.sub( base_string, content, re.IGNORECASE)

        if not '__archiver__cache__header__' in content:
            # We should insert our HTML block at the bottom of the page with
            # the appropriate CSS to render it at the top.  Easier to insert
            # before </body>.
            c.url = resource.url
            replacement = render("data/cache_header.html")
            try:
                compiled_body = re.compile(re.escape("</body>"), re.IGNORECASE)
                content = compiled_body.sub( "{0}</body>".format(replacement), content, re.IGNORECASE)
            except Exception, e:
                log.error("Failed to do the replacement in resource<{0}> and file: {1}".format(resource.id, filepath))
                return

        response.write(content)



예제 #31
0
    def resource_cache(self, root, resource_id, filename):
        """
        Called when a request is made for an item in the resource cache and
        is responsible for rendering the data.  When the data to be rendered
        is HTML it will add a header to show that the content is cached, and
        set a <base> header if not present to make sure all relative links are
        resolved correctly.
        """
        from pylons import response
        from paste.fileapp import FileApp
        from ckanext.dgu.lib.helpers import tidy_url

        archive_root = pylons.config.get('ckanext-archiver.archive_dir')
        if not archive_root:
            # Bad configuration likely to cause this.
            abort(404, "Could not find archive folder")

        resource = model.Resource.get(resource_id)
        is_html = False
        content_type = "application/octet-stream"

        fmt = ""
        task_status = model.Session.query(model.TaskStatus).\
                      filter(model.TaskStatus.task_type=='qa').\
                      filter(model.TaskStatus.key=='status').\
                      filter(model.TaskStatus.entity_id==resource.id).first()
        if task_status:
            status = json.loads(task_status.error)
            fmt = status['format']

        # Make an attempt at getting the correct content type but fail with
        # application/octet-stream in cases where we don't know.
        formats = {
            "CSV": "application/csv",
            "XLS": "application/vnd.ms-excel",
            "HTML": 'text/html; charset=utf-8' }
        content_type = formats.get(fmt, "application/octet-stream")

        is_html = fmt == "HTML"

        filepath = os.path.join(archive_root, root, resource_id, filename).decode('utf-8')
        if not os.path.exists(filepath):
            abort(404, "Resource is not cached")

        file_size = os.path.getsize(filepath)
        if not is_html:
            headers = [('Content-Type', content_type),
                       ('Content-Length', str(file_size))]
            fapp = FileApp(filepath, headers=headers)
            return fapp(request.environ, self.start_response)

        origin = tidy_url(resource.url)
        parts = urlparse.urlparse(origin)
        url = "{0}://{1}".format(parts.scheme, parts.netloc)
        base_string = "<head><base href='{0}'>".format(url)

        response.headers['Content-Type'] = content_type
        with open(filepath, "r") as f:
            content = f.read()

            if not re.search("<base ", content, re.IGNORECASE):
                compiled_head = re.compile(re.escape("<head>"), re.IGNORECASE)
                content = compiled_head.sub( base_string, content, re.IGNORECASE)

            if not '__archiver__cache__header__' in content:
                # We should insert our HTML block at the bottom of the page with
                # the appropriate CSS to render it at the top.  Easier to insert
                # before </body>.
                c.url = resource.url
                replacement = render("data/cache_header.html")
                try:
                    compiled_body = re.compile(re.escape("</body>"), re.IGNORECASE)
                    content = compiled_body.sub( "{0}</body>".format(replacement), content, re.IGNORECASE)
                except Exception, e:
                    log.error("Failed to do the replacement in resource<{0}> and file: {1}".format(resource.id, filepath))
                    return

            response.write(content)