Changeset 4296 for exist/trunk


Ignore:
Timestamp:
07/10/08 15:28:00 (11 years ago)
Author:
cbyrom
Message:

Add Content property, with getter+setter, to Atom model + add method to
ensure uniqueness of any relatedLinks data - extending the Links object
to allow this easily.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • exist/trunk/python/ndgUtils/models/Atom.py

    r4286 r4296  
    102102        return 1 
    103103 
     104 
    104105class Link(object): 
    105106    ''' 
     
    133134        return False 
    134135     
    135  
    136136    def __str__(self): 
    137137        if self.href or self.title or self.rel: 
    138138            return self.href + " | " + self.title + " | " + self.rel 
    139139        return "" 
     140 
     141     
     142    def __cmp__(self, link1): 
     143        ''' 
     144        Override comparison to allow proper object comparison when checking 
     145        if Link objects are in an array already - i.e. if link in linkArray... 
     146        ''' 
     147        if self is link1: 
     148            return 0 
     149        elif self.href == link1.href and self.title == link1.title and \ 
     150                self.rel == link1.rel: 
     151            return 0 
     152        return 1 
    140153 
    141154 
     
    174187    ONLINE_REF_LABEL = "online_ref" 
    175188    ATOM_REF_LABEL = "atom_ref" 
     189    DELIMITER = "---" 
     190    REMOVE_LABEL = "remove" 
    176191 
    177192 
     
    202217        self.relatedLinks = [] 
    203218        self.summary = [] 
     219        self.content = [] 
    204220        self.csmlFile = None 
    205221        self.cdmlFile = None 
     
    252268            if inputs.has_key('Summary'): 
    253269                self.Summary = inputs.get('Summary') 
     270            if inputs.has_key('Content'): 
     271                self.Content = inputs.get('Content') 
    254272             
    255273            # also pass any moles data up to the moles entity object 
    256274            if inputs.get('providerID'): 
    257275                self.ME.providerID = inputs.get('providerID') 
     276                 
     277            if inputs.get('abbreviation'): 
     278                self.ME.abbreviation = inputs.get('abbreviation') 
    258279 
    259280        if self.atomTypeID: 
     
    262283        logging.info("Atom initialised") 
    263284 
     285 
     286    def addUniqueRelatedlinks(self, links): 
     287        ''' 
     288        Add links to relatedLinks array - if they are not already included 
     289        @param links: a Link or array of Links to add to the relatedLinks attribute  
     290        ''' 
     291        logging.debug("Adding new related links") 
     292        if not links: 
     293            return 
     294         
     295        if type(links) is str: 
     296            links = [links] 
     297         
     298        for link in links: 
     299            if link not in self.relatedLinks: 
     300                logging.debug("- adding unique link") 
     301                self.relatedLinks.append(link) 
     302        logging.debug("Finished adding links") 
     303         
     304         
    264305 
    265306    def getDefaultCollectionPath(self): 
     
    273314        elif self.atomTypeID == VTD.GRANULE_TERM: 
    274315            collectionPath += eXistConnector.GRANULE_COLLECTION_PATH 
    275         elif self.atomTypeID == VTD.ACTIVITY_DEPLOYMENT_TERM: 
     316        elif self.atomTypeID == VTD.ACTIVITY_TERM and \ 
     317            self.subtypeID == VTD.DEPLOYMENT_TERM: 
    276318            collectionPath += eXistConnector.DEPLOYMENTS_COLLECTION_PATH 
    277319        else: 
     
    418460        selfLink.attrib["href"] = self.atomBrowseURL 
    419461        selfLink.attrib["rel"] = "self" 
    420         molesLink = ET.SubElement(root, "link") 
    421         molesDoc = re.sub('ATOM','NDG-B1', self.atomBrowseURL) 
    422         molesLink.attrib["href"] = molesDoc 
    423         molesLink.attrib["rel"] = "related" 
     462        if self.subtypeID != VTD.DEPLOYMENT_TERM: 
     463            molesLink = ET.SubElement(root, "link") 
     464            molesDoc = re.sub('ATOM','NDG-B1', self.atomBrowseURL) 
     465            molesLink.attrib["href"] = molesDoc 
     466            molesLink.attrib["rel"] = "related" 
    424467         
    425468        for relatedLink in self.relatedLinks: 
     
    474517        summary = ET.SubElement(root, "summary") 
    475518        summary.text = escapeSpecialCharacters(self.Summary) 
    476  
     519                     
    477520        # add link to content, if required - NB, can only have one content element in atom 
    478521        # - and this is mandatory 
     
    482525            content.attrib["src"] = self.contentFile 
    483526        else: 
    484             content.text = "Metadata document" 
     527            content.text = escapeSpecialCharacters(self.Content) 
    485528         
    486529        # if there's a published date already defined, assume we're doing an update now 
     
    528571             
    529572    Summary = property(fset=__setSummary, fget=__getSummary, doc="Atom summary") 
     573 
     574 
     575    def __getContent(self): 
     576        logging.debug("Getting content data") 
     577        contentString = "" 
     578        # NB, there must be content specified in an atom 
     579        if not self.content: 
     580            return "Metadata document" 
     581         
     582        for content_line in self.content: 
     583            contentString += content_line + "\n" 
     584 
     585        return contentString 
     586 
     587    def __setContent(self, content): 
     588        logging.debug("Adding content data") 
     589        self.content = [] 
     590        for content_line in content.split('\n'): 
     591            self.content.append(content_line) 
     592             
     593    Content = property(fset=__setContent, fget=__getContent, doc="Atom content") 
    530594 
    531595             
     
    593657                    self.cdmlFile = file 
    594658                self.contentFile = file 
     659            else: 
     660                logging.debug("No file data - adding contents of element instead") 
     661                self.Content = contentTag.text 
    595662         
    596663        range = tree.findtext('temporalRange') 
Note: See TracChangeset for help on using the changeset viewer.