Ignore:
Timestamp:
25/06/07 17:07:54 (12 years ago)
Author:
lawrence
Message:

Interim check in for citation trackback support and
metadata correction from logged in ndg users.

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/config/ndgDiscovery.config

    r2626 r2646  
    2626layout:         /layout/ 
    2727# 
    28  
     28mailserver:       outbox.rl.ac.uk 
     29metadataMaintainer: b.n.lawrence@rl.ac.uk 
    2930repository:       glue.badc.rl.ac.uk 
    3031 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/config/routing.py

    r2643 r2646  
    3838    map.connect('logout', controller='logout') 
    3939    map.connect('view/:uri', controller = 'retrieve', action='view') 
     40    map.connect('askCorrect/:uri', controller='retrieve', action='askCorrect') 
     41    map.connect('correct/:uri', controller='retrieve', action='correct') 
    4042    map.connect('retrieve/:uri', controller = 'retrieve') 
    4143 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/retrieve.py

    r2643 r2646  
    44from paste.request import parse_querystring 
    55from ows_server.models import stubB  
     6from ows_server.lib import mailer 
    67 
    78#from ows_server.models import ndgRetrieve 
     
    8788        return render_response(r) 
    8889     
     90    def askCorrect(self,uri): 
     91        ''' Provide a form (ajaxaciously) so that a user can correct a metadata record''' 
     92        status=self.__setup(uri) 
     93        c.uri=self.uri 
     94        if status: return Response(status) 
     95        return render_response('correct',fragment=True) 
     96 
    8997     
     98    def correct(self,uri): 
     99        ''' Receive a correction form to update a record and post it to the holder ''' 
     100        status=self.__setup(uri) 
     101        if 'ndgSec' not in session: 
     102            return Response('Not Logged In') 
     103        body='Metadata Change Request for %s'%uri 
     104        payload='<Change><uri>%s</uri><from>%s</from><Contents>%s</Contents></Change>'%( 
     105            self.inputs['Identifier'],self.inputs['Submitter'],self.inputs['Comment']) 
     106        name='ChangeRequestFor_%s.xml'%uri 
     107        status,message=mailer.mailHandler([self.cf.get('DEFAULT','metadataMaintainer'),], 
     108                       body,body,xmlAttachments=[(payload,name),], 
     109                       server=self.cf.get('DEFAULT','mailserver')) 
     110        if status: 
     111            c.xml='<p>Success: Mail sent to metadata maintainer</p>' 
     112        else: 
     113            c.xml=message 
     114        return render_response('content') 
     115         
     116 
    90117    def __mytb(self): 
    91118        ''' Get the trackback info for this page  
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/trackback.py

    r2643 r2646  
    11from ows_server.lib.base import * 
     2from ows_server.lib.mailer import mailHandler 
    23class TrackbackController(BaseController): 
    34    ''' Provides the pylons controller for recieving trackbacks to NDG documents ''' 
    4     def index(self): 
     5    def index(self,uri): 
     6        ''' This is the default trackback receipt method. Note we haven't implemented 
     7        whitelisting yet ''' 
     8         
     9        err=0 
     10         
    511        # need to receive a trackback, and mail someone ... 
    6         return Response('not yet implemented') 
     12         
     13        incoming=request.environ['querystring'] 
     14        keys=incoming.keys() 
     15        payload='<trackback><uri>%s</uri>' 
     16         
     17        #make sure we have both url and title 
     18        if 'url' not in keys and 'title' not in keys: 
     19            err='Incomplete trackback, need both url and title at the every least' 
     20        for key in keys: 
     21            payload.append('<%s>%s</%s>'%(key,incoming[key],key)) 
     22         
     23        #now get server and trackback recipient. 
     24        self.cf=request.environ['ndgConfig'] 
     25         
     26        server=self.cf.get('DEFAULT','mailserver',None) 
     27        if server is None: 
     28            err='Server not configured for trackback (no mail server)' 
     29         
     30        recipient=self.cf.get('DEFAULT','tbrecipient',None) 
     31        if recipient is None: 
     32            err='Server not configured for trackback (no recipient)' 
     33         
     34        body='Citation Trackback for %s'%uri 
     35        name='CitationTrackbackFor_%s.xml'uri 
     36         
     37         
     38             
     39        if err!=0: 
     40            c.message=err 
     41            c.err=1 
     42        else:  
     43            status,message=mailHandler([recipient,],body,body,xmlAttachments=[(payload,name),], 
     44                server=server) 
     45            if status: 
     46                c.err=0 
     47            else: 
     48                c.err=1 
     49                c.message=message 
     50         
     51        return render_response(trackback) 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/Utilities.py

    r2618 r2646  
    1515import urllib 
    1616import logging 
    17 import smtplib 
     17 
    1818 
    1919class myConfig: 
     
    162162     
    163163 
    164 def mailError(recipients,subject,body,sender='ndg@badc.nerc.ac.uk',testing=0,server='localhost'): 
    165     try: 
    166         server=smtplib.SMTP(server) 
    167         server.set_debuglevel(1) 
    168         toaddr=recipients 
    169         fromaddr="From: %s\n"% sender 
    170         message="To: %s\n" % toaddr 
    171         message+=fromaddr 
    172         message+="Subject: %s\n" % subject 
    173         message+=body 
    174         server.sendmail(fromaddr, toaddr, message) 
    175         server.quit() 
    176     except: 
    177         if testing: 
    178             raise 
    179         else: 
    180             #no failing in real life 
    181             pass 
     164 
    182165         
    183166import unittest 
     
    210193    def testidget(self): 
    211194        self.assertEqual(idget(self.difxml),'NOCSDAT192') 
    212      
    213     def testMailError(self): 
    214         target='b.n.lawrence@rl.ac.uk' 
    215         subject='test from Utilities' 
    216         body='some information' 
    217         mailError(target,subject,body,server='outbox.rl.ac.uk',testing=1) 
     195 
    218196 
    219197if __name__=="__main__": 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/stubB.kid

    r2643 r2646  
    3131                </div> 
    3232            </div> <!-- Metadata Div Ends --> 
     33        
     34            <div id="Corrections"> 
     35            <p> Please use this  
     36                <span py:if="'ndgSec' in session"> 
     37                    ${XML(h.link_to_remote("link",dict(update="Corrections", url=h.url_for(action='askCorrect'))))} 
     38                </span> to enter any errors in the metadata record above. 
     39            </p> 
     40            </div> 
    3341        </div> 
    3442        <div py:replace="footer()"/> 
Note: See TracChangeset for help on using the changeset viewer.