def as_dict(self, depth=0): """Return a dictionary containing only the attributes which map to an instance's database columns. :rtype: dict """ result_dict = {} for column in self.__table__.columns.keys(): result_dict[column] = getattr(self, column, None) if isinstance(result_dict[column], Decimal): result_dict[column] = str(result_dict[column]) result_dict['links'] = self.links() for foreign_key in self.__table__.foreign_keys: column_name = foreign_key.column.name column_value = getattr(self, column_name, None) if column_value: table = foreign_key.column.table.name with app.app_context(): endpoint = current_app.class_references[table] session = db.session() resource = session.query(endpoint).get(column_value) if depth > 0: result_dict.update({ 'rel': endpoint.__name__, endpoint.__name__.lower() : resource.as_dict(depth - 1) }) else: result_dict[endpoint.__name__.lower() + '_url'] = '/{}/{}'.format(endpoint.__name__, column_value) result_dict['self'] = self.resource_uri() return result_dict
def as_dict(self, depth=0): """Return a dictionary containing only the attributes which map to an instance's database columns. :param int depth: Maximum depth to recurse subobjects :rtype: dict """ result_dict = {} for column in self.__table__.columns.keys(): result_dict[column] = getattr(self, column, None) if isinstance(result_dict[column], Decimal): result_dict[column] = str(result_dict[column]) result_dict["links"] = self.links() for foreign_key in self.__table__.foreign_keys: column_name = foreign_key.column.name column_value = getattr(self, column_name, None) if column_value: table = foreign_key.column.table.name with app.app_context(): endpoint = current_app.class_references[table] session = db.session() resource = session.query(endpoint).get(column_value) if depth > 0: result_dict.update( {"rel": endpoint.__name__, endpoint.__name__.lower(): resource.as_dict(depth - 1)} ) else: result_dict[endpoint.__name__.lower() + "_url"] = "/{}/{}".format(endpoint.__name__, column_value) result_dict["self"] = self.resource_uri() return result_dict
def as_dict(self, depth=0, cols_to_remove=None): """Return a dictionary containing only the attributes which map to an instance's database columns. :rtype: dict """ result_dict = {} if cols_to_remove is not None: self.__table__.columns = {k:v for k,v in dict(self.__table__.columns).iteritems() if k not in cols_to_remove} for column in self.__table__.columns.keys(): result_dict[column] = getattr(self, column, None) if isinstance(result_dict[column], Decimal): result_dict[column] = str(result_dict[column]) result_dict['links'] = self.links() for foreign_key in self.__table__.foreign_keys: column_name = foreign_key.column.name column_value = getattr(self, column_name, None) if column_value: table = foreign_key.column.table.name with app.app_context(): endpoint = current_app.class_references[table] session = db.session() resource = session.query(endpoint).get(column_value) if depth > 0: result_dict.update({ 'rel': endpoint.__name__, endpoint.__name__.lower() : resource.as_dict(depth - 1) }) else: result_dict[endpoint.__name__.lower() + '_url'] = '/{}/{}'.format(endpoint.__name__, column_value) result_dict['self'] = self.resource_uri() return result_dict
def _get_session(): """Return (and memoize) a database session""" session = getattr(g, "_session", None) if session is None: session = g._session = db.session() return session
def _get_session(): """Return (and memoize) a database session""" session = getattr(g, '_session', None) if session is None: session = g._session = db.session() return session