Пример #1
0
    def register(self,cycle=None,since=None):
        if since:
           since=datetime.strptime(since,"%Y-%m-%d")
           print(since)
        else:
           since=self._dbinvent.lastupdate
        #create a list of files which need to be (re)registered
        if self.updated:
            files=self.updated
        else:
            slurplogger().info("Listing files to process (this can take a while)...")

            if cycle:
                files=[UriFile(file) for file in findFiles(os.path.join(self._dbinvent.datadir,self.sat,self.phase,"c%03d"%(cycle)),'.*\.nc$',since=since)]
            else:
                files=[UriFile(file) for file in findFiles(os.path.join(self._dbinvent.datadir,self.sat,self.phase),'.*\.nc$',since=since)]
        if not files:
           slurplogger().info("No updated files found")
           return

        newfiles=self.retainnewUris(files)
        if not newfiles:
            slurplogger().info("Nothing to update")
            return

        for uri in newfiles:
            meta=radsMetaDataExtractor(uri)
            if not meta:
               #don't register empty entries
               continue

            self.addEntry(meta)

        self.updateInvent()
Пример #2
0
    def register(self, pattern=None):
        """Register static gravity fields donwloaded in the data director
        :param pattern: only register files whose filename obeys this regular expression
        """
        if not pattern:
            pattern = '.*\.gz'
        #create a list of files which need to be (re)registered
        if self.updated:
            files = self.updated
        else:
            files = [
                UriFile(file) for file in findFiles(self.dataDir(), pattern)
            ]

        #loop over files
        for uri in files:
            urilike = os.path.basename(uri.url)

            if not self.uriNeedsUpdate(urilike, uri.lastmod):
                continue

            meta = icgemMetaExtractor(uri)
            self.addEntry(meta)

        self.updateInvent()
Пример #3
0
    def register(self):

        #create a list of files which need to be (re)registered
        if self.updated:
            files=self.updated
        else:
            files=[UriFile(file) for file in findFiles(self._dbinvent.datadir,'.*gfc.gz',since=self._dbinvent.lastupdate)]

        newfiles=self.retainnewUris(files)
        #loop over files
        for uri in newfiles:
            slurplogger().info("extracting meta info from %s"%(uri.url))
            meta=icgemMetaExtractor(uri)
            meta=enhanceMeta(meta)
            self.addEntry(meta)

        self.updateInvent()
Пример #4
0
    def register(self,rundir=None,pattern='.*\.nc$'):
        """register netcdf output files
        @param rundir: directory where the netcdf files reside
        @param pattern: regular expression which the netcdfiles must obey defaults tkakes all files ending with nc"""
        if not rundir:
            raise RuntimeError("A directory/regex with output data needs to be supplied when registering this dataset")

        newfiles=self.retainnewUris([UriFile(file) for file in findFiles(rundir,pattern)])

        for uri in newfiles:
            meta=orasMetaExtractor(uri)
            if not meta:
                #don't register empty entries
                continue

            self.addEntry(meta)



        self._dbinvent.data["Description"]="ORAS5 output data table"
        self.setDataDir(os.path.abspath(rundir))
        self._dbinvent.data["grid"]="025"
        self.updateInvent()
Пример #5
0
    def register(self, pattern=None):
        if not pattern:
            pattern = '.*\.gz'
        #create a list of files which need to be (re)registered
        if self.updated:
            files = self.updated
        else:
            files = [
                UriFile(file) for file in findFiles(self.dataDir(), pattern)
            ]

        #loop over files
        for uri in files:
            urilike = os.path.basename(uri.url)

            if not self.uriNeedsUpdate(urilike, uri.lastmod):
                continue

            meta = icgemMetaExtractor(uri)

            self.addEntry(meta)

        self.updateInvent()
Пример #6
0
    def register(self):
        """Checks the directory for updated raster files and updates them in the database"""
        #find all relevant files
        newfiles = [
            UriFile(file) for file in findFiles(self.srcdir, self.rastregex)
        ]
        self.dropTable()
        if self.tiles:
            #expand a single raster in tiles
            if len(newfiles) != 1:
                raise RuntimeError(
                    "Don't know how to tile multiple input rasters")
            #possibly create a temporary table for storing the complete raster
            # we need to get a session which is bound to a single transaction unit so we can make use of temporay tables
            trans, ses = self.db.transsession()

            tmptable = self.db.createTable("tmp_raster", [
                Column("id", Integer, primary_key=True),
                Column("rast", Raster(spatial_index=False))
            ],
                                           temporary=True,
                                           bind=ses.get_bind())
            meta = self.rastExtract(newfiles[0])
            entry = tmptable(rast=meta["rast"])
            ses.add(entry)
            # create the table but bind it to this session
            self.createTable(self.columns(), session=ses)
            # fill the new table from the tiles
            qry = select([
                func.ST_Tile(tmptable.rast, self.tiles[0],
                             self.tiles[1]).label('rast')
            ])
            ses.execute(self.table.__table__.insert().from_select(['rast'],
                                                                  qry))
            del meta["rast"]
            #also set the other column data
            if meta:
                ses.execute(self.table.__table__.update().values(**meta))
            #submit transaction
            trans.commit()
        else:

            for uri in newfiles:
                meta = self.rastExtract(uri)
                if not meta:
                    #don't register empty entries
                    continue

                if self.table == None:
                    #create the table when it does not exist
                    self.createTable(self.columns())

                self.addEntry(meta)
            self._ses.commit()

        #fix the srid
        if self.srid:
            self._ses.execute(
                text(
                    "select UpdateRasterSRID('%s'::name,'%s'::name,'rast'::name,%d)"
                    % (self.scheme, self.name, self.srid)))

        #add/compute raster constraints
        self._ses.execute(
            text(
                "select AddRasterConstraints('%s'::name,'%s'::name,'rast'::name)"
                % (self.scheme, self.name)))
        if self.regularblocking:
            self._ses.execute(
                text(
                    "select AddRasterConstraints('%s'::name,'%s'::name,'rast'::name,'regular_blocking')"
                    % (self.scheme, self.name)))

        #create overviews
        if self.overviews:
            for factor in self.overviews:
                self._ses.execute(
                    text(
                        "select ST_CreateOverview('%s.%s'::regclass, 'rast', %d, 'Lanczos')"
                        % (self.scheme, self.name, factor)))

        self.updateInvent()