84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| # -*- coding: utf-8 -*-
 | |
| # Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
 | |
| 
 | |
| from odoo import models, fields, api, _
 | |
| import urllib
 | |
| import re
 | |
| #from BeautifulSoup import BeautifulSoup
 | |
| from bs4 import BeautifulSoup
 | |
| import base64
 | |
| 
 | |
| 
 | |
| class bi_product_image(models.Model):
 | |
|     _name = "bi.product.image"
 | |
| 
 | |
|     product_id = fields.Many2one('product.template', 'Product')
 | |
|     name = fields.Char('Name')
 | |
|     color = fields.Integer('Color Index')
 | |
|     image = fields.Binary('Image')
 | |
| 
 | |
|     @api.multi
 | |
|     def set_image(self):
 | |
|         tmpl_id_bi = self.product_id
 | |
|         tmpl_id_bi.image_medium = self.image
 | |
|         return True
 | |
| 
 | |
| 
 | |
| class product_template(models.Model):
 | |
|     _inherit = "product.template"
 | |
| 
 | |
|     url = fields.Char('URL')
 | |
|     product_images_bi = fields.One2many('bi.product.image', 'product_id', 'Multiple Image For Product')
 | |
| 
 | |
|     @api.multi
 | |
|     def write(self, vals):
 | |
|         super(product_template, self).write(vals)
 | |
|         if vals.get('url'):
 | |
|             img = self.process_url(vals.get('url'), self.id)
 | |
|         return True
 | |
| 
 | |
|     @api.multi
 | |
|     def pre_process_url(self, raw_url):
 | |
|      if ' ' not in raw_url[-1]:
 | |
|         raw_url = raw_url.replace(' ', '%20')
 | |
|         return raw_url
 | |
|      elif ' ' in raw_url[-1]:
 | |
|         raw_url = raw_url[:-1]
 | |
|         raw_url = raw_url.replace(' ', '%20')
 | |
|         return raw_url
 | |
| 
 | |
|     @api.multi
 | |
|     def process_url(self, url, prod_temp_id_bi):
 | |
|         html_data = urllib.request.urlopen(url)
 | |
|         soup = BeautifulSoup(html_data)
 | |
|         images = []
 | |
|         for img in soup.findAll('img'):
 | |
|             images.append(img.get('src'))
 | |
|         if not images:
 | |
|             imgdata = base64.encodestring(urllib.request.urlopen(url).read())
 | |
|             file_name = url.split('/')[-1]
 | |
|             prod = self.env['bi.product.image'].create({
 | |
|                                           'product_id':prod_temp_id_bi,
 | |
|                                           'name':file_name,
 | |
|                                           'image':imgdata
 | |
|                                           })
 | |
|         for imgurl in images:
 | |
|             try:
 | |
|                 imgurl = self.pre_process_url(imgurl)
 | |
|                 imgdata = base64.encodestring(urllib2.request.urlopen(imgurl).read())
 | |
|                 file_name = imgurl.split('/')[-1]
 | |
|                 prod = self.env['bi.product.image'].create({
 | |
|                                               'product_id':prod_temp_id_bi,
 | |
|                                               'name':file_name,
 | |
|                                               'image':imgdata
 | |
|                                               })
 | |
|             except:
 | |
|                 pass
 | |
| 
 | |
|     @api.model
 | |
|     def create(self, vals):
 | |
|         res = super(product_template, self).create(vals)
 | |
|         if res.url:
 | |
|             img = self.process_url(vals.get('url'), res.id)
 | |
|         return res
 |