рдмреИрдХрдЕрдк, рд░рд┐рдХрд╡рд░реА рдФрд░ рдбреЗрдЯрд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

Google рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ / рд╕реЗ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google App Engine рдореЗрдВ Bulkloader рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдмрд▓реНрдХрд▓реЛрдбрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЗ рдмреИрдХрдЕрдк / рд░рд┐рдХрд╡рд░реА / рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдпреЛрдЧ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдмрдЧреНрд╕ рдореЗрдВ рдЖрдПрдВрдЧреЗред рдореИрдВ рдЦреБрдж рдХрд╛рдлреА рд╕рдордп рд╕реЗ рд╕реВрдЪрдирд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЦреЛрдж рд░рд╣рд╛ рд╣реВрдВ, рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджреЗрд░реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреАрдбрд╝реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рджреМрд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ; рдФрд░ рдЕрдм рдореИрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдлрд▓ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред



рд▓реЗрдЦ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдзреНрдпрд╛рди рд░рдЦреЗрдВред



рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдРрдк рдЗрдВрдЬрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╕рдореБрджреНрд░ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд░реВрд╕реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЦрд░рд╛рдм рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмреНрд▓реЙрдЧ рдЗрдВрдЬрди, рд╡рд┐рд╖рдп рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдмреИрдХрдЕрдк рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рд╛рджреЗ XML рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред



рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рд╡рд╛рдкрд╕реА рдпрд╣рд╛рдБ рднреА рдирд╣реАрдВ рд╣реЛрдЧреАред



рд╢рдмреНрджрд╛рд╡рд▓реА


рдХреЛрдИ рд░реВрд╕реА-рднрд╛рд╖реА рд╕реНрдерд╛рдкрд┐рдд рд╢рдмреНрджрд╛рд╡рд▓реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ "рд╡рд░реНрдЧ" рдпрд╛ "рдкреНрд░рдХрд╛рд░" рдХрд╣рдХрд░ рдХреБрдЫ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдЗрдХрд╛рдИ рдПрдХ рдЗрдХрд╛рдИ рдмрдиреА рд╣реБрдИ рд╣реИред



рдЖрдпрд╛рдд = рд╡рд┐рдШрдЯрди = рд╡рд╕реВрд▓реАред рдирд┐рд░реНрдпрд╛рдд = рдХреНрд░рдорд╛рдВрдХрди = рдмреИрдХрдЕрдкред



рдЯреНрд░реЗрдирд┐рдВрдЧ


рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рд╕реНрдерд╛рдиреАрдп рдпреВрдирд┐рдХреНрд╕ / рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рдЬреАрдПрдИ рдПрд╕рдбреАрдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.4.1 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред рдЬрдм Google рд╕рд░реНрд╡рд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рд╣рдо рдЕрднреА рднреА рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред



рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп GAE SDK рдкреНрд░реЛрдЧреНрд░рд╛рдо (appcfg.py, dev_appserver.py) рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (SDK рдкрде рдЙрдкрдпреБрдХреНрдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред



рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХреНрдпрд╛ рд╣реИ


рдмрд▓реНрдХрд▓реЛрдбрд░ рдПрдХ рдкрд╛рдпрдерди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдХреЛрдб рднреА рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рдврд╛рдВрдЪреЗ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рд╕реЗ, рдЖрдкрдХреЛ рдРрдк рдЗрдВрдЬрди рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рдорд┐рд▓реЗрдЧрд╛ред



рдЖрдк рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЪреБрдирддреЗ рд╣реИрдВ, рдФрд░ рдмрд▓реНрдХ рд▓реЛрдбрд░ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдирд┐рдпрдореЛрдВ (рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред



рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ, Remote_api рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧ (app.yaml) рдореЗрдВ рдПрдХ рд╕реЗрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ (рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ)



  builtins:
 - Remote_api: рдкрд░ 


рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ http: // servername / _ah / Remote_api рдкрд░ API рдХрд╛ рдПрдХреНрд╕реЗрд╕ рдмрд┐рдВрджреБ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ http: // localhost: 8080 / _ah / remote_api рд╣реЛрдЧрд╛ред



рдбреЗрдЯрд╛ рд╕реНрдХреАрдорд╛


рдЪрд▓реЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд▓реЗрдЦ (рд▓реЗрдЦ), рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ (рдЕрдиреБрдЪреНрдЫреЗрдж рд╕рдВрдЧреНрд░рд╣), рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рд▓реЗрдЦ (рд░реЗрдВрдбрд░рд░реНрдб рдЖрд░реНрдЯрд┐рдХрд▓)ред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред Html рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд▓реЗрдЦ рдПрдХ рдЕрд▓рдЧ рднрдВрдбрд╛рд░рдг рдЗрдХрд╛рдИ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред



рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:



рд▓реЗрдЦ тЖТ RenderedArticle (рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ)

ArticleComment тЖТ рд▓реЗрдЦ (рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ)

ArticleComment тЖТ ArticleComment (рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ)



class RenderedArticle(db.Model): html_body = db.TextProperty(required=True) class Article(db.Model): shortcut = db.StringProperty(required=True) title = db.StringProperty(required=True) body = db.TextProperty(required=True) html_preview = db.TextProperty() rendered_html = db.ReferenceProperty(RenderedArticle) published = db.DateTimeProperty(auto_now_add=True) updated = db.DateTimeProperty(auto_now_add=True) tags = db.StringListProperty() is_commentable = db.BooleanProperty() is_draft = db.BooleanProperty() class ArticleComment(db.Model): parent_comment = db.SelfReferenceProperty() name = db.StringProperty() email = db.StringProperty() homepage = db.StringProperty() body = db.TextProperty(required=True) html_body = db.TextProperty(required=True) published = db.DateTimeProperty(auto_now_add=True) article = db.ReferenceProperty(Article) ip_address = db.StringProperty() is_approved = db.BooleanProperty(default=False) is_subscribed = db.BooleanProperty(default=False)
      
      







рдореЙрдбрд▓ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ, рджрд┐рдирд╛рдВрдХ, рддрд╛рд░, рдмреВрд▓рд┐рдпрди рдорд╛рди, рд╕реВрдЪрд┐рдпрд╛рдВред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реБрдИ рд╣реИрдВред



рдмрд▓реНрдХ рд▓реЛрдбрд░ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рддреНрдпрд╛рдкрди


рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ:



  appcfg.py download_data --email = doesntmatter -рдПрдХ рд╡реЗрдпрд░рд╡реЛрд░реНрдб --url = http: // localhost: 8080 / _ah / Remote_api --kind = Article --filename = out.dat 




рд╣рдо рдП-рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, --рдореЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреЛрдИ рднреА рд▓рд╛рдЗрди (рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛), - рдорд╛рдирд╡ рдЬрд╛рддрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ - рд╡рд╣ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдЬрд┐рд╕реЗ рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (download_data рддрд░реНрдХ рдХреЛ рджреЗрдЦреЗрдВ)ред рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж (рдХреЗрд╡рд▓ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдиреБрд░реЛрдз рдкрд░ Enter рджрдмрд╛рдПрдВ) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ (рдЖрдЙрдЯред рдбреАрдПрдЯреА) рдХреЗ рдмреИрдХрдЕрдк рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓реЙрдЧреНрд╕ (рдкреНрд░рдкрддреНрд░ рдмрд▓реНрдХ рд▓реЛрдбрд░- * рдХреА рдлрд╛рдЗрд▓реЗрдВ) рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, SQLITE3 рдкреНрд░рд╛рд░реВрдк рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ (out.dat) рдХреЛ рдХрд┐рд╕реА рднреА SQLITE3 рджрд░реНрд╢рдХ рдореЗрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдЧреНрд░реЗрд╢рди) рдХреЗ рд▓рд┐рдП рдХрдо рдЙрдкрдпреЛрдЧ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрд▓реНрдХрд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдФрд░ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЗрдВ) рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред



рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛


рдПрд╕рдбреАрдХреЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рджреЛ рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд / рдЖрдпрд╛рдд рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рд╕реАрдПрд╕рд╡реА рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓, рд╣рдо рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрд┐рдд YAML рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд / рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдореВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗред рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ config.yaml рдХрд╣реЗрдВрдЧреЗ, рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреНрд░реА рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдмреИрдХрдЕрдк рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред



