Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
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
Esempio n. 5
0
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