2010-11-20 8 views
3

J'ai une application appengine avec deux types simples d'entités - ParentEntity s et ChildEntity s. Chaque ParentEntity a un List appartenant à ChildEntity s.appengine bulkdownloader au xml avec des entités imbriquées

@PersistenceCapable 
public class ParentEntity 
{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 

    @Persistent 
    private String name; 

    @Persistent(defaultFetchGroup=true) 
    private List<ChildEntity> children; 

... 

Avec ChildEntity défini de manière similaire.

Maintenant, je veux télécharger toutes mes données du magasin de données en utilisant la technique décrite au http://bulkloadersample.appspot.com/. Dans leur exemple, ils parviennent à exporter des données vers un fichier XML avec des entités possédées imbriquées dans des entités parentes. Mais quand j'essaie d'utiliser la configuration suivante (qui ressemble beaucoup à la leur - voir http://bulkloadersample.appspot.com/showfile/bulkloader_visitactivity.yaml et regardez la propriété activities), je rencontre des erreurs.

- kind: ParentEntity 
    connector: simplexml 
    connector_options: 
    xpath_to_nodes: /Parents/ParentEntity 
    style: element_centric 

    property_map: 
    - property: __key__ 
     external_name: key 
     export_transform: transform.key_id_or_name_as_string 

    - property: children 
     external_name: Children 
     import_transform: 
     transform.list_from_child_node('Children/ChildEntity') 
     export_transform: 
     transform.child_node_from_list('ChildEntity') 


- kind: ChildEntity 
    connector: simplexml 
    connector_options: 
    xpath_to_nodes: /Children/ChildEntity 
    style: element_centric 

    property_map: 
    - property: __key__ 
     external_name: key 
     export_transform: transform.key_id_or_name_as_string 

je reçois l'erreur suivante:

google.appengine.ext.bulkload.bulkloader_errors.ErrorOnTransform: Error on trans 
form. Property: children External Name: Children. Code: transform.ch 
ild_node_from_list('ChildEntity') Details: 'NoneType' object is not iterable 

Grosse mise à jour:

J'ai créé cette application exemple que vous pouvez réellement voir et à télécharger et tester

à http://rileylark.appspot.com

Vous pouvez voir la sortie I WANT au http://rileylark.appspot.com/view

Téléchargez le projet eclipse pour voir comment cela fonctionne.

Ce que je veux pour mes 500 points est un fichier de travail config.yaml qui peut exporter les données pour parent et ChildEntities en XML niché appcfg.py download_data

+0

pourquoi sont vous utilisez transform.child_node_from_list ('GradingPeriod') et non transformer.list_from_child_node ('GradingPeriod') comme utilisé dans l'exemple lié? – systempuntoout

+0

Je le fais sur une idée que c'est ce que ça devrait être. Je n'ai vu aucun document faisant autorité nulle part, d'autres sites utilisent child_node_from_list, et il semble que je veuille faire un nœud enfant à partir d'une liste. J'ai aussi essayé list_from_child_node, mais je reçois beaucoup d'autres erreurs. –

+0

La "liste" à partir de laquelle chercher les 'children' semble toujours être' None'. – hleinone

Répondre

0

Essayez d'utiliser:

transform.list_from_child_node('GradingPeriods/GradingPeriod', suppress_blank=True) 
+0

Comme la transformation d'exportation? J'obtiens 'google.appengine.ext.bulkload.bulkloader_errors.ErrorOnTransform: Erreur sur la transformation. Propriété: gradingPeriods Nom externe: GradingPeriods. Code: transform.list_from_child_node ('GradingPeriods/GradingPeriod', True) Détails: '__node __' '. –

+0

Essayez 'transformer.list_from_child_node ('GradingPeriods/GradingPeriod', supprimer_blank = True)' –

+0

non, non, comme import transformer –

Questions connexes