I'm trying to get returned value from pipeline. I'm using yield generator to generate item.
And this is my code.
def get_or_create(model):
model_class = type(model)
created = False
try:
obj = model_class.objects.get(product_company=model.product_company, barcode=model.barcode)
except model_class.DoesNotExist:
created = True
obj = model # DjangoItem created a model for us.
obj.save()
return (obj, created)
def update_model(destination, source, commit=True):
pk = destination.pk
source_dict = model_to_dict(source)
for (key, value) in source_dict.items():
setattr(destination, key, value)
setattr(destination, 'pk', pk)
if commit:
destination.save()
return destination
class ProductItemPipeline(object):
def process_item(self, item, spider):
if isinstance(item, ProductItem):
item_model = item.instance
model, created = get_or_create(item_model)
item['cover_photo'] = item['files'][0]['path']
if created:
item.save()
for image in item['files']:
imageItem = ProductImageItem(image=image['path'], product=model)
imageItem.save()
for comment in item['comments']:
commentItem = CommentItem(comment=comment.comment, product=model)
commentItem.save()
return model
Also this is my spider.
item = ProductItem(name=name, price=price, barcode=barcode, file_urls=objectImages, product_url=response.url,product_company=company, comments = comments)
product = yield item
print type(product)
print "yield product"
And product type is returning nonetype
You don't understand python
yield. You should useyieldlikereturnfor return some function result. You can find more information about generators in this articleSo your code will look like