2012-03-30 8 views
1

Ich versuche, eine Tabelle in Google Text & Tabellen mit dieser Funktion zu löschen:DeleteResource von Google Text & Tabellen mit Python

def f_DeleteResource(xls_name): 
    """Delete a resource""" 
    client=Auth() 
    for e1 in client.GetResources().entry: 
    e2 = client.GetResource(e1) 
    if xls_name==e2.title.text: 
     client.DeleteResource(e2.resource_id.text,True) 

Und ich erhalte verschiedene Fehler, wenn ich die ersten Parameter von client.DeleteResource(p1,p2) ändern:

client.DeleteResource(e2.resource_id.text,True):

Traceback (most recent call last): 
File "C:\xmp\D6GDocsDeleteUpload.py", line 164, in <module> main() 
File "C:\xmp\D6GDocsDeleteUpload.py", line 157, in main f_DeleteResource(sys.argv[2]) 
File "C:\xmp\D6GDocsDeleteUpload.py", line 144, in f_DeleteResource client.DeleteResource(e2.resource_id.text,True) 
File "C:\Python27\lib\site-packages\gdata\docs\client.py", line 540, in delete_resource uri = entry.GetEditLink().href 
AttributeError: 'str' object has no attribute 'GetEditLink' 

client.DeleteResource(e2,True):

Traceback (most recent call last): 
File "C:\xmp\D6GDocsDeleteUpload.py", line 164, in <module> main() 
File "C:\xmp\D6GDocsDeleteUpload.py", line 157, in main f_DeleteResource(sys.argv[2]) 
File "C:\xmp\D6GDocsDeleteUpload.py", line 144, in f_DeleteResource client.DeleteResource(e2,True) 
File "C:\Python27\lib\site-packages\gdata\docs\client.py", line 543, in delete_resource return super(DocsClient, self).delete(uri, **kwargs) 
File "C:\Python27\lib\site-packages\gdata\client.py", line 748, in delete **kwargs) 
File "C:\Python27\lib\site-packages\gdata\docs\client.py", line 66, in request return super(DocsClient, self).request(method=method, uri=uri, **kwargs) 
File "C:\Python27\lib\site-packages\gdata\client.py", line 319, in request RequestError) 
gdata.client.RequestError: Server responded with: 403, <errors xmlns='http://schemas.google.com/g/2005'><error><domain>GData</domain><code>matchHeaderRequired</code><location type='header'>If-Match|If-None-Match</location><internalReason>If-Match or If-None-Match header or entry etag attribute required</internalReason></error></errors> 

Jeder kann mir helfen?

Antwort

3

Es scheint sich um einen Fehler in der Google API Python-Bibliothek zu handeln. Ich überprüft gdata-2.0.16 und bemerkte, dass DeleteResource() Funktion verwendet nur URL der Ressource (gdata/docs/client.py Linien 540-543), aber später überprüft für hasattr (entry_or_uri, 'etag') (gdata/client.py Zeilen 737-741) und natürlich Zeichenfolge Wert (URI) hat keine Etag Attribut.

können Sie arbeiten um es Kraft Stichwort Argument:

import gdata.docs.data 
import gdata.docs.client 

client = gdata.docs.client.DocsClient() 
client.ClientLogin('[email protected]', 'xxxxxx', 'XxX') 

for doc in client.GetAllResources(): 
    if doc.title.text == 'qpqpqpqpqpqp': 
     client.DeleteResource(doc, force=True) 
     break 

Wenn Sie Sie wollen Bibliothek Maintainer einen Fehler melden kann (wenn es nicht bereits berichtet).

+0

Vielen Dank Tupteq! Ja, mit dieser Arbeit funktioniert es. Ich frage in Google Groups und ich bekomme eine Antwort von einem der Entwickler, die das gleiche sagt. Er ändert Code, um diese Kraft zu tun = True war eine Option: http://code.google.com/p/gdata-python-client/source/detail?r=f98fff494fb89fca12deede00c3567dd589e5f97 – Sithram