Changeset 8418 for mauRepo/CedaMarkup


Ignore:
Timestamp:
29/06/12 16:40:25 (7 years ago)
Author:
mnagni
Message:

Incomplete - # 22513: missing ValidTime? in the GML tag library
 http://team.ceda.ac.uk/trac/ceda/ticket/22513

Even if this release adds the required tag, the most important difference with the version 0.0.2 is the library itself which has been deeply changed to add more flexibility for future development.
The main difference is that now the class is not composed by classes per markup type but from createXXX function per markup type which directly return an Element instance.

Another major add is a rich collection of unittests

Location:
mauRepo/CedaMarkup/trunk/ceda_markup
Files:
7 added
7 edited

Legend:

Unmodified
Added
Removed
  • mauRepo/CedaMarkup/trunk/ceda_markup/atom/atom.py

    r8369 r8418  
    3131@author: Maurizio Nagni 
    3232''' 
    33 from xml.etree.ElementTree import Element, SubElement 
     33from xml.etree.ElementTree import Element, SubElement, _ElementInterface 
     34from ceda_markup.markup import createMarkup 
    3435 
    35 class Atom(object): 
     36ATOM_NAMESPACE = 'http://www.w3.org/2005/Atom' 
     37ATOM_PREFIX = 'atom' 
     38ATOM_ROOT_TAG = 'feed' 
     39 
     40def createDocument(iid, title, updated, subtitle = None, rights = None): 
     41    top = createAtom()         
     42    
     43    ititle = SubElement(top, 'title') 
     44    ititle.text = title 
     45     
     46    iupdated = SubElement(top, 'updated') 
     47    iupdated.text = updated               
     48     
     49    doc_id = SubElement(top, 'id') 
     50    doc_id.text = iid 
     51     
     52    if subtitle: 
     53        subtitle = SubElement(top, 'subtitle') 
     54        subtitle.text = subtitle 
     55         
     56    if rights: 
     57        rights = SubElement(top, 'rights') 
     58        rights.text = rights             
     59 
     60     
     61    return top 
     62 
     63def createAtom(root = None, tagName = ATOM_ROOT_TAG, ns = ATOM_NAMESPACE):       
    3664    ''' 
    37     classdocs 
     65        @param root: the root tag of the document containing this element 
     66        @param tagName: the tagName  
     67        @param ns: the tag namespace        
    3868    ''' 
     69    return createMarkup(tagName, ATOM_PREFIX, ns, root) 
    3970 
     71def createID(iid, root = None, ns = ATOM_NAMESPACE):       
     72    ''' 
     73        @param iid: a unique identifier, eventually an URI     
     74        @param root: the root tag of the document containing this element  
     75        @param ns: the tag namespace        
     76    ''' 
     77    markup = createMarkup('id', ATOM_PREFIX, ns, root)         
     78    markup.text = str(iid)     
     79    return markup 
    4080 
    41     def __init__(self): 
    42         ''' 
    43         Constructor 
    44         ''' 
    45          
    46     @staticmethod 
    47     def createDocument(iid, title, updated, subtitle = None, rights = None): 
    48         top = Element('feed') 
    49         top.set("xmlns", "http://www.w3.org/2005/Atom")         
    50         
    51         ititle = SubElement(top, 'title') 
    52         ititle.text = title 
    53          
    54         iupdated = SubElement(top, 'updated') 
    55         iupdated.text = updated               
    56          
    57         doc_id = SubElement(top, 'id') 
    58         doc_id.text = iid 
    59          
    60         if subtitle: 
    61             subtitle = SubElement(top, 'subtitle') 
    62             subtitle.text = subtitle 
    63              
    64         if rights: 
    65             rights = SubElement(top, 'rights') 
    66             rights.text = rights             
     81def createUpdated(updated, root = None, ns = ATOM_NAMESPACE):       
     82    ''' 
     83        @param updated: is a Date construct indicating the most 
     84   recent instant in time when an entry or feed was modified in a way 
     85   the publisher considers significant. 
     86        @param root: the root tag of the document containing this element  
     87        @param ns: the tag namespace        
     88    ''' 
     89    markup = createMarkup('updated', ATOM_PREFIX, ns, root)         
     90    markup.text = str(updated)     
     91    return markup 
    6792 
    68          
    69         return top 
     93def createPublished(published, root = None, ns = ATOM_NAMESPACE):       
     94    ''' 
     95        @param published: is a Date construct indicating an 
     96   instant in time associated with an event early in the life cycle of 
     97   the entry     
     98        @param root: the root tag of the document containing this element  
     99        @param ns: the tag namespace        
     100    ''' 
     101    markup = createMarkup('published', ATOM_PREFIX, ns, root)         
     102    markup.text = str(published)     
     103    return markup 
     104 
     105ATOM_LINK_REL_SELF = 'self' 
     106ATOM_LINK_REL_FIRST = 'first' 
     107ATOM_LINK_REL_LAST = 'last' 
     108ATOM_LINK_REL_SEARCH = 'search' 
     109ATOM_LINK_REL = [ATOM_LINK_REL_SELF, ATOM_LINK_REL_FIRST, ATOM_LINK_REL_LAST, ATOM_LINK_REL_SEARCH] 
     110def createLink(iri, rel = None, itype = None, root = None, ns = ATOM_NAMESPACE):       
     111    ''' 
     112        @param iri: contains the link's IRI 
     113        @param rel: a string like 'self', 'first', 'last', ...  
     114        @param itype: an advisory media type as 'application/atom+xml'        
     115        @param root: the root tag of the document containing this element  
     116        @param ns: the tag namespace        
     117    ''' 
     118    markup = createMarkup('link', ATOM_PREFIX, ns, root) 
     119    markup.set('href', iri) 
     120    if rel is not None: 
     121        markup.set('rel', rel)             
     122    if itype is not None: 
     123        markup.set('type', itype)         
     124    return markup 
  • mauRepo/CedaMarkup/trunk/ceda_markup/atom/entry.py

    r8375 r8418  
    3131@author: Maurizio Nagni 
    3232''' 
    33 from xml.etree.ElementTree import Element, SubElement 
    3433from ceda_markup import extendElement 
     34from ceda_markup.atom.atom import ATOM_NAMESPACE, ATOM_PREFIX 
     35from ceda_markup.markup import createMarkup 
    3536 
    36 class Entry(object): 
    37     ''' 
    38     classdocs 
    39     ''' 
    40  
    41  
    42     def __init__(self, iid, title, updated, \ 
     37def createEntry(iid, title, updated, \ 
    4338                 author = None, content = None, link = None, \ 
    44                  summary = None, category = None, contributor = None, \ 
    45                  published = None, source = None, rights = None): 
     39                 published = None, root = None,  
     40                 ns = ATOM_NAMESPACE):       
    4641        ''' 
    4742            Constructor 
    48             @param id: a unique identifier, eventually an URI 
    49             @param title: an atom.Entry instance  
    50             @param updated: the last time the record was updated 
     43            @param iid: an atom.ID instance 
     44            @param title: an atom.Title instance  
     45            @param updated: an atom.Update instance 
    5146            @param author: one or more atom.Author instances 
    5247            @param content: an atom.Content instance              
    53             @param link: one or more atom.Link instances 
    54             @param summary: an atom.Summary instance                         
    55             @param category:              
    56             @param contributor: one or more atom.Contributor instances 
    57             @param published:                          
    58             @param source:  
    59             @param rights: an atom.Rights instance                         
     48            @param link: one or more atom.Link instances                                      
     49            @param published: an atom.Published instance                           
     50            @param root: the document root element where attach the prefix:namespace for this element                         
    6051        ''' 
    61         self.id = iid 
    62         self.title = title 
    63         self.updated = updated         
     52        markup = createMarkup('entry', ATOM_PREFIX, ns, root)         
     53        markup.append(iid)                 
     54        markup.append(title)         
     55        markup.append(updated) 
    6456         
    6557        if author: 
    66             self.author = author 
     58            if isinstance(author, list): 
     59                extendElement(markup, author) 
     60            else: 
     61                markup.append(author)                
     62                 
     63        if content: 
     64            markup.append(content) 
     65             
     66        if link is not None: 
     67            markup.append(link) 
     68                                             
     69        if published: 
     70            markup.append(published)                
     71               
     72        return markup 
    6773         
    68         if content is not None: 
    69             self.content = content 
    70                      
    71         if link: 
    72             self.link = link 
    73              
    74         if summary: 
    75             self.summary = summary 
    76              
    77         if category: 
    78             self.category = category 
    79              
    80         if contributor: 
    81             self.contributor = contributor                                     
    82                          
    83         if published: 
    84             self.published = published 
    85              
    86         if source: 
    87             self.source = source                     
    88              
    89         if rights: 
    90             self.rights = rights 
    91                          
    92     def buildElement(self): 
    93         entry = Element("entry") 
    94          
    95         iid = SubElement(entry, 'id') 
    96         iid.text = self.id 
    97          
    98         title = SubElement(entry, 'title') 
    99         title.text = self.title 
    100          
    101         updated = SubElement(entry, 'updated') 
    102         updated.text = self.updated 
    103          
    104         if hasattr(self, 'author'): 
    105             if isinstance(self.author, list): 
    106                 extendElement(entry, self.author) 
    107             else: 
    108                 entry.append(self.author) 
    109                  
    110         if hasattr(self, 'contributor'): 
    111             if isinstance(self.contributor, list): 
    112                 extendElement(entry, self.contributor) 
    113             else: 
    114                 entry.append(self.contributor)                 
    115                  
    116         if hasattr(self, 'content'): 
    117             entry.append(self.content) 
    118              
    119         if hasattr(self, 'link'): 
    120             link = SubElement(entry, 'link') 
    121             link.text = self.link 
    122              
    123         if hasattr(self, 'summary'): 
    124             summary = SubElement(entry, 'summary') 
    125             summary.text = self.summary 
    126  
    127         if hasattr(self, 'category'): 
    128             if isinstance(self.category, list): 
    129                 extendElement(entry, self.category) 
    130             else: 
    131                 entry.append(self.category) 
    132                                              
    133         if hasattr(self, 'published'): 
    134             published = SubElement(entry, 'published') 
    135             published.text = self.published              
    136              
    137         if hasattr(self, 'source'): 
    138             source = SubElement(entry, 'source') 
    139             source.text = self.source           
    140          
    141         return entry   
  • mauRepo/CedaMarkup/trunk/ceda_markup/atom/info.py

    r8388 r8418  
    3131@author: Maurizio Nagni 
    3232''' 
    33 from abc import abstractmethod 
    3433from xml.etree.ElementTree import Element 
     34from ceda_markup.atom.atom import ATOM_NAMESPACE, ATOM_PREFIX 
     35from ceda_markup.markup import createMarkup 
     36 
     37''' 
     38classdocs 
     39''' 
     40TEXT_TYPE = 'text' 
     41HTML_TYPE = 'html' 
     42XHTML_TYPE = 'xhtml' 
     43TYPES = [TEXT_TYPE, HTML_TYPE, XHTML_TYPE] 
     44 
     45def _assignTypeAtribute(itype, markup, body): 
     46    if itype not in TYPES: 
     47        raise Exception("Type is not allowed") 
     48 
     49    if itype != TEXT_TYPE: 
     50        markup.set('type', itype) 
     51    if itype == HTML_TYPE or itype == TEXT_TYPE: 
     52        markup.text = body 
     53 
     54    if itype == XHTML_TYPE and isinstance(body, Element): 
     55        markup.append(body) 
     56    return markup     
    3557 
    3658 
    37 class Info(object): 
    38     ''' 
    39     classdocs 
    40     ''' 
    41     TEXT_TYPE = 'text' 
    42     HTML_TYPE = 'html' 
    43     XHTML_TYPE = 'xhtml' 
    44     TYPES = [TEXT_TYPE, HTML_TYPE, XHTML_TYPE] 
     59def createTitle(root = None, ns = ATOM_NAMESPACE, body = None, itype = TEXT_TYPE): 
     60    markup = createMarkup('title', ATOM_PREFIX, ns, root = root) 
     61    return _assignTypeAtribute(itype, markup, body) 
    4562 
    46     def __init__(self, itype = TEXT_TYPE, body = ''): 
    47         ''' 
    48         Constructor 
    49         ''' 
    50         if itype in Info.TYPES: 
    51             self.type = itype 
    52         else: 
    53             raise Exception("Type is not allowed") 
    54         self.body = body 
     63def createSummary(root = None, ns = ATOM_NAMESPACE, body = None, itype = TEXT_TYPE): 
     64    markup = createMarkup('summary', ATOM_PREFIX, ns, root = root) 
     65    return _assignTypeAtribute(itype, markup, body) 
    5566 
    56     def buildElement(self): 
    57         info = self._buildRoot() 
    58         if self.type != Info.TEXT_TYPE: 
    59             info.set('type', self.type) 
    60         if self.type == Info.HTML_TYPE or self.type == Info.TEXT_TYPE: 
    61             info.text = self.body 
     67def createContent(root = None, ns = ATOM_NAMESPACE, body = None, itype = TEXT_TYPE): 
     68    markup = createMarkup('content', ATOM_PREFIX, ns, root = root) 
     69    return _assignTypeAtribute(itype, markup, body) 
    6270 
    63         if self.type == Info.XHTML_TYPE and isinstance(self.body, Element): 
    64             info.append(self.body) 
    65                
    66         return info 
    67  
    68     @abstractmethod 
    69     def _buildRoot(self): 
    70         """ 
    71             Build the Element root for this instance 
    72         """ 
    73         pass        
    74      
    75 class Title(Info): 
    76     ''' 
    77     classdocs 
    78     ''' 
    79  
    80     def __init__(self, type, body): 
    81         super(Title, self).__init__(type, body) 
    82          
    83     def _buildRoot(self): 
    84         return Element('title')       
    85      
    86 class Summary(Info): 
    87     ''' 
    88     classdocs 
    89     ''' 
    90  
    91     def __init__(self, type, body): 
    92         super(Summary, self).__init__(type, body) 
    93          
    94     def _buildRoot(self): 
    95         return Element('summary') 
    96          
    97 class Content(Info): 
    98     ''' 
    99     classdocs 
    100     ''' 
    101  
    102     def __init__(self, type, body): 
    103         super(Content, self).__init__(type, body) 
    104          
    105     def _buildRoot(self): 
    106         return Element('content')         
    107      
    108 class Rights(Info): 
    109     ''' 
    110     classdocs 
    111     ''' 
    112  
    113     def __init__(self, type, body): 
    114         super(Rights, self).__init__(type, body) 
    115          
    116     def _buildRoot(self): 
    117         return Element('rights')     
     71def createRights(root = None, ns = ATOM_NAMESPACE, body = None, itype = TEXT_TYPE): 
     72    markup = createMarkup('rights', ATOM_PREFIX, ns, root = root) 
     73    return _assignTypeAtribute(itype, markup, body) 
  • mauRepo/CedaMarkup/trunk/ceda_markup/dc/dc.py

    r8369 r8418  
    3131@author: Maurizio Nagni 
    3232''' 
    33 from xml.etree.ElementTree import Element 
     33from ceda_markup.markup import createMarkup 
    3434 
    35 class DC(object): 
     35DC_NAMESPACE = 'http://purl.org/dc/elements/1.1/' 
     36DC_PREFIX = 'dc' 
     37DC_ROOT_TAG = 'metadata' 
     38 
     39def createDC(root = None, tagName = DC_ROOT_TAG, ns = DC_NAMESPACE):       
    3640    ''' 
    37     classdocs 
     41        @param root: the root tag of the document containing this element 
     42        @param tagName: the tagName  
     43        @param ns: the tag namespace        
    3844    ''' 
     45    return createMarkup(tagName, DC_PREFIX, ns, root) 
    3946 
    40     NAMESPACE = 'http://purl.org/dc/elements/1.1/' 
    41     PREFIX = 'dc' 
    42     ROOT_TAG = 'metadata' 
    43  
    44     def __init__(self, root = None):                
    45         ''' 
    46             Constructor 
    47         ''' 
    48         self._hasns = False 
    49         self._root = root 
    50         if self._root is not None: 
    51             self._hasns = True 
    52         else: 
    53             self._root = Element(DC.ROOT_TAG) 
    54              
    55         self._root.set("xmlns:%s" % (DC.PREFIX), DC.NAMESPACE)         
    56  
    57 class Date(DC): 
     47def createDate(root = None, body = None, ns = DC_NAMESPACE):       
    5848    ''' 
    59     classdocs 
     49        @param root: the root tag of the document containing this element 
     50        @param body: the date value 
     51        @param ns: the tag namespace  
    6052    ''' 
    61  
    62     def __init__(self, root, date): 
    63         ''' 
    64         Constructor 
    65         ''' 
    66         self.date = date 
    67         super(Date, self).__init__(root) 
    68      
    69     def buildElement(self): 
    70         date =  Element("%s:%s" % (DC.PREFIX, 'date')) 
    71         date.text = self.date 
    72         return date     
    73                      
     53    date = createMarkup('date', DC_PREFIX, ns, root) 
     54    if body is not None: 
     55        date.text = body 
     56    return date 
  • mauRepo/CedaMarkup/trunk/ceda_markup/georss/georss.py

    r8369 r8418  
    3131@author: Maurizio Nagni 
    3232''' 
    33 from xml.etree.ElementTree import Element 
     33from ceda_markup.markup import createMarkup 
    3434 
    35 class GEORSS(object): 
     35GEORSS_NAMESPACE = 'http://www.georss.org/georss' 
     36GEORSS_PREFIX = 'georss' 
     37GEORSS_ROOT_TAG = 'metadata' 
     38 
     39def createGEORSS(root = None, tagName = GEORSS_ROOT_TAG, ns = GEORSS_NAMESPACE):       
    3640    ''' 
    37     classdocs 
     41        @param root: the root tag of the document containing this element 
     42        @param tagName: the tagName  
     43        @param ns: the tag namespace        
    3844    ''' 
     45    return createMarkup(tagName, GEORSS_PREFIX, ns, root) 
    3946 
    40     NAMESPACE = 'http://www.georss.org/georss' 
    41     PREFIX = 'georss' 
    42     ROOT_TAG = 'metadata' 
    43  
    44     def __init__(self, root = None):                
    45         ''' 
    46             Constructor 
    47         ''' 
    48         self._hasns = False 
    49         self._root = root 
    50         if self._root is not None: 
    51             self._hasns = True 
    52         else: 
    53             self._root = Element(GEORSS.ROOT_TAG) 
    54              
    55         self._root.set("xmlns:%s" % (GEORSS.PREFIX), GEORSS.NAMESPACE)         
    56  
    57 class Where(GEORSS): 
     47def createWhere(root = None, body = None, ns = GEORSS_NAMESPACE):       
    5848    ''' 
    59     classdocs 
     49        @param root: the root tag of the document containing this element 
     50        @param body: a gml.Polygon instance (for now....) 
     51        @param ns: the tag namespace  
    6052    ''' 
    61  
    62     def __init__(self, root, body): 
    63         ''' 
    64         Constructor 
    65         @param root: the document root element where attach the prefix:namespace for this element  
    66         @param body: a gml.Polygon instance (for now....) 
    67         ''' 
    68         self.body = body 
    69         super(Where, self).__init__(root) 
    70      
    71     def buildElement(self): 
    72         where =  Element("%s:%s" % (GEORSS.PREFIX, 'where')) 
    73         where.append(self.body.buildElement()) 
    74         return where                     
     53    where = createMarkup('where', GEORSS_PREFIX, ns, root) 
     54    if body is not None: 
     55        where.append(body) 
     56    return where 
  • mauRepo/CedaMarkup/trunk/ceda_markup/gml/gml.py

    r8369 r8418  
    3131@author: Maurizio Nagni 
    3232''' 
    33 from xml.etree.ElementTree import Element 
     33from ceda_markup.markup import createMarkup 
    3434 
    35 class GML(object): 
     35GML_NAMESPACE = 'http://www.opengis.net/gml' 
     36GML_PREFIX = 'gml' 
     37GML_ROOT_TAG = 'metadata' 
     38 
     39def createGML(root = None, tagName = GML_ROOT_TAG, ns = GML_NAMESPACE):       
    3640    ''' 
    37     classdocs 
     41        @param root: the root tag of the document containing this element 
     42        @param tagName: the tagName  
     43        @param ns: the tag namespace        
    3844    ''' 
     45    return createMarkup(tagName, GML_PREFIX, ns, root) 
    3946 
    40     NAMESPACE = 'http://www.opengis.net/gml' 
    41     PREFIX = 'gml' 
    42     ROOT_TAG = 'metadata' 
     47def createPosList(root = None, ns = GML_NAMESPACE, body = None, srsDimension = None):       
     48    ''' 
     49        @param root: the root tag of the document containing this element 
     50        @param ns: the tag namespace  
     51        @param body: a string like '45.256 -110.45 46.46 -109.48 43.84 -109.86 45.256 -110.45' 
     52        @param srsDimension: a number         
     53    ''' 
     54    markup = createMarkup('posList', GML_PREFIX, ns, root) 
     55    if srsDimension is not None:   
     56        markup.set('srsDimension', srsDimension) 
     57    if body is not None:                                 
     58        markup.text = body  
     59    return markup 
    4360 
    44     def __init__(self, root = None):                
    45         ''' 
    46             Constructor 
    47         ''' 
    48         self._hasns = False 
    49         self._root = root 
    50         if self._root is not None: 
    51             self._hasns = True 
    52         else: 
    53             self._root = Element(GML.ROOT_TAG) 
    54              
    55         self._root.set("xmlns:%s" % (GML.PREFIX), GML.NAMESPACE)         
     61def createLinearRing(root = None, ns = GML_NAMESPACE, body = None):       
     62    ''' 
     63        @param root: the root tag of the document containing this element 
     64        @param ns: the tag namespace  
     65        @param body: an instance of GML.PosList 
     66    ''' 
     67    markup = createMarkup('LinearRing', GML_PREFIX, ns, root) 
     68    if body is not None: 
     69        markup.append(body)    
     70    return markup         
    5671 
    57 class Polygon(GML): 
     72def createExterior(root = None, ns = GML_NAMESPACE, body = None):       
    5873    ''' 
    59     classdocs 
     74        @param root: the root tag of the document containing this element 
     75        @param ns: the tag namespace  
     76        @param body: an instance of GML.LinerRing 
    6077    ''' 
     78    markup = createMarkup('exterior', GML_PREFIX, ns, root) 
     79    if body is not None: 
     80        markup.append(body)    
     81    return markup         
    6182 
    62     def __init__(self, root, body): 
    63         ''' 
    64         Constructor 
    65         @param root: the document root element where attach the prefix:namespace for this element  
    66         @param body: an instance of GML.Exterior  
    67         ''' 
    68         self.body = body 
    69         super(Polygon, self).__init__(root) 
     83def createPolygon(root = None, ns = GML_NAMESPACE, body = None):       
     84    ''' 
     85        @param root: the root tag of the document containing this element 
     86        @param ns: the tag namespace  
     87        @param body: an instance of GML.Exterior 
     88    ''' 
     89    markup = createMarkup('Polygon', GML_PREFIX, ns, root) 
     90    if body is not None: 
     91        markup.append(body) 
     92    return markup         
     93      
     94def createValidTime(root = None, ns = GML_NAMESPACE, body = None):       
     95    ''' 
     96        @param root: the root tag of the document containing this element         
     97        @param ns: the tag namespace  
     98        @param body: an instance of GML.TimePeriod         
     99    ''' 
     100    markup = createMarkup('validTime', GML_PREFIX, ns, root) 
     101    if body is not None: 
     102        markup.append(body) 
     103    return markup         
     104 
     105def createTimePeriod(root = None, ns = GML_NAMESPACE, begin = None, end = None):       
     106    ''' 
     107        @param root: the root tag of the document containing this element 
     108        @param ns: the tag namespace  
     109        @param begin: an instance of GML.BeginPosition  
     110        @param end: an instance of GML.EndPosition  
     111    ''' 
     112    markup = createMarkup('TimePeriod', GML_PREFIX, ns, root) 
     113    if begin is not None: 
     114        markup.append(begin) 
     115    if end is not None: 
     116        markup.append(end)  
     117    return markup         
     118         
     119def _createTimePositionType(itype, root = None, ns = GML_NAMESPACE, body = None):       
     120    ''' 
     121        @param itype: 'beginPosition' or endPosition     
     122        @param root: the root tag of the document containing this element  
     123        @param ns: the tag namespace         
     124        @param body: an instance of GML.TimePeriod         
     125    ''' 
     126    markup = createMarkup(itype, GML_PREFIX, ns, root) 
     127    if body is not None: 
     128        markup.append(body) 
     129    return markup         
     130 
     131def createBeginPosition(root = None, ns = GML_NAMESPACE, body = None):       
     132    '''     
     133        @param root: the root tag of the document containing this element 
     134        @param ns: the tag namespace  
     135        @param body: a string 
     136    ''' 
     137    markup = createMarkup('beginPosition', GML_PREFIX, ns, root) 
     138    if body is not None: 
     139        markup.text = body 
     140    return markup         
    70141     
    71     def buildElement(self): 
    72         polygon =  Element("%s:%s" % (GML.PREFIX, 'Polygon')) 
    73         polygon.append(self.body.buildElement()) 
    74         return polygon 
    75      
    76 class Exterior(GML): 
     142def createEndPosition(root = None, ns = GML_NAMESPACE, body = None):       
     143    '''     
     144        @param root: the root tag of the document containing this element 
     145        @param ns: the tag namespace  
     146        @param body: a string 
    77147    ''' 
    78     classdocs 
    79     ''' 
    80  
    81     def __init__(self, root, body): 
    82         ''' 
    83         Constructor 
    84         @param root: the document root element where attach the prefix:namespace for this element  
    85         @param body: an instance of GML.LinerRing  
    86         ''' 
    87         self.body = body 
    88         super(Exterior, self).__init__(root) 
    89      
    90     def buildElement(self): 
    91         exterior =  Element("%s:%s" % (GML.PREFIX, 'exterior')) 
    92         exterior.append(self.body.buildElement()) 
    93         return exterior 
    94      
    95 class LinearRing(GML): 
    96     ''' 
    97     classdocs 
    98     ''' 
    99  
    100     def __init__(self, root, body): 
    101         ''' 
    102         Constructor 
    103         @param root: the document root element where attach the prefix:namespace for this element  
    104         @param body: an instance of GML.PosList  
    105         ''' 
    106         self.body = body 
    107         super(LinearRing, self).__init__(root) 
    108      
    109     def buildElement(self): 
    110         linearRing =  Element("%s:%s" % (GML.PREFIX, 'LinearRing')) 
    111         linearRing.append(self.body.buildElement()) 
    112         return linearRing 
    113      
    114 class PosList(GML): 
    115     ''' 
    116     classdocs 
    117     ''' 
    118  
    119     def __init__(self, root, body, srsDimension = None): 
    120         ''' 
    121         Constructor 
    122         @param root: the document root element where attach the prefix:namespace for this element  
    123         @param body: a string like '45.256 -110.45 46.46 -109.48 43.84 -109.86 45.256 -110.45' 
    124         @param srsDimension: a number 
    125         ''' 
    126         self.body = body 
    127         self.srsDimension = srsDimension 
    128         super(PosList, self).__init__(root) 
    129      
    130     def buildElement(self): 
    131         posList =  Element("%s:%s" % (GML.PREFIX, 'posList')) 
    132         posList.set('srsDimension', self.srsDimension) 
    133         posList.text = self.body 
    134         return posList              
     148    markup = createMarkup('endPosition', GML_PREFIX, ns, root) 
     149    if body is not None: 
     150        markup.text = body    
     151    return markup          
  • mauRepo/CedaMarkup/trunk/ceda_markup/opensearch/os_engine.py

    r8375 r8418  
    7171            kwargs['params_values'] = params_values 
    7272            queries = QueryTag.queryWithRoleRequest(mimetype, self.osRequest.query.params_model, params_values) 
    73             return response.generateResponse(self.osRequest.query.doSearch(**kwargs), [queries], self.osHostURL, **kwargs) 
     73            results = self.osRequest.query.doSearch(**kwargs) 
     74            return response.generateResponse(results, [queries], self.osHostURL, **kwargs) 
    7475        return None                 
    7576     
Note: See TracChangeset for help on using the changeset viewer.