рд╢реБрд░реБрдЖрдд рдореЗрдВ - python_preamble рд╕реЗрдХреНрд╢рди рдореЗрдВ - рдЙрди python рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд┐рд░реНрдпрд╛рдд / рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрдЧреАред рдпрд╣рд╛рдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ "рдЬреЗрдВрдЯрд▓рдореИрди рд╕реЗрдЯ", рдмреЗрд╕ 64 рдФрд░ рд░реА рдорд╛рдирдХ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, Googleред * рдПрд╕рдбреАрдХреЗ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдФрд░ рд╣реЗрд▓реНрдкрд░реНрд╕ рд╣рдорд╛рд░рд╛ рдЦреБрдж рдХрд╛ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рд╣реЗрд▓реНрдкрд░реНрд╕рдбреИрдо рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред Helpers.py рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд / рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, рд╣рдо рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред



 python_preamble: - import: base64 - import: re - import: google.appengine.ext.bulkload.transform - import: google.appengine.ext.bulkload.bulkloader_wizard - import: google.appengine.ext.db - import: google.appengine.api.datastore - import: google.appengine.api.users - import: helpers
      
      







рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЕрдЧрд▓рд╛ рднрд╛рдЧ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рд╣реИ, рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдмреИрдХрдЕрдк рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ "рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕" рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЙрд╕ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реЗрдХреНрд╢рди рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕рдореЗрдВ рд╣рдо рдЕрдиреБрдЪреНрдЫреЗрдж рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдиреНрд╡рд░реНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:



 transformers: - kind: Article connector: simplexml #   connector_options: #   xpath_to_nodes: "/blog/Articles/Article" # XPath,          style: element_centric #    XML,    тАФ - property_map: - property: __key__ external_name: key export_transform: transform.key_id_or_name_as_string
      
      





рдПрдХ рдЫреЛрдЯрд╛ рдиреЛрдЯ, XPath рд╕рдорд░реНрдерди рдмрд╣реБрдд рдХрдордЬреЛрд░ рд╣реИ, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "/ AAA / BBB / CCC" рдлрд╝реЙрд░реНрдо рдХреЗ рдХреЗрд╡рд▓ рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдм рдмрд╕ рдмрдирд╛рдП рдЧрдП рдХреЙрдиреНрдлрд┐рдЧрд░ (рд╡рд┐рдХрд▓реНрдк --config) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:



  appcfg.py download_data --email = doesntmatter -рдПрдХ рд╡реЗрдпрд░рд╡реЛрд░реНрдб --url = http: // localhost: 8080 / _ah / Remote_api --kind = Article --config = test.yaml --flename = Article.xml 




рдФрд░ рд╣рдореЗрдВ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд╛рд▓рд╛ XML рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:



 <?xml version="1.0"?> <blog> <Articles> <Article> <key>6</key> </Article> <Article> <key>8</key> </Article> </Articles> </blog>
      
      







рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ XML рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдерд╛; рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреБрдВрдЬреА рд╣реИред Export_transform рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдирд╡рд░реНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ - transform.key_id_or_name_as_stringред рдпрд╣ google.appengine.ext.bulkload.transform рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдХрдирд╡рд░реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдореЗрдордиреЗ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА рд╣реИред



рдФрд░ рдЕрдм рдЕрдиреБрдЪреНрдЫреЗрдж рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдкреВрд░рд╛ рдЯреБрдХрдбрд╝рд╛:



 - kind: Article connector: simplexml connector_options: xpath_to_nodes: "/blog/Articles/Article" style: element_centric property_map: - property: __key__ external_name: key export_transform: transform.key_id_or_name_as_string - property: rendered_html external_name: rendered-html export_transform: transform.key_id_or_name_as_string # deep key! It's required here! import_transform: transform.create_deep_key(('Article', 'key'), ('RenderedArticle', transform.CURRENT_PROPERTY)) - property: shortcut external_name: shortcut - property: body external_name: body - property: title external_name: title - property: html_preview external_name: html-preview - property: published external_name: published export_transform: transform.export_date_time('%Y-%m-%dT%H:%M') import_transform: transform.import_date_time('%Y-%m-%dT%H:%M') - property: updated external_name: updated export_transform: transform.export_date_time('%Y-%m-%dT%H:%M') import_transform: transform.import_date_time('%Y-%m-%dT%H:%M') - property: tags external_name: tags import_transform: "lambda x: x is not None and len(x) > 0 and eval(x) or []" - property: is_commentable external_name: is-commentable import_transform: transform.regexp_bool('^True$') - property: is_draft external_name: is-draft import_transform: transform.regexp_bool('^True$')
      
      







