Changeset 4678 for MILK


Ignore:
Timestamp:
17/12/08 17:24:36 (11 years ago)
Author:
cbyrom
Message:

Add workflow in controllers and templates to allow users to select
whether a CSML/granulite ingest, which will create an atom with an ID
that already exists, should continue.

Location:
MILK/trunk/milk_server/milk_server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/editatom.py

    r4668 r4678  
    2626from ndgUtils.models.vocabtermdata import VocabTermData as VTD 
    2727from ndgUtils.lib.granulite import granulite 
     28from editorconstants import * 
    2829 
    2930class EditatomController(BaseController): 
     
    114115        granFile = request.POST.get('upload_granulite') 
    115116        csmlOrCdmlFile = request.POST.get('CSMLOrCDML') 
     117         
     118        # check whether we can replace existing atoms 
     119        replaceAtom = inputs.get('replaceAtom') 
     120         
     121        # if this is true, then re-extract the inputs from the session data 
     122        if replaceAtom == 'True': 
     123            if session.get(GRAN_FILE_VALUE): 
     124                granFile = cgi.FieldStorage() 
     125                granFile.value = session.get(GRAN_FILE_VALUE) 
     126                granFile.filename = session.get(GRAN_FILE_NAME) 
     127                del session[GRAN_FILE_VALUE] 
     128                del session[GRAN_FILE_NAME] 
     129                 
     130            if session.get(CSML_OR_CDML_FILE_VALUE): 
     131                csmlOrCdmlFile = cgi.FieldStorage() 
     132                csmlOrCdmlFile.value = session.get(CSML_OR_CDML_FILE_VALUE) 
     133                csmlOrCdmlFile.filename = session.get(CSML_OR_CDML_FILE_NAME) 
     134                del session[CSML_OR_CDML_FILE_VALUE] 
     135                del session[CSML_OR_CDML_FILE_NAME] 
    116136          
    117137        c.errors = {} 
    118138        try: 
     139            logging.info("Validating inputs") 
     140            validator = LoadGranuliteFormSchema() 
     141            validator.to_python(inputs) 
     142            logging.info("- inputs valid") 
     143             
    119144            useCSMLID = True 
    120145            c.atom = None 
     
    155180                    self.saveAtomToExist(c.atom) 
    156181                else: 
    157                     c.atom = gran.processGranulite() 
    158  
    159                     # Now set up the ndgObject with the created atom's vals 
    160                     self.__setup(uri=c.atom.ndgURI) 
    161                     c.atom.ndgObject = self.ndgObject 
     182                    try: 
     183                        c.atom = gran.processGranulite(replaceAtom = replaceAtom) 
     184 
     185                        # Now set up the ndgObject with the created atom's vals 
     186                        self.__setup(uri=c.atom.ndgURI) 
     187                        c.atom.ndgObject = self.ndgObject 
     188                    except edc.DuplicateError, e: 
     189                        # we've found an existing atom with the same ID 
     190                        # - give the users the choice of replacing the contents of this atom 
     191                        # or just exiting 
     192                        # - NB, do this via a session variable to act as a flag 
     193                        # for a javascript command 
     194                        session[OVERWRITE_GRANULE_FLAG] = e.message 
     195                         
     196                        # store the inputs data for easy retrieval 
     197                        # - NB, file fields don't behave as text fields - for security 
     198                        # purposes - so need to store their data as session variables 
     199                        # for easy retrieval 
     200                        # - Also, cannot pickle the cgi.FieldStorage object so extract 
     201                        # picklable data and recreate on the return run 
     202                        if granFile != '': 
     203                            session[GRAN_FILE_VALUE] = granFile.value 
     204                            session[GRAN_FILE_NAME] = granFile.filename 
     205                        if csmlOrCdmlFile != '': 
     206                            session[CSML_OR_CDML_FILE_VALUE] = csmlOrCdmlFile.value 
     207                            session[CSML_OR_CDML_FILE_NAME] = csmlOrCdmlFile.filename 
     208                         
     209                        # need to return to original screen - so clear out variables 
     210                        c.atom = None 
     211                        uri = None 
     212                     
    162213                             
    163214                # now do redirection - NB, this ensures that current atom contents are 
    164215                # reloaded and displayed 
    165216                logging.info("File data loaded and extracted to atom") 
     217        except Invalid, e: 
     218            logging.info(" - inputs invalid") 
     219            c.errors = e.unpack_errors() 
    166220        except Exception, e: 
    167221            c.errors['WARNING'] = ['Error loading data: the displayed data will not be saved - please fix problem and retry'] 
     
    179233            return render("genshi", 'atom_editor/error') 
    180234        else: 
    181             return self.createGranule() 
     235            return self.createGranule(**inputs) 
    182236 
    183237 
     
    311365            self.prepareDataModel(uri) 
    312366             
    313         c.title='Editing [%s]' %c.atom.ndgURI 
     367        c.title= EDIT_TITLE %c.atom.ndgURI 
    314368        c.uri = c.atom.ndgURI 
    315369         
     
    645699             
    646700        logging.info("Setting up atom create template") 
    647         c.title='Create new atom' 
     701        c.title = CREATE_ATOM_TITLE 
    648702         
    649703        # set up the drop down content - NB, add special case, 'deployment activity' 
     
    670724        c.errors = {} 
    671725        try: 
    672             return savePageAndRender(self.pathInfo, 'atom_editor/atom_granulator') 
     726            return savePageAndRender(self.pathInfo, 'atom_editor/atom_granulator', **inputs) 
    673727 
    674728        except Exception, e: 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/editorconstants.py

    r4668 r4678  
    1313DEPLOYMENTS_DATA_ASSOCIATION_TITLE = ' - to create associations with activity/data production tool/observation station data' 
    1414NO_SEARCH_RESULTS = 'No data found for search selections' 
     15EDIT_TITLE = 'Editing [%s]' 
     16CREATE_ATOM_TITLE = 'Create new atom' 
     17OVERWRITE_GRANULE_ATOM = "- do you want to overwrite this with the granulite data?" 
     18 
     19# session variable flags - used during file uploads 
     20OVERWRITE_GRANULE_FLAG = "ogf" 
     21GRAN_FILE_VALUE = 'granFileValue' 
     22GRAN_FILE_NAME = 'granFileName' 
     23CSML_OR_CDML_FILE_VALUE = 'csmlOrCdmlFileValue' 
     24CSML_OR_CDML_FILE_NAME = 'csmlOrCdmlFileName' 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_granulator.html

    r4602 r4678  
    66        <xi:include href="atom_functions.html" /> 
    77        <xi:include href="../utils.html" /> 
     8    <?python from milk_server.controllers.atom_editor.editorconstants import *?> 
    89        <head> 
    910        <title py:content="c.title">title</title> 
     11        <span py:if="session.get(OVERWRITE_GRANULE_FLAG)"  py:strip=""> 
     12                <script type="text/javascript"> 
     13                        function confirmAtomReplace()  
     14                        { 
     15var r=confirm('${session.get(OVERWRITE_GRANULE_FLAG)}' + '\n$OVERWRITE_GRANULE_ATOM'); 
     16<?python  
     17if session.get(OVERWRITE_GRANULE_FLAG): 
     18        del session[OVERWRITE_GRANULE_FLAG]  
     19        session.save() 
     20?> 
     21if (r==true) 
     22{ 
     23        document.getElementById("replaceAtom").value = 'True' 
     24        Div_show("loading"); 
     25        document.getElementById("granuliteForm").submit()   
     26} 
     27else 
     28{ 
     29<?python 
     30# tidy up session vals 
     31if session.get(GRAN_FILE_VALUE): 
     32        del session[GRAN_FILE_VALUE] 
     33        del session[GRAN_FILE_NAME] 
     34if session.get(CSML_OR_CDML_FILE_VALUE): 
     35        del session[CSML_OR_CDML_FILE_VALUE] 
     36        del session[CSML_OR_CDML_FILE_NAME] 
     37?> 
     38} 
     39                                } 
     40                        window.onload = confirmAtomReplace; 
     41                        </script> 
     42                </span> 
    1043    </head> 
    1144  <body class="submit"> 
     
    2760                            <h2> 
    2861                            <div class="headingblock"> 
    29                                 ${Markup(h.form(h.url(controller='atom_editor/editatom', action='upload'), multipart=True))} 
     62                                ${Markup(h.form(h.url(controller='atom_editor/editatom', action='upload'), multipart=True, id='granuliteForm'))} 
    3063                                <table> 
    3164                                                      <tr> 
     
    3669                                                          <td> 
    3770                                                                  ${Markup(h.file_field('upload_granulite', size="80"))} 
     71                                                        <span py:if="'upload_granulite' in c.errors" class="error">${c.errors.upload_granulite}</span> 
    3872                                                          </td> 
    3973                                                          </tr> 
     
    4175                                                        <td class="helptxt" colspan="2">${Markup(g.example_granulite)}</td> 
    4276                                                          </tr>                  
    43                 <div py:replace="UploadCSMLOrCDMLFileRows('dummy')"/> 
     77                                          <div py:replace="UploadCSMLOrCDMLFileRows('dummy')"/> 
    4478                                </table> 
     79                                        <input type="hidden" name="replaceAtom" value="False" id="replaceAtom"/> 
    4580                                        ${Markup(h.end_form())} 
    4681                                </div> 
Note: See TracChangeset for help on using the changeset viewer.