Exemple #1
0
	def get(self):
		self.response.headers['Content-Type'] = 'text/plain'
		
		sale_ids = []
		brands = defaultdict(dict)
		
		content = helper.fetch('http://m.gilt.com/pagegen_service/sale/mobile_sale_set')
		if content:
			sale_groups = json.loads(content).get('data').get('mobile_sale_set').get('sale_groups')
			active_sales = [sale_group.get('sales') for sale_group in sale_groups if sale_group.get('title') == 'Active Sales'][0]
			for sale_data in active_sales:
				sale_id = sale_data.get('id')
				sale_name = sale_data.get('name')
				sale_data['stores'] = [str(store.lower()) for store in sale_data['stores']]
				
				sale = Sale.create(sale_data)
				if sale:
					new_sale_msg = "Created sale %s - %s.\nhttp://%s/tasks/fetch/sale/%d\n\n" % \
						(sale_id, sale_name, self.request.host, sale_id)
				else:
					new_sale_msg = "Sale %s - %s already exists.\n\n" % (sale_id, sale_name)
				self.response.out.write(new_sale_msg)
				
				sale_ids.append(sale_id)
				
				for brand in sale_data.get('brands') or []:
					Brand.create(brand_id=brand.get('id'), name=brand.get('name'))

		for sale_id in sale_ids:
			task_name = TASK_NAME_FETCH_SALE % (TASK_QUEUE_FETCH_SALE, sale_id, datetime.now().microsecond)
			task = taskqueue.Task(url='/tasks/fetch/sale/%s' % (sale_id), \
									params={'brands': brands[sale_id]},
									name=task_name, method='GET')
		
			try:
				task.add(TASK_QUEUE_FETCH_SALE)
				task_msg = "Added task '%s' to task queue '%s'.\n"
			except TaskAlreadyExistsError:
				task_msg = "Task '%s' already exists in task queue '%s'.\n"
			except TombstonedTaskError:
				task_msg = "Task '%s' is tombstoned in task queue '%s'.\n"
			self.response.out.write("%s\n%s" % (task.url, task_msg % (task.name, TASK_QUEUE_FETCH_SALE)))
Exemple #2
0
	def get(self, sale_id):
		self.response.headers['Content-Type'] = 'text/plain'
		
		sale_id = int(sale_id)
		sale = Sale.lookup(sale_id)
		if not sale:
			self.response.out.write('Sale id %d not found.\n' % (sale_id))
			
		else:
			url = "%s/sale/mobile_sale_listing?sale_id=%d" % (API_SVC, sale_id)
			content = helper.fetch(url)
			products_data = json.loads(content)['data']['products']
			
			if products_data and len(products_data):
				brand_entities = [Brand.get_by_key_name(str(product['brand_id']))
									for product in products_data.values()]
				brands = dict([(int(brand.id), brand) for brand in brand_entities if brand])
							
				for product_id, product_data in products_data.items():
					brand_id = product_data['brand_id']
					brand = Brand.lookup(brand_id)
					
					product_id = int(product_id)
					product_data['name'] = mod_product_string(product_data['name'])
					product_data['description'] = mod_product_string(product_data['description'], '\n')
					product_data['categories'] = list(itertools.chain(*([k.split('_')
															for k in product_data['category_keys']])))
					product = Product.create(product_id, product_data, sale,
											brands.get(brand_id) or Brand.create(brand_id))
				
					if not product:
						self.response.out.write("Did not create product %d - %s.\n" %
							(product_id, product_data['name']))
					else:
						self.response.out.write("Created product %d - %s.\n" %
							(product_id, product_data['name']))
						prices = []
						sizes = []
						looks = product_data['looks']
						if looks:
							for look_data in looks:
								look_id = look_data['look_id']
								look = Look.create(look_id, look_data, product)
							
								if not look:
									self.response.out.write('\tDid not create Look for look id %d.\n' % look_id)
								
								else:
									self.response.out.write('\tCreated look id %d for product %d %s.\n' %
															(look_id, product_id, product.name))
														
									prices.extend([look_data.get(price_key) for price_key in PRICE_KEYS])
	
									skus = look_data.get('skus') or []
									for sku_data in skus:
										size = sku_data.get('size')
										if size:
											if size[0].isdigit():
												sizes.extend(size.split('/'))
											else:
												sizes.append(size)
										sku_id = sku_data['sku_id']
										sku = SKU.create(sku_id, sku_data, look or Look.get_by_key_name("%s" % look_id))
									
										if sku:
											self.response.out.write('\t\t- Created SKU %d.\n' % sku_id)
											prices.extend([sku_data.get(price_key) for price_key in PRICE_KEYS])
										else:
											self.response.out.write('\t\t- Did not create SKU %d.\n' % sku_id)
							
							prices = list(frozenset(filter(lambda price: price and price > 0, prices)))
							if prices:
								product.lowest_price = min(prices)
								product.highest_price = max(prices)
							if sizes:
								product.sizes = list(frozenset(sizes))
							product.put()
							
					self.response.out.write("\n\n")