[OWSLib-users] error in CSW insert transaction : Document is XML, but not CSW-ish
Tom Kralidis
tomkralidis at gmail.com
Tue May 3 05:30:42 PDT 2016
Hi Ernest:
On Tue, 3 May 2016, Chiarello Ernest wrote:
> Date: Tue, 3 May 2016 11:37:47 +0200
> From: Chiarello Ernest <Ernest.Chiarello at univ-fcomte.fr>
> To: Tom Kralidis <tomkralidis at gmail.com>, OWSLib-users at lists.osgeo.org
> Subject: Re: [OWSLib-users] error in CSW insert transaction : Document is XML,
> but not CSW-ish
>
> Le 03/05/2016 11:11, Chiarello Ernest a écrit :
>> new idea !
>>
>> Le 03/05/2016 11:05, Chiarello Ernest a écrit :
>>> Hi Tom,
>>>
>>> Le 03/05/2016 05:04, Tom Kralidis a écrit :
>>>> On Mon, May 2, 2016 at 6:12 AM, Chiarello Ernest
>>>> <Ernest.Chiarello at univ-fcomte.fr> wrote:
>>>>> Hi all,
>>>>>
>>>>> I am trying to insert a metadata in GeoNetwork, according OWSlib
>>>>> documentation but it fails with this error message :
>>>>> RuntimeError: Document is XML, but not CSW-ish
>>>>>
>>>>> But above all, i think quotes are missing in the csw transaction. you
>>>>> should
>>>>> write :
>>>>>
>>>>>>>> csw.transaction(ttype='insert', typename='gmd:MD_Metadata',
>>>>>>>> record=open("file.xml").read())
>>>>> instead of :
>>>>>>>> csw.transaction(ttype='insert', typename='gmd:MD_Metadata',
>>>>>>>> record=open(file.xml).read())
>>>>> Next i recovered a file from another GeoNetwork, in order to be sure
>>>>> that
>>>>> the metadata file would be correct.
>>>>>
>>>>> wget
>>>>> https://georchestra-mshe.univ-fcomte.fr/geonetwork/srv/fre/xml.metadata.get?id=17804
>>>>> -O metadata.xml
>>>>>
>>>>> And then i tried to insert this metadata in my GeoNetwork Dev machine :
>>>>>
>>>>>>>> geonetwork =
>>>>>>>> 'http://geonetwork-mshe.univ-fcomte.fr:8080/geonetwork/srv/fre/csw'
>>>>>>>> from owslib.csw import CatalogueServiceWeb
>>>>>>>> csw = CatalogueServiceWeb(geonetwork)
>>>>>>>> csw.transaction(ttype='insert', typename='gmd:MD_Metadata',
>>>>>>>> record=open("metadata.xml").read())
>>>>> Traceback (most recent call last):
>>>>> File "<stdin>", line 1, in <module>
>>>>> File "/usr/lib/python2.7/dist-packages/owslib/csw.py", line 446, in
>>>>> transaction
>>>>> self._invoke()
>>>>> File "/usr/lib/python2.7/dist-packages/owslib/csw.py", line 680, in
>>>>> _invoke
>>>>> raise RuntimeError('Document is XML, but not CSW-ish')
>>>>> RuntimeError: Document is XML, but not CSW-ish
>>>>>
>>>>> Can anybody explain to me why my metadata.xml file is not CSW-ish ?
>>>>>
>>>> My guess is that some sort of authentication is required to make CSW-T
>>>> requests against the CSW in question. Try adding the username an
>>>> password parameters to the constructor?
>>>>
>>>> ..Tom
>>> sorry, but i do not know how to set username and passord in the csw
>>> transaction.
>>>
>>> def transaction(self, ttype=None, typename='csw:Record', record=None,
>>> propertyname=None, propertyvalue=None, bbox=None, keywords=[], cql=None,
>>> identifier=None):
>>>
>>> """
>>>
>>> Construct and process a Transaction request
>>>
>>> Parameters
>>> ----------
>>>
>>> - ttype: the type of transaction 'insert, 'update', 'delete'
>>> - typename: the typename to describe (default is 'csw:Record')
>>> - record: the XML record to insert
>>> - propertyname: the RecordProperty/PropertyName to Filter against
>>> - propertyvalue: the RecordProperty Value to Filter against (for updates)
>>> - bbox: the bounding box of the spatial query in the form
>>> [minx,miny,maxx,maxy]
>>> - keywords: list of keywords
>>> - cql: common query language text. Note this overrides bbox, qtype,
>>> keywords
>>> - identifier: record identifier. Note this overrides bbox, qtype,
>>> keywords, cql
>>>
>>>
>>>
>>> thanks for your help,
>>>
>>>
>>> Ernest.
>>>
>>
>> I realized that username and password should be send when opening CSW !
>> csw = CatalogueServiceWeb(geonetwork, skip_caps=True, username='admin',
>> password='admin')
>>
>> but i have a new error...
>>
>> >>> geonetwork =
>> 'http://geonetwork-mshe.univ-fcomte.fr:8080/geonetwork/srv/fre/csw'
>> >>> from owslib.csw import CatalogueServiceWeb
>> >>> csw = CatalogueServiceWeb(geonetwork, skip_caps=True, username='admin',
>> password='admin')
>> >>> csw.transaction(ttype='insert', typename='gmd:MD_Metadata',
>> record=open('metadata.xml').read())
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> File "/usr/lib/python2.7/dist-packages/owslib/csw.py", line 429, in
>> transaction
>> node1.append(etree.fromstring(record))
>> File "src/lxml/lxml.etree.pyx", line 3213, in lxml.etree.fromstring
>> (src/lxml/lxml.etree.c:82934)
>> File "src/lxml/parser.pxi", line 1819, in lxml.etree._parseMemoryDocument
>> (src/lxml/lxml.etree.c:124533)
>> File "src/lxml/parser.pxi", line 1707, in lxml.etree._parseDoc
>> (src/lxml/lxml.etree.c:123074)
>> File "src/lxml/parser.pxi", line 1079, in
>> lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:117114)
>> File "src/lxml/parser.pxi", line 573, in
>> lxml.etree._ParserContext._handleParseResultDoc
>> (src/lxml/lxml.etree.c:110510)
>> File "src/lxml/parser.pxi", line 683, in lxml.etree._handleParseResult
>> (src/lxml/lxml.etree.c:112276)
>> File "src/lxml/parser.pxi", line 624, in lxml.etree._raiseParseError
>> (src/lxml/lxml.etree.c:111367)
>> lxml.etree.XMLSyntaxError: None
>>
>> any help ?
>>
>> Ernest.
>
> sorry, the metadata file was empty, for an unknow reason... >:o
> so, i can try another time, with user authentication :
>
>>>> geonetwork =
> 'http://geonetwork-mshe.univ-fcomte.fr:8080/geonetwork/srv/fre/csw'
>>>> from owslib.csw import CatalogueServiceWeb
>>>> csw = CatalogueServiceWeb(geonetwork, skip_caps=True, username='admin',
> password='admin')
>>>>
>>>> csw.transaction(ttype='insert', typename='gmd:MD_Metadata',
> record=open('metadata.xml').read())
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/lib/python2.7/dist-packages/owslib/csw.py", line 446, in
> transaction
> self._invoke()
> File "/usr/lib/python2.7/dist-packages/owslib/csw.py", line 680, in _invoke
> raise RuntimeError('Document is XML, but not CSW-ish')
> RuntimeError: Document is XML, but not CSW-ish
>
> it seems the error is the same...
Are you able to access csw.response after the error? If not, add a print
statment (self.response) in https://github.com/geopython/OWSLib/blob/master/owslib/csw.py#L666
to see the actual result from the CSW?
> what am i missing ?
>
>
> Ernest.
>
>
More information about the OWSLib-users
mailing list