рдЖрдЗрдП рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрддреНрддрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред



рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдмрд╛рд╣рд░реА_рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред



рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ import_transform рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдмреИрдХрдЕрдк рд╕реЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдпрддрд╛ рд╣реИред



Export_transform рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рдлрд╝реАрд▓реНрдб рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЬреЛ рдмреИрдХрдЕрдк, рдбреЗрдЯрд╛ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред



рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ; рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рдо рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред



рдЖрдЗрдП rend_html рдлрд╝реАрд▓реНрдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдпрд╣ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, RenderedArticle), рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, RenderedArticle рд╡рд░реНрдЧ рдХрд╛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдиреБрдЪреНрдЫреЗрдж рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдмрдЪреНрдЪрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдбреАрд░рд┐рдПрд░рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рд╕рдВрджрд░реНрдн "рдирд┐рд░реНрдорд╛рдг" рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдорд╛рдиреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдорд╛рдирдХ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ редreate_deep_key рд╡рд┐рдзрд┐:



  - property: rendered_html external_name: rendered-html export_transform: transform.key_id_or_name_as_string # deep key! It's required here! import_transform: transform.create_deep_key(('Article', 'key'), ('RenderedArticle', transform.CURRENT_PROPERTY))
      
      







рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдпрд╛рдд / Export_transform рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рднрд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдФрд░ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рджреЗрдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред transform.create_deep_key рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рджреЛ-рддрддреНрд╡ tuples рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рд╕реНрддрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдФрд░ tuple рдореЗрдВ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдФрд░ рддрддреНрд╡ рдХрд╛ рдирд╛рдо (XML рдлрд╝рд╛рдЗрд▓ рд╕реЗ) рд╣реЛрддрд╛ рд╣реИ; рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореВрд▓реНрдп рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред



рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд░рд┐рд▓реЗрд╢рди рдЪреЗрди рд╕реЗ рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлреАрд▓реНрдб рдирд╛рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП value transform.CURRENT_PROPERTY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдмрджрд▓реЗ рдХреЗ рдмрдЬрд╛рдпред CURRENT_PROPERTY, рд░реЗрдВрдбрд░_рдПрдЪрдЯреАрдПрдордПрд▓ рд▓рд┐рдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИред



рджрд┐рдирд╛рдВрдХ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдХреЛ рднреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдПрд╕рдбреАрдХреЗ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рддрд░реНрдХ рдореЗрдВ рджрд┐рдирд╛рдВрдХ / рд╕рдордп рдкреНрд░рд╛рд░реВрдкрдг рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:



  - property: published external_name: published export_transform: transform.export_date_time('%Y-%m-%dT%H:%M') import_transform: transform.import_date_time('%Y-%m-%dT%H:%M')
      
      







рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб, рдпрд╣рд╛рдБ рдорд╛рдирдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:



  - property: tags external_name: tags import_transform: "lambda x: x is not None and len(x) > 0 and eval(x) or []"
      
      





рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп (рдХреНрд░рдордмрджреНрдз), рддрд╛рд░ рдХреА рд╕реВрдЪреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рддрддреНрд╡ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:



 <tags>[u'x2', u'another string']</tags>
      
      







рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреЛ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



 <tags></tags>
      
      





рдФрд░ рдЬрдм рдорд╛рдирдХ рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЦрд╛рд▓реА рдлрд╝реАрд▓реНрдб рдХреЛ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ рдорд╛рдиреНрдп рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЖрд╡реЗрджрди рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╣реА (рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд) рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, SDK рдореЗрдВ рдмрдЧ рдХреЗ рдХрд╛рд░рдг , рдпрд╣ рдЕрднреА рднреА рдЖрдкрдХреА рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдореЗрдВ рд╣реИред



