def form_valid(self, form): try: meli = Meli(client_id=self.request.session['CLIENT_ID'], client_secret=self.request.session['CLIENT_SECRET'], access_token=self.request.session['ACCESS_TOKEN'], refresh_token=self.request.session['REFRESH_TOKEN']) except KeyError: return redirect('login') body = { "condition": form.cleaned_data['condition'], "warranty": form.cleaned_data['warranty'], "currency_id": form.cleaned_data['currency_id'], "accepts_mercadopago": form.cleaned_data['accepts_mercadopago'], "description": form.cleaned_data['description'], "listing_type_id": form.cleaned_data['listing_type_id'], "title": form.cleaned_data['title'], "available_quantity": form.cleaned_data['available_quantity'], "price": str(form.cleaned_data['price']), "buying_mode": form.cleaned_data['buying_mode'], "category_id": form.cleaned_data['category_id'] } response = meli.post("/items", body, {'access_token': meli.access_token}) if response.status_code != 201: form.add_error(field=None, error=response.content) return super().form_invalid(form) return super().form_valid(form)
def alterar_item(): idAnuncio = session.anuncio['id'] ## Faz Uploads das imagens e retorna Ids imagens = imagem_upload(idAnuncio) body = dict(title=session.anuncio['title'], price=session.anuncio['price'], available_quantity=session.anuncio['available_quantity'], shipping=session.anuncio['frete'], attributes=session.anuncio['attributes'], pictures=imagens, ) #### Buscar Variações #### variacao = buscar_variacao(idAnuncio,imagens) bodyvariacao = dict(title=session.anuncio['title'], shipping=session.anuncio['frete'], attributes=session.anuncio['attributes'], variations=variacao, ) listing_type_id = dict(id=session.anuncio['listing_type_id']) description = session.anuncio['description'] item_args = "items/%s" %(session.anuncio['item_id']) descricao_args = "%s/description" %(item_args) tipo_args = "%s/listing_type" %(item_args) if session.ACCESS_TOKEN: from meli import Meli meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=session.ACCESS_TOKEN, refresh_token=session.REFRESH_TOKEN) if session.anuncio['forma'] == 'Multiplos': item = meli.put(item_args, bodyvariacao, {'access_token':session.ACCESS_TOKEN}) else: item = meli.put(item_args, body, {'access_token':session.ACCESS_TOKEN}) desc = meli.put(descricao_args,description, {'access_token':session.ACCESS_TOKEN}) tipo = meli.post(tipo_args, listing_type_id, {'access_token':session.ACCESS_TOKEN}) if item.status_code != 200 or desc.status_code != 200: status = 'Falha na Atualização do Item : item:%s Descrição:%s' %(item,desc) else: status = 'Anuncio Atualizado com Sucesso....' else: status = 'Antes Faça o Login....' item = '' response.flash = status response.js = "$('#anunciospublicar').get(0).reload()" return
def anunciar_item(): idAnuncio = session.anuncio['id'] ## Faz Uploads das imagens e retorna Ids imagens = imagem_upload(idAnuncio) #### Buscar Variações #### variacao = buscar_variacao(idAnuncio,imagens) body = dict(title=session.anuncio['title'], category_id=session.anuncio['category_id'], price=session.anuncio['price'], currency_id=session.anuncio['currency_id'], available_quantity=session.anuncio['available_quantity'], buying_mode=session.anuncio['buying_mode'], listing_type_id=session.anuncio['listing_type_id'], condition=session.anuncio['condition'], warranty=session.anuncio['warranty'], description=session.anuncio['description'], shipping=session.anuncio['frete'], pictures=imagens, variations = variacao, ) bodyAtributo = dict(attributes=session.anuncio['attributes']) if session.ACCESS_TOKEN: from meli import Meli meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=session.ACCESS_TOKEN, refresh_token=session.REFRESH_TOKEN) item = meli.post("/items", body, {'access_token':session.ACCESS_TOKEN}) else: status = 'Antes Faça o Login....' item = '' import json if item.status_code == 201: status = 'Anunciado com Sucesso....' ### Salvando item_id no banco de dados xitem = json.loads(item.content) Anuncios[int(idAnuncio)] = dict(item_id=xitem['id']) ### Salvando Atributos no ML atrib_args = "items/%s" %(xitem['id']) atrib = meli.put(atrib_args, bodyAtributo, {'access_token':session.ACCESS_TOKEN}) if atrib.status_code != 200: status = 'Falha na Atualização do Item : item:%s ' %(atrib) else: status = 'Falha na Atualização do Item : item:%s ' %(item) response.flash = status response.js = "$('#anunciospublicar').get(0).reload()" return
def main(): meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) body = { "condition": "new", "warranty": "60 dias", "currency_id": "BRL", "accepts_mercadopago": True, "description": "Lindo Ray_Ban_Original_Wayfarer", "listing_type_id": "bronze", "title": "oculos Ray Ban Aviador Que Troca As Lentes Lancamento!", "available_quantity": 64, "price": 289, "subtitle": "Acompanha 3 Pares De Lentes!! Compra 100% Segura", "buying_mode": "buy_it_now", "category_id": "MLB5125", "pictures": [ {"source": "http://upload.wikimedia.org/wikipedia/commons/f/fd/Ray_Ban_Original_Wayfarer.jpg"}, {"source": "http://en.wikipedia.org/wiki/File:Teashades.gif"}] } response = meli.post("/items", body, {'access_token': meli.access_token}) print response.content
def main(): meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) body = { "condition": "new", "warranty": "60 dias", "currency_id": "BRL", "accepts_mercadopago": True, "description": "Lindo Ray_Ban_Original_Wayfarer", "listing_type_id": "bronze", "title": "oculos Ray Ban Aviador Que Troca As Lentes Lancamento!", "available_quantity": 64, "price": 289, "subtitle": "Acompanha 3 Pares De Lentes!! Compra 100% Segura", "buying_mode": "buy_it_now", "category_id": "MLB5125", "pictures": [{ "source": "http://upload.wikimedia.org/wikipedia/commons/f/fd/Ray_Ban_Original_Wayfarer.jpg" }, { "source": "http://en.wikipedia.org/wiki/File:Teashades.gif" }] } response = meli.post("/items", body, {'access_token': meli.access_token}) print response.content
class MeliTest(unittest.TestCase): def setUp(self): self.CLIENT_ID = "123" self.CLIENT_SECRET = "a secret" self.ACCESS_TOKEN = "a access_token" self.REFRESH_TOKEN = "a refresh_token" self.NEW_ACCESS_TOKEN = "a new access_token" self.NEW_REFRESH_TOKEN = "a new refresh_token" self.meli = Meli(client_id=self.CLIENT_ID, client_secret=self.CLIENT_SECRET, access_token=self.ACCESS_TOKEN, refresh_token=self.REFRESH_TOKEN) #constructor tests def testClientId(self): self.assertEqual(self.meli.client_id, self.CLIENT_ID) def testClientSecret(self): self.assertEqual(self.meli.client_secret, self.CLIENT_SECRET) def testAccessToken(self): self.assertEqual(self.meli.access_token, self.ACCESS_TOKEN) def testRefreshToken(self): self.assertEqual(self.meli.refresh_token, self.REFRESH_TOKEN) #auth_url tests def testAuthUrl(self): callback = "http://test.com/callback" self.assertTrue(re.search("^http", self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search("^https\:\/\/auth.mercadolibre.com\/authorization", self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search("redirect_uri", self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search(self.CLIENT_ID,self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search("response_type", self.meli.auth_url(redirect_URI=callback))) #Mock requests def mockGet(url, path=None, params={},headers={}, data=None, body=None): response = requests.Response() if re.search("/users/me", url): if "access_token" in params: response.status_code = 200 else: response.status_code = 403 elif re.search("/authorization", url): response.status_code = 200 else: response.status_code = 200 return response def mockPost(url, path=None, body=None, params={},headers={}, data=None): response = requests.Response() if re.search("/oauth/token", url): if "grant_type" not in params or "client_id" not in params or "client_secret" not in params: response.status_code = 403 else: if re.search("grant_type=authorization_code", params): content = {'access_token' : 'a access_token', 'refresh_token' : 'a refresh_token'} elif re.search("grant_type=refresh_token", params): content = {'access_token' : 'a new access_token', 'refresh_token' : 'a new refresh_token'} response._content = json.dumps(content) response.status_code = 200 else: if "access_token" in params: response.status_code = 200 else: response.status_code = 403 return response def mockPut(url, path=None, body=None, params={},headers={}, data=None): response = requests.Response() if "access_token" in params: response.status_code = 200 else: response.status_code = 403 return response def mockDelete(url, path=None, params={},headers={}, data=None, body=None): response = requests.Response() if "access_token" in params: response.status_code = 200 else: response.status_code = 403 return response requests.get = mockGet requests.post = mockPost requests.put = mockPut requests.delete = mockDelete #requests tests def testGet(self): response = self.meli.get(path="/items/test1") self.assertEqual(response.status_code, requests.codes.ok) def testPost(self): body = {"condition":"new", "warranty":"60 dias", "currency_id":"BRL", "accepts_mercadopago":True, "description":"Lindo Ray_Ban_Original_Wayfarer", "listing_type_id":"bronze", "title":"oculos Ray Ban Aviador Que Troca As Lentes Lancamento!", "available_quantity":64, "price":289, "subtitle":"Acompanha 3 Pares De Lentes!! Compra 100% Segura", "buying_mode":"buy_it_now", "category_id":"MLB5125", "pictures":[{"source":"http://upload.wikimedia.org/wikipedia/commons/f/fd/Ray_Ban_Original_Wayfarer.jpg"}, {"source":"http://en.wikipedia.org/wiki/File:Teashades.gif"}] } response = self.meli.post(path="/items",body=body,params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) def testPut(self): body = {"title":"oculos edicao especial!", "price":1000 } response = self.meli.put(path="/items/test1",body=body,params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) def testDelete(self): response = self.meli.delete(path="/questions/123",params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) def testWithoutAccessToken(self): response = self.meli.get(path="/users/me") self.assertEqual(response.status_code, requests.codes.forbidden) def testWithAccessToken(self): response = self.meli.get(path="/users/me",params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) #auth tests def testAuthorize(self): self.meli.access_token = None self.meli.refresh_token = None response = self.meli.authorize(code="a code from get param", redirect_URI="A redirect Uri") self.assertEqual(self.meli.access_token, self.ACCESS_TOKEN) self.assertEqual(self.meli.refresh_token, self.REFRESH_TOKEN) def testDoRefreshToken(self): response = self.meli.get_refresh_token() self.assertEqual(self.meli.access_token, self.NEW_ACCESS_TOKEN) self.assertEqual(self.meli.refresh_token, self.NEW_REFRESH_TOKEN)
class MeliTest(unittest.TestCase): def setUp(self): self.CLIENT_ID = "123" self.CLIENT_SECRET = "a secret" self.ACCESS_TOKEN = "a access_token" self.REFRESH_TOKEN = "a refresh_token" self.NEW_ACCESS_TOKEN = "a new access_token" self.NEW_REFRESH_TOKEN = "a new refresh_token" self.meli = Meli(client_id=self.CLIENT_ID, client_secret=self.CLIENT_SECRET, access_token=self.ACCESS_TOKEN, refresh_token=self.REFRESH_TOKEN) #constructor tests def testClientId(self): self.assertEqual(self.meli.client_id, self.CLIENT_ID) def testClientSecret(self): self.assertEqual(self.meli.client_secret, self.CLIENT_SECRET) def testAccessToken(self): self.assertEqual(self.meli.access_token, self.ACCESS_TOKEN) def testRefreshToken(self): self.assertEqual(self.meli.refresh_token, self.REFRESH_TOKEN) #auth_url tests def testAuthUrl(self): callback = "http://test.com/callback" self.assertTrue(re.search("^http", self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search("^https\:\/\/auth.mercadolibre.com\/authorization", self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search("redirect_uri", self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search(self.CLIENT_ID,self.meli.auth_url(redirect_URI=callback))) self.assertTrue(re.search("response_type", self.meli.auth_url(redirect_URI=callback))) #Mock requests def mockGet(url, path=None, params={},headers={}, data=None, body=None): response = requests.Response() if re.search("/users/me", url): if "access_token" in params: response.status_code = 200 else: response.status_code = 403 elif re.search("/authorization", url): response.status_code = 200 else: response.status_code = 200 return response def mockPost(url, path=None, body=None, params={},headers={}, data=None): response = requests.Response() if re.search("/oauth/token", url): if "grant_type" not in params or "client_id" not in params or "client_secret" not in params: response.status_code = 403 else: if re.search("grant_type=authorization_code", params): content = {'access_token' : 'a access_token', 'refresh_token' : 'a refresh_token'} elif re.search("grant_type=refresh_token", params): content = {'access_token' : 'a new access_token', 'refresh_token' : 'a new refresh_token'} response._content = json.dumps(content) response.status_code = 200 else: if "access_token" in params: response.status_code = 200 else: response.status_code = 403 return response def mockPut(url, path=None, body=None, params={},headers={}, data=None): response = requests.Response() if "access_token" in params: response.status_code = 200 else: response.status_code = 403 return response def mockDelete(url, path=None, params={},headers={}, data=None, body=None): response = requests.Response() if "access_token" in params: response.status_code = 200 else: response.status_code = 403 return response requests.get = mockGet requests.post = mockPost requests.put = mockPut requests.delete = mockDelete #requests tests def testGet(self): response = self.meli.get(path="/items/test1") self.assertEqual(response.status_code, requests.codes.ok) def testPost(self): body = {"condition":"new", "warranty":"60 dias", "currency_id":"BRL", "accepts_mercadopago":True, "description":"Lindo Ray_Ban_Original_Wayfarer", "listing_type_id":"bronze", "title":"oculos Ray Ban Aviador Que Troca As Lentes Lancamento!", "available_quantity":64, "price":289, "subtitle":"Acompanha 3 Pares De Lentes!! Compra 100% Segura", "buying_mode":"buy_it_now", "category_id":"MLB5125", "pictures":[{"source":"http://upload.wikimedia.org/wikipedia/commons/f/fd/Ray_Ban_Original_Wayfarer.jpg"}, {"source":"http://en.wikipedia.org/wiki/File:Teashades.gif"}] } response = self.meli.post(path="/items",body=body,params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) def testPut(self): body = {"title":"oculos edicao especial!", "price":1000 } response = self.meli.put(path="/items/test1",body=body,params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) def testDelete(self): response = self.meli.delete(path="/questions/123",params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) def testWithoutAccessToken(self): response = self.meli.get(path="/users/me") self.assertEqual(response.status_code, requests.codes.forbidden) def testWithAccessToken(self): response = self.meli.get(path="/users/me",params={'access_token' : self.meli.access_token}) self.assertEqual(response.status_code, requests.codes.ok) #auth tests def testAuthorize(self): self.meli.access_token = None self.meli.refresh_token = None response = self.meli.authorize(code="a code from get param", redirect_URI="A redirect Uri") self.assertEqual(self.meli.access_token, self.ACCESS_TOKEN) self.assertEqual(self.meli.refresh_token, self.REFRESH_TOKEN) def testDoRefreshToken(self): response = self.meli.get_refresh_token() self.assertEqual(self.meli.access_token, self.NEW_ACCESS_TOKEN) self.assertEqual(self.meli.refresh_token, self.NEW_REFRESH_TOKEN)
def main(): meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN,refresh_token=REFRESH_TOKEN) body = {"title":"Item De Teste - Por Favor, Não Ofertar! --kc:off","category_id":"MLB257111","price":10,"currency_id":"BRL","available_quantity":1,"buying_mode":"buy_it_now","listing_type_id":"bronze","condition":"new","description":"Item de Teste. Mercado Livre's PHP SDK.","video_id":"Q6dsRpVyyWs","warranty":"12 month","pictures":[{"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/IPhone_7_Plus_Jet_Black.svg/440px-IPhone_7_Plus_Jet_Black.svg.png"},{"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/IPhone7.jpg/440px-IPhone7.jpg"}],"attributes":[{"id":"EAN","value_name":"190198043566"},{"id":"COLOR","value_id":"52049"},{"id":"WEIGHT","value_name":"188g"},{"id":"SCREEN_SIZE","value_name":"4.7 polegadas"},{"id":"TOUCH_SCREEN","value_id":"242085"},{"id":"DIGITAL_CAMERA","value_id":"242085"},{"id":"GPS","value_id":"242085"},{"id":"MP3","value_id":"242085"},{"id":"OPERATING_SYSTEM","value_id":"296859"},{"id":"OPERATING_SYSTEM_VERSION","value_id":"iOS 10"},{"id":"DISPLAY_RESOLUTION","value_id":"1920 x 1080"},{"id":"BATTERY_CAPACITY","value_name":"3980 mAh"},{"id":"FRONT_CAMERA_RESOLUTION","value_name":"7 mpx"}]} response = meli.post("/items", body, {'access_token':meli.access_token}) print response.content