It's basically the equivalent of a Null Pointer exception. This syntax: lambda x: x.someMethod()
Is an inline anonymous function call. If x is None as opposed to blank String, you will not be able to call methods on it. On Thu, Dec 10, 2009 at 1:45 PM, Dominik Steiner < [email protected]> wrote: > Thanks Ikai for the fast response, > > yes, some unicode characters might be the issue here as my data is in > Spanish. I tried your suggestion and now have an exporter.py that looks like > this > > from google.appengine.ext import db > > class Product(db.Model): > userId = db.StringProperty() > name = db.StringProperty() > shop = db.StringProperty() > brand = db.StringProperty() > model = db.StringProperty() > contact = db.StringProperty() > imageId = db.StringProperty() > userNickName = db.StringProperty() > price = db.FloatProperty() > registeredDate = db.DateProperty() > validUntilDate = db.DateProperty() > ratingCount = db.IntegerProperty() > ratingTotal = db.IntegerProperty() > rating = db.IntegerProperty() > commentCount = db.IntegerProperty() > description = db.TextProperty() > > from google.appengine.ext import db > from google.appengine.tools import bulkloader > > class ProductExporter(bulkloader.Exporter): > def __init__(self): > bulkloader.Exporter.__init__(self, 'Product', > [('name', lambda x: x.decode('utf-8'), > None), > ('userId', str, None), > ('shop', lambda x: x.decode('utf-8'), > None). > ('brand', lambda x: > x.decode('utf-8'), None), > ('model', lambda x: > x.decode('utf-8'), None), > ('contact', lambda x: > x.decode('utf-8'), None), > ('imageId', str, None), > ('userNickName', lambda x: > x.decode('utf-8'), None), > ('price', str, None), > ('registeredDate', str, None), > ('validUntilDate', str, None), > ('ratingCount', str, None), > ('ratingTotal', str, None), > ('rating', str, None), > ('commentCount', str, None), > ('description', lambda x: > x.decode('utf-8'), None) > ]) > exporters = [ProductExporter] > > > and I now get the following error (but at least it seems that it had been > downloading for a while before throwing that error) > > Traceback (most recent call last): > File "/usr/local/bin/appcfg.py", line 60, in <module> > run_file(__file__, globals()) > File "/usr/local/bin/appcfg.py", line 57, in run_file > execfile(script_path, globals_) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py", > line 2548, in <module> > main(sys.argv) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py", > line 2539, in main > result = AppCfgApp(argv).Run() > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py", > line 1640, in Run > self.action(self) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py", > line 2427, in __call__ > return method() > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py", > line 2293, in PerformDownload > run_fn(args) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py", > line 2215, in RunBulkloader > sys.exit(bulkloader.Run(arg_dict)) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 3894, in Run > return _PerformBulkload(arg_dict) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 3800, in _PerformBulkload > return_code = app.Run() > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 3158, in Run > self.progress_thread.WorkFinished() > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 2207, in WorkFinished > exporter.output_entities(self.result_db.AllEntities()) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 2788, in output_entities > for entity in entity_generator) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 2788, in <genexpr> > for entity in entity_generator) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 2769, in __SerializeEntity > encoding = self.__EncodeEntity(entity) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 2757, in __EncodeEntity > writer.writerow(self.__ExtractProperties(entity)) > File > "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", > line 2738, in __ExtractProperties > encoding.append(fn(entity[name])) > File "exporter.py", line 30, in <lambda> > ('brand', lambda x: x.decode('utf-8'), None), > AttributeError: 'NoneType' object has no attribute 'decode' > > Do you have any idea of what that could be? > > Thanks again for your help. > > Dominik > > Interesting. Do you have some unicode characters in any fields? There's a > snippet on the bulk loader page about how to handle these characters in your > Importer: > > http://code.google.com/appengine/docs/python/tools/uploadingdata.html > > import datetime > from google.appengine.ext import db > from google.appengine.tools import bulkloader > import models > > class AlbumLoader(bulkloader.Loader): > def __init__(self): > bulkloader.Loader.__init__(self, 'Album', > [('title', lambda x: x.decode('utf-8')), > ('artist', lambda x: > x.decode('utf-8')), > ('publication_date', > lambda x: > datetime.datetime.strptime(x, '%m/%d/%Y').date()), > ('length_in_minutes', int) > ]) > > loaders = [AlbumLoader] > > Your error may be caused by UTF-8/ASCII incompatibilities, and this is > where I would start looking. > > On Wed, Dec 9, 2009 at 8:26 PM, Dominik Steiner < > [email protected]> wrote: > >> Hi Ikai, >> >> I followed the instructions in the cook book for the python uploader/ >> downloader in order to be able to download and backup the data of my >> java application. >> >> As already posted in the cook book article, I got the following >> situation: >> >> "I would love to be able to download data in order to backup the data >> of my application and I tried your steps. One thing that didn't work >> for me was the line >> >> appcfg.py --server=python.latest.appid.appspot.com download_data >> exporter --filename=data.csv --kind=Thing --config_file=exporter/ >> thing_exporter.py >> >> but had to write >> >> appcfg.py --server=python.latest.xelavos.appspot.com download_data -- >> filename=data.csv --kind=Thing --config_file=exporter/ >> thing_exporter.py path/to/my/pythondirectory >> >> Then after being able to launch the exporter i got the following error >> after a while of downloading >> >> .[INFO ] Product: No descending index on __key__, performing serial >> download >> ......................................... >> Traceback (most recent call last): >> File "/usr/local/bin/appcfg.py", line 60, in >> run_file(__file__, globals()) >> File "/usr/local/bin/appcfg.py", line 57, in run_file >> execfile(script_path, globals_) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/appcfg.py", line 2548, in >> main(sys.argv) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/appcfg.py", line 2539, in main >> result = AppCfgApp(argv).Run() >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/appcfg.py", line 1640, in Run >> self.action(self) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/appcfg.py", line 2427, in __call__ >> return method() >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/appcfg.py", line 2293, in PerformDownload >> run_fn(args) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/appcfg.py", line 2215, in RunBulkloader >> sys.exit(bulkloader.Run(arg_dict)) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 3894, in Run >> return _PerformBulkload(arg_dict) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 3800, in _PerformBulkload >> return_code = app.Run() >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 3158, in Run >> self.progress_thread.WorkFinished() >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 2207, in WorkFinished >> exporter.output_entities(self.result_db.AllEntities()) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 2788, in output_entities >> for entity in entity_generator) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 2788, in >> for entity in entity_generator) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 2769, in __SerializeEntity >> encoding = self.__EncodeEntity(entity) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 2757, in __EncodeEntity >> writer.writerow(self.__ExtractProperties(entity)) >> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/ >> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/ >> google/appengine/tools/bulkloader.py", line 2738, in >> __ExtractProperties >> encoding.append(fn(entity[name])) >> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in >> position 7: ordinal not in range(128) >> " >> >> Do you know what this error means and how i can fix it? >> >> Thanks for any help >> >> Dominik >> >> -- >> >> You received this message because you are subscribed to the Google Groups >> "Google App Engine for Java" group. >> To post to this group, send email to >> [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<google-appengine-java%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/google-appengine-java?hl=en. >> >> >> > > > -- > Ikai Lan > Developer Programs Engineer, Google App Engine > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to > [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to > [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-appengine-java%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > -- Ikai Lan Developer Programs Engineer, Google App Engine -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.
