Changeset cdfc6b in indico


Ignore:
Timestamp:
01/24/11 15:07:18 (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, 4c7d4152dff271ba5df5a8606605969cab454080
Children:
76defd
Parents:
6df324
git-author:
Pedro Ferreira <jose.pedro.ferreira@…> (12/16/10 11:45:36)
git-committer:
Pedro Ferreira <jose.pedro.ferreira@…> (01/24/11 15:07:18)
Message:

[FIX] using integer arithmetic instead of strings

  • easier to preserve multiple states;
File:
1 edited

Legend:

Unmodified
Added
Removed
  • indico/ext/livesync/invenio/agent.py

    r3e1254 rcdfc6b  
    3131from MaKaC.common.xmlGen import XMLGen 
    3232 
     33# some useful constants 
     34STATUS_DELETED, STATUS_CREATED, STATUS_CHANGED = 1,2,4 
     35 
    3336 
    3437class InvenioRecordProcessor(object): 
    3538 
    3639    @classmethod 
    37     def _breakDownCategory(cls, categ, chgSet): 
     40    def _setStatus(cls, chgSet, obj, state): 
     41        if obj not in chgSet: 
     42            chgSet[obj] = 0 
     43 
     44        chgSet[obj] |= state 
     45 
     46    @classmethod 
     47    def _breakDownCategory(cls, categ, chgSet, state): 
    3848 
    3949        # categories are never converted to records 
    4050 
    4151        for conf in categ.getAllConferenceList(): 
    42             cls._breakDownConference(conf, chgSet) 
     52            cls._breakDownConference(conf, chgSet, state) 
    4353 
    4454    @classmethod 
    45     def _breakDownConference(cls, conf, chgSet): 
     55    def _breakDownConference(cls, conf, chgSet, state): 
    4656 
    47         chgSet.add(conf) 
     57        cls._setStatus(chgSet, conf, state) 
    4858 
    4959        for contrib in conf.getContributionList(): 
    50             cls._breakDownContribution(contrib, chgSet) 
     60            cls._breakDownContribution(contrib, chgSet, state) 
    5161 
    5262    @classmethod 
    53     def _breakDownContribution(cls, contrib, chgSet): 
     63    def _breakDownContribution(cls, contrib, chgSet, state): 
    5464 
    55         chgSet.add(contrib) 
     65        cls._setStatus(chgSet, contrib, state) 
    5666 
    5767        for scontrib in contrib.getSubContributionList(): 
    58             chgSet.add(scontrib) 
     68            cls._setStatus(chgSet, scontrib, state) 
    5969 
    6070    @classmethod 
     
    6373 
    6474        if isinstance(obj, conference.Category): 
    65             cls._breakDownCategory(obj, chgSet) 
     75            cls._breakDownCategory(obj, chgSet, STATUS_CHANGED) 
    6676        elif isinstance(obj, conference.Conference): 
    67             cls._breakDownConference(obj, chgSet) 
     77            cls._breakDownConference(obj, chgSet, STATUS_CHANGED) 
    6878        elif isinstance(obj, conference.Contribution): 
    69             cls._breakDownContribution(obj, chgSet) 
     79            cls._breakDownContribution(obj, chgSet, STATUS_CHANGED) 
    7080        elif isinstance(obj, conference.SubContribution): 
    71             chgSet.add(obj) 
     81            cls._setStatus(chgSet, obj, STATUS_CHANGED) 
    7282 
    7383    @classmethod 
     
    7888        """ 
    7989 
    80         deleted = set() 
    81         changed = set() 
    82         created = set() 
    83         protectionChanged = set() 
    84  
     90        records = dict() 
    8591        result = [] 
    8692 
    87         print 'Computing records...' 
    88  
    8993        for ts, aw in data: 
    90  
    9194            obj = aw.getObject() 
    9295 
    93             if obj in deleted: 
    94                 # previously deleted? 
    95                 continue 
     96            if obj in records: 
     97                if (records[obj] & STATUS_DELETED): 
     98                    # previously deleted? jump over this one 
     99                    continue 
     100            else: 
     101                records[obj] = 0 
    96102 
    97103            for action in aw.getActions(): 
     
    100106                    # if the record has been deleted, mark it as such 
    101107                    # nothing else will matter 
    102                     deleted.add(obj) 
     108                    records[obj] |= STATUS_DELETED 
    103109 
    104110                elif action == 'created': 
    105111                    # if the record has been created, mark it as such 
    106                     created.add(obj) 
     112                    records[obj] |= STATUS_CREATED 
    107113 
    108114                elif action in ['data_changed', 'acl_changed', 'moved']: 
    109115                    # categories are ignored 
    110                     if not isinstance(obj, conference.Category): 
    111                         changed.add(obj) 
     116                    records[obj] |= STATUS_CHANGED 
    112117 
    113118                elif action in ['set_private', 'set_public']: 
    114119                    # protection changes have to be handled more carefully 
    115                     cls._computeProtectionChanges(obj, action, protectionChanged) 
     120                    cls._computeProtectionChanges(obj, action, records) 
    116121 
    117         print 'Computed records: %s created, %s changed, %s protection' % \ 
    118                             (len(created), len(changed), len(protectionChanged)) 
    119  
    120         for obj in (created | changed | protectionChanged) - deleted: 
    121             yield aw._timestamp, obj, 'create' 
    122  
    123         for obj in (deleted): 
    124             yield aw._timestamp, obj, 'delete' 
    125  
    126         # TODO: branching to sub objects (i.e. category protection) 
     122        for record, state in records.iteritems(): 
     123            yield ts, record, state 
    127124 
    128125 
     
    149146        xg.openTag("collection",[["xmlns","http://www.loc.gov/MARC21/slim"]]) 
    150147 
    151         di.toMarc(record, overrideCache=True, deleted = (operation == 'delete')) 
     148        di.toMarc(record, overrideCache=True, deleted = (operation & STATUS_DELETED)) 
    152149 
    153150        xg.closeTag("collection") 
     
    178175        self._v_logger.info('Starting metadata/upload cycle') 
    179176        for ts, record, operation in crecords: 
    180             # TODO: check operation 
     177 
     178            if isinstance(record, conference.Category): 
     179                continue 
     180 
    181181            rdata = self._getMetadata(operation, record) 
    182182            try: 
Note: See TracChangeset for help on using the changeset viewer.