Changeset 4244


Ignore:
Timestamp:
29/09/08 12:41:03 (11 years ago)
Author:
cbyrom
Message:

Add code to allow input/edit of online references + fix author/contributor
data to conform to the Atom 'email' convention - i.e. using an email
attribute instead of a uri one.

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/editatom.py

    r4241 r4244  
    1313from xml.parsers.expat import ExpatError 
    1414import logging 
    15 from ndgUtils.models.Atom import Atom, Person 
     15from ndgUtils.models.Atom import Atom, Person, Link 
    1616from formencode import Schema, validators, Invalid 
    1717from genshi.filters import HTMLFormFiller 
     
    4545    Provides the pylons controller for editing NDG Atom documents. 
    4646    ''' 
     47     
    4748    def __setup(self,uri=None): 
    4849        ''' Common setup stuff for all the actions on this controller ''' 
     
    152153                c.atom.addAuthors(authors) 
    153154 
     155            onlineRefs = self.extractOnlineReferenceDetails(inputs) 
     156            if onlineRefs: 
     157                c.atom.relatedLinks = onlineRefs 
     158                 
    154159            self.saveAtomToExist(c.atom) 
    155160                         
     
    215220                    continue 
    216221 
     222                # NB, adding an empty object here is valid as it will clear out 
     223                # existing entries, potentially 
    217224                author = Person(personType = authorType) 
    218225                keyStem = ".".join(keyBits[0:2]) 
     
    229236        logging.info("Finished extracting author data") 
    230237        return authors 
     238 
     239 
     240    def extractOnlineReferenceDetails(self, inputs): 
     241        ''' 
     242        Retrieve online reference data from inputs and set appropriately on Atom, if any 
     243        found 
     244        @return: list of Link objects with the related links data 
     245        ''' 
     246        logging.info("Extracting related links data from inputs") 
     247        processedLinks = [] 
     248        links = [] 
     249        for key in inputs: 
     250            keyBits = key.split('.') 
     251            if len(keyBits) == 3 and keyBits[1] not in processedLinks: 
     252                 
     253                if key.lower().startswith(Atom.ONLINE_REF_LABEL): 
     254                    link = Link() 
     255                    keyStem = ".".join(keyBits[0:2]) 
     256                    # NB, adding an empty object here is valid as it will clear out 
     257                    # existing entries, potentially 
     258                    link.href = inputs.get(keyStem + '.href') or "" 
     259                    link.title = inputs.get(keyStem + '.title') or "" 
     260                    link.rel = inputs.get(keyStem + '.rel') or "" 
     261                     
     262                    logging.info("Adding new online reference info") 
     263                    logging.debug("Extracted online reference (href:'%s', title:'%s', rel:'%s')" \ 
     264                                  %(link.href, link.title, link.rel)) 
     265                    links.append(link) 
     266                    processedLinks.append(keyBits[1]) 
     267                else: 
     268                    continue 
     269 
     270        logging.info("Finished extracting links data") 
     271        return links 
    231272                 
    232273 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom.html

    r4241 r4244  
    2828                    </table> 
    2929                        </div> 
    30                         <div py:replace="OnlineReferences(c.atom.relatedLinks)"/> 
    31                         <div py:replace="People('Author', [c.atom.author], False)"/> 
    32                         <div py:replace="People('Contributors', c.atom.contributors, False)"/> 
     30                        <div py:replace="OnlineReferences(c.atom.relatedLinks, None)"/> 
     31                        <div py:replace="People('Author', [c.atom.author], None)"/> 
     32                        <div py:replace="People('Contributors', c.atom.contributors, None)"/> 
    3333                        <div py:replace="FullParameterList(c.atom.parameters)"/> 
    3434                        <div py:replace="SummaryParameterList(c.atom.parameters)"/> 
     
    3737                        <div py:replace="SummaryDeployments(c.atom.ME.deployments)"/> 
    3838                        <div py:replace="People('Responsible Parties',  
    39                                 c.atom.ME.responsibleParties, False)"/> 
     39                                c.atom.ME.responsibleParties, None)"/> 
    4040                            <div py:replace="Services()"/> 
    4141              </div> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_editor.html

    r4243 r4244  
    5252                <div py:replace="txtBlkEd('Summary',c.atom.Summary,'absDiv', 
    5353                        c.saveLink2)" id="absDiv"/> 
    54                         <div py:replace="OnlineReferences(c.atom.relatedLinks)"/> 
     54                        <div py:replace="OnlineReferences(c.atom.relatedLinks, c.saveLink)"/> 
    5555                        <div py:replace="People('Author', [c.atom.author], c.saveLink)"/> 
    5656                        <div py:replace="People('Contributors', c.atom.contributors, c.saveLink)"/> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_functions.html

    r4243 r4244  
    5050                        <?python 
    5151                                hasRole = False 
     52                                dataType = 'email' 
    5253                                if ptype == "Responsible Parties": 
    5354                                        hasRole = True 
     55                                        dataType = 'URI' 
    5456                                                 
    5557                                extraRows = 3 
     
    6365                                <th py:if="hasRole" align="left">Role</th> 
    6466                                <th align="left">Name</th> 
    65                                 <th align="left">URI</th> 
     67                                <th align="left">${dataType}</th> 
    6668                        </span> 
    6769                </tr> 
     
    193195    </span> 
    194196 
    195     <div class="metadataSection" py:def="OnlineReferences(links)"> 
    196         <table py:if="links" cellspacing="0" cellpadding="3"  
    197         border="0" width="100%"> 
    198                         <div class="linehead"> Online References</div> 
    199             <ul> 
    200                 <li py:for="link in links"><a href="$link.href">${link.title or link.rel or link.href}</a></li> 
    201             </ul> 
    202         </table> 
    203     </div> 
     197    <div class="metadataSection" py:def="OnlineReferences(links, editLink)"> 
     198        <?python         
     199                                divID = 'onlineRefDiv' 
     200                                edID = divID+'ed'  
     201                ?> 
     202                <table py:if="links or editLink"> 
     203            <tr><td class="linehead"> 
     204                    <table> 
     205                        <tr><td>Online References</td> 
     206                            <span py:if="editLink" py:strip=""> 
     207                                <td align="right"> 
     208                                        <span class="txtBlktog"> 
     209                                        <a href="javascript:;" title="Toggle Form"  
     210                                             onclick="swapLayers('$divID', '$edID'); return false;"> 
     211                                        Add/Edit</a> 
     212                                        </span> 
     213                                    </td> 
     214                            </span> 
     215                                        </tr> 
     216                                </table> 
     217                                </td> 
     218                        </tr> 
     219            <tr><td> 
     220                <div id = "$divID"> 
     221                            <ul> 
     222                                <li py:for="link in links"><a href="$link.href">${link.title or link.rel or link.href}</a></li> 
     223                        </ul> 
     224                        </div> 
     225                        </td></tr> 
     226                <tr py:if="editLink"><td> 
     227                        <div id="$edID" class="hidden"> 
     228                                <div py:replace="OnlineRefEditTable(links, editLink)"/> 
     229                        </div> 
     230                        </td></tr> 
     231                        <tr><td> 
     232            </td></tr> 
     233        </table> 
     234    </div> 
     235 
     236 
     237        <div py:def="OnlineRefEditTable(links, editLink)"> 
     238                <form action="${editLink}" method="post"> 
     239                        <?python 
     240                                from ndgUtils.models.Atom import Atom as a 
     241                                refLabel = a.ONLINE_REF_LABEL + "." 
     242                                extraRows = 3 
     243                        ?> 
     244            <table> 
     245                <tr> 
     246                        <th align="left">URI</th> 
     247                        <th align="left">Title</th> 
     248                                <th align="left">Relation</th> 
     249                </tr> 
     250                    <tr py:for="i, link in enumerate(links)"> 
     251                        <td> 
     252                                    ${Markup(h.text_field(refLabel + str(i) + '.href', link.href))} 
     253                                        </td> 
     254                        <td> 
     255                                    ${Markup(h.text_field(refLabel + str(i) + '.title', link.title))} 
     256                        </td> 
     257                        <td> 
     258                                    ${Markup(h.text_field(refLabel + str(i) + '.rel', link.rel))} 
     259                        </td> 
     260                                </tr> 
     261                    <tr py:for="i in range(len(links), len(links) + extraRows)"> 
     262                        <td> 
     263                                    ${Markup(h.text_field(refLabel + str(i) + '.href'))} 
     264                        </td> 
     265                        <td> 
     266                                    ${Markup(h.text_field(refLabel + str(i) + '.title'))} 
     267                        </td> 
     268                        <td> 
     269                                    ${Markup(h.text_field(refLabel + str(i) + '.rel'))} 
     270                        </td> 
     271                                </tr> 
     272                        <tr><td> 
     273                    ${Markup(h.submit(value="Update"))} 
     274                </td></tr> 
     275                        </table> 
     276                </form> 
     277        </div> 
    204278 
    205279 
  • exist/trunk/python/ndgUtils/models/Atom.py

    r4240 r4244  
    4747        self.role = "" 
    4848         
     49        # NB, the atom format specifies slightly different data contents 
     50        self.uriTagName = "email" 
    4951        # NB, responsible party data is always stored in the moles section 
    5052        if self.type == self.RESPONSIBLE_PARTY_TYPE: 
    5153            self.ns = 'moles' 
     54            self.uriTagName = "uri" 
    5255 
    5356    def __str__(self): 
     
    6265        self.name = personTag.findtext('name') or "" 
    6366        self.role = personTag.findtext('role') or "" 
    64         self.uri = personTag.findtext('uri') or "" 
    65         logging.debug("Added name: '%s', role: '%s', uri: '%s'" \ 
    66                       %(self.name, self.role, self.uri)) 
     67        self.uri = personTag.findtext(self.uriTagName) or "" 
     68        logging.debug("Added name: '%s', role: '%s', %s: '%s'" \ 
     69                      %(self.name, self.role, self.uriTagName, self.uri)) 
    6770 
    6871    def toXML(self): 
     
    7881         
    7982        if self.uri: 
    80             uri = ET.SubElement(author, prefix + "uri") 
     83            uri = ET.SubElement(author, prefix + self.uriTagName) 
    8184            uri.text = self.uri 
    8285         
     
    123126        return link 
    124127 
     128    def hasValue(self): 
     129        if self.href or self.title or self.rel: 
     130            return True 
     131        return False 
     132 
     133 
    125134 
    126135class Category(): 
     
    151160class Atom(object): 
    152161 
     162    # labels for use with the atom categories 
    153163    ATOM_TYPE = "ATOM_TYPE" 
    154164    ATOM_SUBTYPE = "ATOM_SUBTYPE" 
     165 
     166    # labels for use with the templates to set/extract specific inputs 
     167    ONLINE_REF_LABEL = "online_ref" 
     168 
    155169 
    156170    def __init__(self, atomType = None, vocabTermData = None, ndgObject = None, \ 
     
    399413         
    400414        for relatedLink in self.relatedLinks: 
    401             root.append(relatedLink.toXML()) 
     415            if relatedLink.hasValue(): 
     416                root.append(relatedLink.toXML()) 
    402417         
    403418        for logo in self.logos: 
    404             root.append(logo.toXML()) 
     419            if logo.hasValue(): 
     420                root.append(logo.toXML()) 
    405421     
    406422    def toXML(self): 
Note: See TracChangeset for help on using the changeset viewer.