class TableAnnotation(object):
    """
    Annotations for Table objects, to annotate as needed, the notion
    is that the annotation keys correspond to column, and values correspond
    to application specific column metadata.
    """

    _marker = object()
    schema_invariants = ()

    def __init__(self,
                 table_name,
                 columns=(),
                 properties=(),
                 schema_order=(),
                 listing_columns=(),
                 order_by=()):
        self.table_name = table_name
        self._options = {}
        self._annot = OrderedDict()

        for info in columns:
            self._annot[info['name']] = info

        self.properties = properties
        self.schema_order = schema_order
        self.listing_columns = listing_columns
        self.order_by = order_by

    def setOption(self, name, value):
        self._options[name] = value

    def getOption(self, name, default=None):
        return self._options.get(name, default)

    def __call__(self, iface):
        return self

    def __setitem__(self, name, value):
        self._annot[name] = value

    def get(self, name, default=None):
        return self._annot.get(name, default)

    def __getitem__(self, name):
        return self.get(name)

    def values(self):
        return self._annot.values()

    def __contains__(self, name):
        return not self._marker == self.get(name, self._marker)
class TableAnnotation(object):

    #__slots__ = ("table_name", "_annot", "_options")

    def __init__(self,
                 table_name,
                 columns=(),
                 properties=(),
                 schema_order=(),
                 table_columns=(),
                 order_by=()):
        self.table_name = table_name
        self._options = {}
        self._annot = OrderedDict()

        for info in columns:
            self._annot[info['name']] = info

        self.properties = properties
        self.schema_order = schema_order
        self.table_columns = table_columns
        self.order_by = order_by

    def setOption(self, name, value):
        self._options[name] = value

    def getOption(self, name, default=None):
        return self._options.get(name, default)

    def __call__(self, context):
        return ModelAnnotation(context, self)

    def __setitem__(self, name, value):
        self._annot[name] = value

    def get(self, name, default=None):
        return self._annot.get(name, default)

    def __getitem__(self, anme):
        return self.get(name)

    def values(self):
        return self._annot.values()

    def __contains__(self, name):
        marker = object()
        return not marker == self.get(name, marker)
class TableAnnotation( object ):
    """
    Annotations for Table objects, to annotate as needed, the notion
    is that the annotation keys correspond to column, and values correspond
    to application specific column metadata.
    """

    _marker = object()
    schema_invariants = ()
    
    def __init__(self, table_name, columns=(), properties=(), schema_order=(), listing_columns=(), order_by=()):
        self.table_name = table_name
        self._options = {}
        self._annot = OrderedDict()

        for info in columns:
            self._annot[ info['name'] ] = info

        self.properties = properties
        self.schema_order = schema_order        
        self.listing_columns = listing_columns
        self.order_by = order_by

    def setOption( self, name, value ):
        self._options[ name ] = value
        
    def getOption( self, name, default=None ):
        return self._options.get( name, default )

    def __call__( self, iface ):
        return self
    
    def __setitem__(self, name, value ):
        self._annot[name] = value

    def get( self, name, default=None ):
        return self._annot.get( name, default )

    def __getitem__(self, name):
        return self.get( name )

    def values( self ):
        return self._annot.values()

    def __contains__(self, name ):
        return not self._marker == self.get( name, self._marker )
class TableAnnotation( object ):

    #__slots__ = ("table_name", "_annot", "_options")

    def __init__(self, table_name, columns=(), properties=(), schema_order=(), table_columns=(), order_by=()):
        self.table_name = table_name
        self._options = {}
        self._annot = OrderedDict()

        for info in columns:
            self._annot[ info['name'] ] = info

        self.properties = properties
        self.schema_order = schema_order        
        self.table_columns = table_columns
        self.order_by = order_by

    def setOption( self, name, value ):
        self._options[ name ] = value
        
    def getOption( self, name, default=None ):
        return self._options.get( name, default )
    
    def __call__( self, context ):
        return ModelAnnotation( context, self )

    def __setitem__(self, name, value ):
        self._annot[name] = value

    def get( self, name, default=None ):
        return self._annot.get( name, default )

    def __getitem__(self, anme):
        return self.get( name )

    def values( self ):
        return self._annot.values()

    def __contains__(self, name ):
        marker = object()
        return not marker == self.get( name, marker )
Beispiel #5
0
class Relationship(object):
    def __init__(self, source_cls, target_cls):
        super(Relationship, self).__init__()
        self.source_cls = source_cls
        self.target_cls = target_cls
        self.kwargs = OrderedDict()
        self.backref = False

    # I'll leave the backref code here, but I'll need to see it working with a
    # ManyToMany relationship
    def add_backref(self, name_backref=None):
        """
        This must be called after kwargs has been fill to leverage the uselist value
        """
        if name_backref is None:
            name_backref = self.source_cls
        if self.kwargs.get("uselist", False):
            backref_text = 'backref("{}", uselist=False, passive_deletes=True)'.format(
                name_backref)
        else:
            backref_text = 'backref("{}", passive_deletes=True)'.format(
                name_backref)
        self.kwargs["backref"] = backref_text
        self.backref = True
Beispiel #6
0
    def get(self):
        args = self.parser.parse_args()
        if args.get('summary'):
            logs = RequestLog.query.order_by(RequestLog.created).all()

            if len(logs) < 1:
                return {}

            first_d = logs[0].created.date()
            last_d = logs[-1].created.date()

            result = OrderedDict()

            t_date = ddate(first_d.year, first_d.month, first_d.day)
            while t_date != last_d:
                result[str(t_date)] = 0
                t_date += timedelta(days=1)

            for log in logs:
                date = log.created.date()
                sdate = str(date)
                if result.get(sdate):
                    result[sdate] += 1
                else:
                    result[sdate] = 1

            if args.get('csv'):
                csv_tmp = tempfile.NamedTemporaryFile(mode='w+',
                                                      prefix='logs_csv_',
                                                      delete=False)
                csv_writer = csv.writer(csv_tmp)
                csv_writer.writerow(['DATE', 'N_REQUESTS'])

                for k, v in result.items():
                    csv_writer.writerow([k, v])

                csv_tmp.close()

                tmp_send = BytesIO()
                with open(csv_tmp.name, mode='rb') as f:
                    tmp_send.write(f.read())

                tmp_send.seek(0)
                response = send_file(tmp_send,
                                     mimetype='text/csv',
                                     as_attachment=True,
                                     attachment_filename='logs.csv')

                os.remove(csv_tmp.name)
                return response

            else:
                return result

        else:
            startdate = datetime.today().date() - timedelta(days=7)
            logs = RequestLog.query.filter(
                RequestLog.created > startdate).all()
            result = []

            for log in logs:
                result.append({
                    "client_id":
                    clientserializer.dumps(log.client_id),
                    "test_id":
                    testserializer.dumps(log.test_id),
                    "result":
                    log.result,
                    "error":
                    log.error,
                    "timestamp":
                    log.created.isoformat()
                })

            return {"results": result, "startdate": startdate.isoformat()}