Changeset d285dc in indico


Ignore:
Timestamp:
03/22/11 15:35:01 (2 years ago)
Author:
Pedro Ferreira <jose.pedro.ferreira@…>
Branches:
master, burotel, hello-world-walkthrough, ipv6, v0.98-series, v0.98.2, v0.98.3, v0.98b1, v0.98b2, v0.99, 051b2622c51afb171a1dedb46a0df4fbb0cbd02e, 0da0c1403bae8e51d8229f460181c71b9e6dda72
Children:
8b580b
Parents:
1ce14b
Message:

[FIX] livesync - added id to deleted records

  • Otherwise there will be an exception on export
Location:
indico
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/common/utils.py

    r75d0bf rd285dc  
    570570    elif isinstance(obj, conference.SubContribution): 
    571571        ret="%s.%s.%s"%(obj.getConference().getId(), obj.getContribution().getId(), ret) 
    572 #    elif isinstance(obj, conference.DeletedObject): 
    573 #        ret=obj.getId().replace(':','.') 
     572    #elif isinstance(obj, conference.DeletedObject): 
     573    #    ret=obj.getId().replace(':','.') 
    574574    elif isinstance(obj, conference.Session): 
    575575        ret="%s.s%s"%(obj.getConference().getId(), ret) 
  • indico/MaKaC/conference.py

    r56f016 rd285dc  
    75777577        else: 
    75787578            parentId = None 
    7579         return "<Contribution %s:%s@%s>" % (self.getId(), parentId, hex(id(self))) 
     7579        return "<Contribution %s:%s@%s>" % (parentId, self.getId(), hex(id(self))) 
    75807580 
    75817581    def getTimezone( self ): 
     
    97609760            parentId = None 
    97619761            grandpaId = None 
    9762         return "<SubCont %s:%s:%s@%s>" % (self.getId(), parentId, grandpaId, hex(id(self))) 
     9762        return "<SubCont %s:%s:%s@%s>" % (grandpaId, parentId, self.getId(), hex(id(self))) 
    97639763 
    97649764    def isFullyPublic( self ): 
  • indico/MaKaC/export/oai2.py

    ra25433 rd285dc  
    523523            out = self._XMLGen 
    524524 
     525 
    525526        if deleted: 
     527            if type(obj) != str: 
     528                raise AttributeError("Expected int id, got '%s'" % obj) 
     529 
    526530            out.openTag("record") 
    527531 
    528532            out.openTag("datafield",[["tag","970"],["ind1"," "],["ind2"," "]]) 
    529             out.writeTag("subfield","INDICO.%s" % self.getItemId(obj),[["code","a"]]) 
     533            out.writeTag("subfield","INDICO.%s" % obj,[["code","a"]]) 
    530534            out.closeTag("datafield") 
    531535 
  • indico/ext/livesync/agent.py

    r56f016 rd285dc  
    210210        self._access = access 
    211211 
    212     def _run(self, data, logger=None, monitor=None): 
     212    def _run(self, data, logger=None, monitor=None, dbi=None): 
    213213        """ 
    214214        Overloaded - will contain the specific agent code 
     
    231231        """ 
    232232 
    233     def run(self, currentTS, logger=None, monitor=None): 
     233    def run(self, currentTS, logger=None, monitor=None, dbi=None): 
    234234        """ 
    235235        Main method, called when agent needs to be run 
     
    256256            records = self._generateRecords(data, till) 
    257257            # run agent-specific cycle 
    258             result = self._run(records, logger=logger, monitor=monitor) 
     258            result = self._run(records, logger=logger, monitor=monitor, dbi=dbi) 
    259259        except: 
    260260            if logger: 
     
    392392        raise Exception("Unimplemented method!") 
    393393 
    394     def iterateOver(self, iterator): 
     394    def iterateOver(self, iterator, dbi=None): 
    395395        """ 
    396396        Consumes an iterator, uploading the records that are returned 
     397        `dbi` can be passed, so that the cache is cleared once in a while 
    397398        """ 
    398399 
     
    408409            currentBatch.append(record) 
    409410 
     411        if dbi: 
     412            dbi.abort() 
     413 
    410414        if currentBatch: 
    411415            self._uploadBatch(currentBatch) 
    412416 
    413417        return True 
     418 
    414419 
    415420################### 
  • indico/ext/livesync/base.py

    r756437 rd285dc  
    4646    """ 
    4747 
    48     def __init__(self, timestamp, obj, actions): 
     48    def __init__(self, timestamp, obj, actions, objId): 
    4949        self._timestamp = timestamp 
    5050        self._obj = obj 
     51        self._objId = objId 
    5152        self._actions = actions 
    5253 
    5354    def getObject(self): 
    5455        return self._obj 
     56 
     57    def getObjectId(self): 
     58        return self._objId 
    5559 
    5660    def getActions(self): 
  • indico/ext/livesync/bistate.py

    r56f016 rd285dc  
    114114 
    115115        for record, state in records.iteritems(): 
    116             yield record, state 
     116            yield record, aw.getObjectId(), state 
    117117 
    118118 
     
    147147        return "{0:<40} {1}".format(obj, ' '.join(parts)) 
    148148 
    149     def _getMetadata(self, records): 
     149    def _getMetadata(self, records, logger=None): 
    150150        """ 
    151151        Retrieves the MARCXML metadata for the record 
     
    160160        xg.openTag("collection", [["xmlns", "http://www.loc.gov/MARC21/slim"]]) 
    161161 
    162         for record, operation in records: 
    163             di.toMarc(record, overrideCache=True, 
    164                       deleted=(operation & STATUS_DELETED)) 
     162        for record, recId, operation in records: 
     163            deleted = operation & STATUS_DELETED 
     164            try: 
     165                di.toMarc(recId if deleted else record, overrideCache=True, deleted=deleted) 
     166            # TODO: Replace with MetadataGenerationException or similar? 
     167            except AttributeError: 
     168                if logger: 
     169                    logger.exception("Problem generating metadata for %s!" % record) 
    165170 
    166171        xg.closeTag("collection") 
  • indico/ext/livesync/cern_search/agent.py

    ra5c240 rd285dc  
    5050        self._password = password 
    5151 
    52     def _run(self, records, logger=None, monitor=None): 
     52    def _run(self, records, logger=None, monitor=None, dbi=None): 
    5353 
    5454        self._v_logger = logger 
     
    6363 
    6464        # iterate over the returned records and upload them 
    65         return uploader.iterateOver(records) 
     65        return uploader.iterateOver(records, dbi=dbi) 
    6666 
    6767 
  • indico/ext/livesync/components.py

    r94242c rd285dc  
    3131from indico.core.api.events import IAccessControlListener, IObjectLifeCycleListener, \ 
    3232     IMetadataChangeListener 
    33 from indico.core.api.db import IDBUpdateListener, DBUpdateException 
    3433from indico.core.api.rh import IServerRequestListener 
    3534from indico.util.date_time import int_timestamp, nowutc 
     35from indico.util.event import uniqueId 
    3636 
    3737# plugin imports 
    3838from indico.ext.livesync.base import ActionWrapper 
    39 from indico.ext.livesync.util import getPluginType 
    4039from indico.ext.livesync.agent import SyncManager 
    4140 
     
    5958 
    6059        sm = SyncManager.getDBInstance() 
    61         track = sm.getTrack() 
    6260        cm = ContextManager.get('indico.ext.livesync:actions') 
     61        cm_ids = ContextManager.get('indico.ext.livesync:ids') 
    6362 
    6463        timestamp = int_timestamp(nowutc()) 
     
    7170        # into the permanent one (MPT) 
    7271        for obj, actions in cm.iteritems(): 
     72            objId = cm_ids[obj] 
    7373            for action in actions: 
    74                 Logger.get('ext.livesync').debug((obj, action)) 
     74                Logger.get('ext.livesync').debug((objId, action)) 
    7575                # TODO: remove redundant items 
    7676            sm.add(timestamp, 
    77                    ActionWrapper(timestamp, obj, actions)) 
     77                   ActionWrapper(timestamp, obj, actions, objId)) 
    7878 
    7979    def requestRetry(self, obj, req, nretry): 
    8080        # reset the context manager 
    8181        ContextManager.set('indico.ext.livesync:actions', {}) 
     82        ContextManager.set('indico.ext.livesync:ids', {}) 
    8283 
    8384    def requestStarted(self, obj, req): 
    8485        # reset the context manager 
    8586        ContextManager.set('indico.ext.livesync:actions', {}) 
     87        ContextManager.set('indico.ext.livesync:ids', {}) 
    8688 
    8789 
     
    105107            obj, set([])) 
    106108 
     109 
    107110        # the context may not be initialized 
    108111        if cm_set != None: 
    109112            cm_set |= set(actions) 
     113        ContextManager.get('indico.ext.livesync:ids').setdefault( 
     114            obj, uniqueId(obj)) 
    110115 
    111116    def _protectionChanged(self, obj, oldValue, newValue): 
  • indico/ext/livesync/invenio/agent.py

    rff6158 rd285dc  
    3434class InvenioBatchUploaderAgent(BistateBatchUploaderAgent): 
    3535 
    36     def _run(self, records, logger=None, monitor=None): 
     36    def _run(self, records, logger=None, monitor=None, dbi=None): 
    3737 
    3838        self._v_logger = logger 
     
    4848 
    4949        # iterate over the returned records and upload them 
    50         return uploader.iterateOver(records) 
     50        return uploader.iterateOver(records, dbi=None) 
    5151 
    5252 
     
    7171 
    7272        self._logger.info('Generating metadata') 
    73         data = self._agent._getMetadata(batch) 
     73        data = self._agent._getMetadata(batch, logger=self._logger) 
    7474        self._logger.info('Metadata ready ') 
    7575 
  • indico/ext/livesync/tasks.py

    r597fec rd285dc  
    1818## along with CDS Indico; if not, write to the Free Software Foundation, Inc., 
    1919## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 
     20 
     21# legacy imports 
     22from MaKaC.common import DBMgr 
    2023 
    2124# indico imports 
     
    4750            logger.info("Starting agent '%s'" % agtName) 
    4851            try: 
     52                dbi = DBMgr.getInstance() 
    4953                # pass the current time and a logger 
    50                 result = agent.run(int_timestamp(nowutc()), logger=logger) 
     54                result = agent.run(int_timestamp(nowutc()), logger=logger, dbi=dbi) 
    5155            except: 
    5256                logger.exception("Problem running agent '%s'" % agtName) 
Note: See TracChangeset for help on using the changeset viewer.