def _set_hashid(self, fieldname, first, *ofields): setattr( self, fieldname, Field.Virtual( fieldname, lambda row: self._extra['encoder'].encode( row[self._tablename][first], *map(lambda ff: row[self._tablename][ff], ofields))))
def _set_feature_co(self): self._set_hashid('hashid', 'src_id', 'id') self._set_feat_properties() self._set_geometry() if 'geom' in self.fields and self['geom'].type == 'geometry()': self.feature = Field.Virtual( 'feature', lambda row: geojsonFeature( geometry=row[self._tablename].feat_geometry, properties=row[self._tablename].feat_properties, id=row[self._tablename].hashid))
def _set_feat_properties(self, **kwargs): def _props(row): properties = dict( row[self._tablename].properties or row[self._tablename].tags, id=row[self._tablename].hashid, # **{"_{}_".format(row[self._tablename].source_name): row[self._tablename].source_id} ) properties.update({ k: row[self._tablename][v] if not callable(v) else v(row[self._tablename])\ for k,v in kwargs.items()}) return properties setattr(self, 'feat_properties', Field.Virtual('feat_properties', _props))
def _set_feature_co(self): self._set_hashid('hashid', 'src_id', 'id') self._set_node_hashid('shashid', 'src_id', 'sinfo_id') self._set_node_hashid('thashid', 'src_id', 'tinfo_id') # self._set_alias("shid", 'shashid') # self._set_alias("thid", 'thashid') self._set_feat_properties(weight=lambda row: round(row.len, 3)) if 'geom' in self.fields and self['geom'].type == 'geometry()': self.feature = Field.Virtual( 'feature', lambda row: geojson.Feature( geometry=wkt.loads(row[self._tablename].geom), properties=row[self._tablename].feat_properties, id=row[self._tablename].hashid))
'modified_on', 'datetime', # required = True, # notnull=True, update=now, default=now, # compute = lambda _=None: now(), writable=False, readable=True), Field("is_active", "boolean", default=True, readable=False, writable=False), # Field('task_id', "reference scheduler_task", notnull=True, requires=None), Field.Virtual( 'feature', lambda row: mc.feature(mc.quadkey_to_tile( mc.quadkey(row.tracked_tile.xtile, row.tracked_tile.ytile, row. tracked_tile.zoom)), fid=row.tracked_tile.uri, props={ 'created': row.tracked_tile.created_on, 'updated': row.tracked_tile.modified_on })), # Field.Virtual('last_update', lambda row: get_last_update(row.tile.uri)) ) db.define_table("queued_tile", Field("tile_id", "reference tracked_tile", unique=True)) def track_tiles(lon, lat, maxdist, buffer=4): """ """ tiles = list(boxtiles(maxdist, lon, lat, buffer=buffer))
def _set_geometry(self): if 'geom' in self.fields and self['geom'].type == 'geometry()': self.feat_geometry = Field.Virtual( 'feat_geometry', lambda row: wkt.loads(row[self._tablename].geom))
def _set_alias(self, alias, fieldname): """ Sets an alias for the given field value """ setattr( self, alias, Field.Virtual(alias, lambda row: row[self._tablename][fieldname]))