рдмреВрд▓рд┐рдпрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдбреАрд░рд┐рдПрд░рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:



  - property: is_commentable external_name: is-commentable import_transform: transform.regexp_bool('^True$')
      
      





рдорд╛рдирдХ рдирд┐рд░реНрдпрд╛рдд рдореЗрдВ, рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдпреЛрдВ рдХреЛ "рдЯреНрд░реВ" рдФрд░ "рдЧрд▓рдд" рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдФрд░ рднреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдХреЗрд╡рд▓ "рдЯреНрд░реВ" рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЯреНрд░реВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рд╕рднреА рдХреЛ рдлрд╛рд▓реНрд╕ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЖрд░реНрдЯрд┐рдХрд▓ рдХреНрд▓рд╛рд╕ рдХреА рдЗрдореНрдкреЛрд░реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:



 <?xml version="1.0"?> <blog> <Articles> <Article> <body>aaa bbb ccc</body> <updated>2011-01-20T08:19</updated> <key>6</key> <is-draft>False</is-draft> <title>this is new article</title> <html-preview><p>aaa bbb ccc</p></html-preview> <tags></tags> <shortcut>short-cut-1295418565</shortcut> <rendered-html>7</rendered-html> <published>2011-01-19T06:29</published> <is-commentable>True</is-commentable> </Article> <Article> <body>ff gg hh</body> <updated>2011-01-19T06:30</updated> <key>8</key> <is-draft>False</is-draft> <title>another article</title> <html-preview><p>ff gg hh</p></html-preview> <tags>[u'x2']</tags> <shortcut>short-cut-1295418590</shortcut> <rendered-html>9</rendered-html> <published>2011-01-19T06:29</published> <is-commentable>True</is-commentable> </Article> </Articles> </blog>
      
      







рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд▓реЗрд╢рдирд╢рд┐рдк рдЪреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛


рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХреБрдЫ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╕рдордп рдореВрд▓ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореВрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирдИ рд╡рд╕реНрддреБ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдПрдХ рд╣реА рд╕рдореВрд╣ рдореЗрдВ рдЖрддреА рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрдиред рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди рд╕рдВрдмрдВрдзреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рд╣рдо рдиреАрдЪреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред



рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рд▓реЗрдЦ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рдореЗрдВ рд▓реЗрдЦ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб, рдПрдХ рдЫреЛрдЯрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ рдЕрдиреНрдп рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ HTML рдХреЛрдб рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд▓реЗрдЦ рдХрд╛ рдкрд╛рда RenderedArticle рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрдк рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЕрдкрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рдХреБрд▓ рдЖрдХрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкрд╛рда рдХрд╛ рдкреГрдердХреНрдХрд░рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрдЪреНрдЫреЗрдж рдФрд░ рд░реЗрдиреНрдбрд░реНрдбрдЖрд░реНрдЯрд┐рдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ-рд╕реЗ-рдПрдХ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред RenderedArticle object рдПрдХ рд╣реА рдирд┐рдХрд╛рдп рд╕рдореВрд╣ рдореЗрдВ Article Object рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдпрд╣рд╛рдБ RenderedArticle рдирд┐рдХрд╛рдп рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП config.yaml config рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ



 - kind: RenderedArticle connector: simplexml connector_options: xpath_to_nodes: "/blog/RenderedArticles/Article" style: element_centric property_map: - property: __key__ external_name: key export: - external_name: ParentArticle export_transform: transform.key_id_or_name_as_string_n(0) - external_name: key export_transform: transform.key_id_or_name_as_string_n(1) import_transform: transform.create_deep_key(('Article', 'ParentArticle'), ('RenderedArticle', transform.CURRENT_PROPERTY)) - property: html_body external_name: html-body
      
      







рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХреИрд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдлрд╝реАрд▓реНрдб рдмреИрдХрдЕрдк рдореЗрдВ рджреЛ рддрддреНрд╡реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдЖрдпрд╛рдд рдкрд░, рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рджреЛ рддрддреНрд╡реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ "рдЗрдХрдЯреНрдард╛" рд╣реИ - рдкреЗрд░реЗрдВрдЯрдЖрд░реНрдЯрд┐рдХрд▓ рдФрд░ рдХреБрдВрдЬреАред рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдо .key_id_or_name_as_string_n (0) рдХреЛрдб рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХреБрдВрдЬреА рдлрд╝реАрд▓реНрдб рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдВрдкреЛрдЬрд╝рд┐рдЯ рдХреБрдВрдЬреА рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдХ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред



рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрдкрдиреНрди XML рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



 <?xml version="1.0"?> <blog> <RenderedArticles> <Article> <ParentArticle>6</ParentArticle> <html-body><p>aaa bbb ccc</p></html-body> <key>7</key> </Article> <Article> <ParentArticle>8</ParentArticle> <html-body><p>ff gg hh</p></html-body> <key>9</key> </Article> </RenderedArticles> </blog>
      
      







рдЕрдм рд╣рдо ArticleComment рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдирд┐рд░реНрдпрд╛рдд-рдЖрдпрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдПрдХ рдкреЗрдбрд╝ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ "рдорд╛рддрд╛-рдкрд┐рддрд╛" рдЯрд┐рдкреНрдкрдгреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдореВрд▓ рдкреЛрд╕реНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИред



 - kind: ArticleComment connector: simplexml connector_options: xpath_to_nodes: "/blog/Comments/Comment" style: element_centric property_map: - property: __key__ external_name: key export_transform: transform.key_id_or_name_as_string import_transform: transform.create_deep_key(('Article', 'article'), ('ArticleComment', transform.CURRENT_PROPERTY)) - property: parent_comment external_name: parent-comment export_transform: transform.key_id_or_name_as_string import_transform: helpers.create_deep_key(('Article', 'article'), ('ArticleComment', transform.CURRENT_PROPERTY)) - property: article external_name: article export_transform: transform.key_id_or_name_as_string import_transform: transform.create_foreign_key('Article') - property: name external_name: name - property: body external_name: body
      
      







рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХрд╛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ parent_comment рдлрд╝реАрд▓реНрдб рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди transform.create_deep_key рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдореВрд▓реНрдп рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ:



  BadArgumentError: рдкреВрд░реНрдгрд╛рдВрдХ рдЖрдИрдбреА рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо 4 рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд;  рдХреЛрдИ рдирд╣реАрдВ (рдПрдХ рдирд╣реАрдВ рдЯрд╛рдЗрдк) рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред 


рдореИрдВрдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрдЧ рднреА рдмрдирд╛рдпрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореБрдЭреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИред рдЗрд╕ рдмрдЧ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, helpers.py рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдмрджрд▓рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рджреЗрддреЗ рд╣реИрдВред рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛ рдХрд╛рдо рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдореВрд▓реНрдп рдХреЛрдИ рдирд╣реАрдВ рд╣реИ:



 def create_deep_key(*path_info): f = transform.create_deep_key(*path_info) def create_deep_key_lambda(value, bulkload_state): if value is None: return None return f(value, bulkload_state) return create_deep_key_lambda
      
      





рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЕрдм рд╣рдо рд▓реЗрдЦ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрд╕ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо transform.create_foreign_key рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрд╕реА рддрд░рд╣ рд╕реЗ transform.create_deep_key рдкрджреНрдзрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд┐рд╢реНрддреЗ рдХреА рдЪреЗрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ред рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдмрдЧ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд░рд┐рдХрд╡рд░реА рдХреЗ рджреМрд░рд╛рди рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред



рдирд┐рд╖реНрдХрд░реНрд╖


рдмрд▓реНрдХ рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗред рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдШреЛрд╖рдгрд╛рдУрдВ рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдФрд░ рдПрд╕рдбреАрдХреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдЪреИрдВрдЬ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рднреА рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:



  - property: data external_name: data export_transform: base64.b64encode import_transform: transform.blobproperty_from_base64
      
      







рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо GAE-python-django рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред



рд╕рдВрджрд░реНрдн



All Articles