X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fsenslab%2Fslabpostgres.py;h=c3270248198fe8ba120de2eafe59e102d59f8d87;hb=e71c5ab5bf1aaa5428df793d5c5e8e602994be5d;hp=fc561cd8717b3ea3c1c305ab220f3f55a03b8f71;hpb=81386c70035f6a184696bb5d07e01fb42fb3af0d;p=sfa.git diff --git a/sfa/senslab/slabpostgres.py b/sfa/senslab/slabpostgres.py index fc561cd8..c3270248 100644 --- a/sfa/senslab/slabpostgres.py +++ b/sfa/senslab/slabpostgres.py @@ -1,6 +1,6 @@ import sys -from sqlalchemy import create_engine +from sqlalchemy import create_engine, and_ from sqlalchemy.orm import sessionmaker from sfa.util.config import Config @@ -14,9 +14,13 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship, backref +from sqlalchemy.dialects import postgresql + from sqlalchemy import MetaData, Table from sqlalchemy.exc import NoSuchTableError +from sqlalchemy import String + #Dict holding the columns names of the table as keys #and their type, used for creation of the table slice_table = {'record_id_user':'integer PRIMARY KEY references X ON DELETE CASCADE ON UPDATE CASCADE','oar_job_id':'integer DEFAULT -1', 'record_id_slice':'integer', 'slice_hrn':'text NOT NULL'} @@ -33,14 +37,18 @@ SlabBase = declarative_base() -class SlabSliceDB (SlabBase): +class SliceSenslab (SlabBase): __tablename__ = 'slice_senslab' - record_id_user = Column(Integer, primary_key=True) + #record_id_user = Column(Integer, primary_key=True) + slice_hrn = Column(String,primary_key=True) + peer_authority = Column( String,nullable = True) + record_id_slice = Column(Integer) + record_id_user = Column(Integer) oar_job_id = Column( Integer,default = -1) - record_id_slice = Column(Integer) - slice_hrn = Column(String,nullable = False) + node_list = Column(postgresql.ARRAY(String), nullable =True) - def __init__ (self, slice_hrn =None, oar_job_id=None, record_id_slice=None, record_id_user= None): + def __init__ (self, slice_hrn =None, oar_job_id=None, record_id_slice=None, record_id_user= None,peer_authority=None): + self.node_list = [] if record_id_slice: self.record_id_slice = record_id_slice if slice_hrn: @@ -51,21 +59,50 @@ class SlabSliceDB (SlabBase): self.slice_hrn = slice_hrn if record_id_user: self.record_id_user= record_id_user + if peer_authority: + self.peer_authority = peer_authority + def __repr__(self): - result=">sys.stderr, " \r\n \r\n \t SLABPOSTGRES update_job slice_rec %s"%(slice_rec) + if job_id is not None: + slice_rec.oar_job_id = job_id + if nodes is not None : + slice_rec.node_list = nodes + slab_dbsession.commit() def find (self, name = None, filter_dict = None): - if filter_dict: - filter_statement = "and_(SlabSliceDB." + print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find filter_dict %s"%(filter_dict) + + #Filter_by can not handle more than one argument, hence these functions + def filter_id_user(query, user_id): + print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find filter_id_user" + return query.filter_by(record_id_user = user_id) + + def filter_job(query, job): + print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find filter_job " + return query.filter_by(oar_job_id = job) + + def filer_id_slice (query, id_slice): + print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find filer_id_slice" + return query.filter_by(record_id_slice = id_slice) + + def filter_slice_hrn(query, hrn): + print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find filter_slice_hrn" + return query.filter_by(slice_hrn = hrn) + + + extended_filter = {'record_id_user': filter_id_user, + 'oar_job_id':filter_job, + 'record_id_slice': filer_id_slice, + 'slice_hrn': filter_slice_hrn} + + Q = slab_dbsession.query(SliceSenslab) + + if filter_dict is not None: for k in filter_dict: - filter_statement += str(k)+ "==" + str(filter_dict[l]) - filter_statement +=')' - print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find filter_statement %s"%(filter_statement) - slab_dbsession.query(SlabSliceDB).filter(filter_statement) + try: + newQ= extended_filter[k](Q, filter_dict[k]) + Q = newQ + except KeyError: + print>>sys.stderr, "\r\n \t\t FFFFFFFFFFFFFFFFUUUUUUUUFUFUFU!!!!!!!!" + print>>sys.stderr, " HEEEEEEEEEEEEY %s " %(Q.first()) + rec = Q.first() + print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES find rec %s" %(rec) + return dict(zip(['record_id_user','oar_job_id', 'record_id_slice','slice_hrn'],[rec.record_id_user,rec.oar_job_id,rec.record_id_slice, rec.slice_hrn])) + #reclist = [] + ##for rec in Q.all(): + #reclist.append(dict(zip(['record_id_user','oar_job_id', 'record_id_slice','slice_hrn'],[rec.record_id_user,rec.oar_job_id,rec.record_id_slice, rec.slice_hrn]))) + #return reclist @@ -158,4 +243,4 @@ from sfa.util.config import Config slab_alchemy= SlabDB(Config()) slab_engine=slab_alchemy.slab_engine -slab_dbsession=slab_alchemy.session() \ No newline at end of file +slab_dbsession=slab_alchemy.session()