Ejemplo n.º 1
0
def update(product_id):
    resp = helpers.get_response(request) 
    product = helpers.get_by(glob.products, product_id)
    users.has_right_abort(resp, product['user_id'])
    resp = helpers.get_response(request)
    exclude_field = ['reservePrice', 'startPrice', 'id', 'user_id', 'user']
    null_fields = ['title', 'description', 'buyoutPrice', 'dateLength', 'dateStart']
    product = helpers.update_object(glob.products, product_id, resp, glob.products_path, null_fields=null_fields, exclude_fields=exclude_field)
    return show(product_id)
Ejemplo n.º 2
0
def _get_historical_data(start, end=None):
    if not end:
        end = start
    url = 'https://api.coindesk.com/v1/bpi/historical/close.json?start={}&end={}'.format(
        start, end
    )
    return get_response(url)
Ejemplo n.º 3
0
def delete_category(cat_id):
	resp = helpers.get_response(request)
	loginmanager.verify_token(resp)
	ret = Models().delete('categories', 'id', id=cat_id) # Rajouter un paramètre pour vérifier le token de l'utilisateur et le droit qu'il a de delete.
	if ret == False : 
		return 'KO', 401
	return 'OK', 200
Ejemplo n.º 4
0
 def get_current_price(cls, currency='USD'):
     url = 'https://api.coindesk.com/v1/bpi/currentprice/{}.json'.format(
         currency)
     data = get_response(url)
     price = Decimal(data['bpi'][currency]['rate_float'])
     return price.quantize(
         Decimal('.0001'))  #onyl go up to 4 decimal points
Ejemplo n.º 5
0
def get_bid(bid_id):
	resp = helpers.get_response(request)

	getBid = Models().getBy('bids', 'id', bid_id) 
	if getBid is None:
		return "Bid not found", 404
	return jsonify({'bid' : getBid[0].json()})
Ejemplo n.º 6
0
def update(user_id):
    resp = helpers.get_response(request)
    has_right_abort(resp, user_id)
    user = helpers.update_object(glob.users, user_id, resp, users_path, null_fields=['password'])
    u = copy.deepcopy(user)
    del u['password']
    return jsonify({"user": u}), 200
Ejemplo n.º 7
0
def get_current_price(currency='USD'):
    url = 'https://api.coindesk.com/v1/bpi/currentprice/{}.json'.format(
        currency
    )
    data = get_response(url)
    price = data['bpi'][currency]['rate']
    return Decimal(price)
Ejemplo n.º 8
0
def get_product(product_id):
    resp = helpers.get_response(request)

    product = Models().getBy("products", "id", product_id)  # Retourne une liste
    if product is None:
        return "Product not found", 404
    return jsonify({"product": product[0].json()})
Ejemplo n.º 9
0
def get_addr(addr_id):
	resp = helpers.get_response(request)

	addresses = Models().getBy('addresses', 'id', addr_id) 
	if addresses is None:
		return "Addresse not found", 404
	return jsonify({'addresse' : addresses[0].json()})
Ejemplo n.º 10
0
	def testProductDetails(self):
		'''
			Test spider extracts product details
		'''
		url = (
			'http://www.visions.ca/Catalogue/Category/Details.'
			'aspx?categoryId=498&productId=10168&sku=AGF310'
		)
		response = get_response('page1', url=url)
		details = self.spider.get_product_details(response).next()

		self.assertEqual(
			details,
			{
				'availability': True,
 				'breadcrumbs': 'Home/TV & Video/3D TV Glasses',
 				'category': 'Home/TV & Video/3D TV Glasses',
 				'image': (
 					'http://www.visions.ca/Images/Catalogue/Product'
 					'/English/AGF310_l_1.jpg'
 				),
 				'price': 9.99,
 				'product': 'LG Cinema 3D Glasses - Single Pair',
 				'url': url
 			}
		)
Ejemplo n.º 11
0
def delete_bid(bid_id):
	resp = helpers.get_response(request)
	loginmanager.verify_token(resp)
	ret = Models().delete('bids', 'id', id=bid_id)
	if ret == False : 
		return 'KO', 401
	return 'OK', 200
Ejemplo n.º 12
0
	def testPage1(self):
		''' Test extracting data from a single xgroup '''

		url = (
			'http://www.visions.ca/Catalogue/Category/Details'
			'.aspx?categoryId=2&productId=29446&sku=KT609'
		)
		response = get_response('test_details_runner_page1', url=url)

		group = XGroup(
			name='title',
			path=(
				'//div[contains(@class, "contentright")]/h2/a/font/text()',
    			'div[contains(@class, "catalogueTitle")]/h3/text()',
    			'//h1/span[contains(@id, "ProdTitle")]/text()'
			),
			process=lambda x: x.upper()
		)

		detail = detailsRunner(group, response=response)
		self.assertEqual(
			detail['title'],
			'KT-609 3D-COMPATIBLE 1080P FULL HD ANDROID TV MEDIA BOX - '
			'HORIZONTAL BLACK'
		)
Ejemplo n.º 13
0
def get_category(cat_id):
	resp = helpers.get_response(request)

	categories = Models().getBy('categories', 'id', cat_id) # Retourne une liste
	if categories is None:
		return "Category not found", 404
	return jsonify({'category' : categories[0].json()})
Ejemplo n.º 14
0
def get_pay(pay_id):
	resp = helpers.get_response(request)

	payments = Models().getBy('payments', 'id', pay_id) 
	if payments is None:
		return "Payment not found", 404
	return jsonify({'payment' : payments[0].json()})
Ejemplo n.º 15
0
def main():
    try:
        movie_file = get_movie_file()
    except FileNotFoundError:
        print('File not selected, exiting')
        return -1

    response = get_response(movie_file)
    if 'useragent is not valid' in response.text:
        print(response.text)
        return -1

    parsed = json.loads(response.content)
    if not parsed:
        print('Could not find subtitle')
        return -1

    print('Movie Found: %s' % parsed[0]['MovieName'])
    sub_response = requests.get(parsed[0]['SubDownloadLink'])
    print('Subtitle Found: %s' % parsed[0]['SubFileName'])
    movie_dir = os.path.dirname(movie_file)
    sub_name = parsed[0]['SubFileName']
    with open(os.path.join(movie_dir, sub_name), 'wb') as fsub:
        fsub.write(gzip.decompress(sub_response.content))
    print('Subtitle extracted to the movie folder')
    return 0
Ejemplo n.º 16
0
def destroy(product_id):
    resp = helpers.get_response(request) 
    product = helpers.get_by(glob.products, product_id)
    if product is None:
        return 'No such product', 400
    users.has_right_abort(resp, product['user_id'])
    helpers.delete_object(glob.products, product_id, products_path)
    return 'Delete ok', 200
Ejemplo n.º 17
0
def add_product():
    resp = helpers.get_response(request)
    allowed_fields = ['title', 'description', 'dateStart', 'dateLength', 'startPrice', 'buyoutPrice', 'reservePrice', 'imgUrl']
    mandatory_fields = ['title', 'description', 'dateStart', 'dateLength', 'startPrice']
    user = helpers.get_by(glob.users, resp['user_id'])
    association_field = [{'association_name': 'user_id', 'association_value': user['id']}]
    product = helpers.new_object(glob.products, resp, products_path, allowed_fields, mandatory_fields, associations=association_field)
    return show(product['id'])
Ejemplo n.º 18
0
def delete_product(product_id):
    resp = helpers.get_response(request)
    loginmanager.verify_token(resp)
    ret = Models().delete(
        "products", "id", id=product_id
    )  # Rajouter un paramètre pour vérifier le token de l'utilisateur et le droit qu'il a de delete.
    if ret == False:
        return "KO", 401
    return "OK", 200
Ejemplo n.º 19
0
def edit_product(product_id):
    resp = helpers.get_response(request)

    product = Models().getBy("products", "id", product_id)  # Retourne une liste
    if product is None:
        return "Product not found", 404
    loginmanager.has_right(product[0], resp=resp)
    product[0].edit(resp)
    product[0].save()
    return jsonify({"product": product[0].json()}), 200
Ejemplo n.º 20
0
def edit_bid(bid_id):
	resp = helpers.get_response(request)
	
	editBid = Models().getBy('bids', 'id', bid_id) 
	loginmanager.has_right(editBid[0], resp = resp)
	if editBid is None:
		return "Bid not found", 404
	editBid[0].edit(resp)
	editBid[0].save()
	return jsonify({'bid': editBid[0].json()}), 200
Ejemplo n.º 21
0
def edit_pay(pay_id):
	resp = helpers.get_response(request)
	
	payments = Models().getBy('payments', 'id', pay_id) 
	loginmanager.has_right(payments[0], resp = resp)
	if payments is None:
		return "Payment not found", 404
	payments[0].edit(resp)
	payments[0].save()
	return jsonify({'payment': payments[0].json()}), 200
Ejemplo n.º 22
0
def edit_addr(addr_id):
	resp = helpers.get_response(request)
	
	addresses = Models().getBy('addresses', 'id', addr_id) 
	loginmanager.has_right(addresses[0], resp = resp)
	if addresses is None:
		return "Addresse not found", 404
	addresses[0].edit(resp)
	addresses[0].save()
	return jsonify({'addresse': addresses[0].json()}), 200
Ejemplo n.º 23
0
def profil(user_id):
	resp = helpers.get_response(request) 
	user = Models().getBy('users', 'id', user_id) # Retourne une liste d'utilisateurs. Vu qu'on demande une ID, et que l'id est unique, on peut sans problème faire user[0] pour accéder au premier élément
	if user is None: # Si la liste retournée est vide, c'est que  aucun utilsiateur n'a cet id
		return 'User not found', 404
	if 'token' in resp:
		if loginmanager.has_right(user[0], resp['token']): # On vérifie le token 
			return jsonify({'status':'User connected', 'user':user[0].secured()}), 200 # On retourne le profil utilisateur en supprimant le champ "Mot de passe", c'est l'utilisateur qui consulte son propre profil
		return jsonify({'user' : user[0].public()}), 200 # On retourne le profil utilisateur, comme si l'utilisateur A voulait consulter le profil de l'utilisateur B
	else:
		return jsonify({'user' : user[0].public()}), 200
Ejemplo n.º 24
0
def login():
	resp = helpers.get_response(request)
	if not 'username' in resp or not 'password' in resp: # Si username et / ou password ne sont pas dans la requête, erreur
		return "Bad request, missing username or password in request", 400 # Retourne au client le code d'erreur 400
	user = loginmanager.check_credentials(resp['username'], resp['password']) # On vérifie les identifiants
	# print user.products
	if user != False:  # Si identifiants OK
		token = loginmanager.generate_token(user) # On génère le token de l'utilisateur, et on stock en session l'id et le token
		return jsonify({'status': 'Logged in successfully', 'token':token}), 200 # On retourne au client le token
	else:
		return 'Bad credentials', 401
Ejemplo n.º 25
0
    def testPage1(self):
        '''
			Test extraction using a single path and index==one
		'''
        url = ('http://www.visions.ca/catalogue/category/Details'
               '.aspx?categoryId=162&productId=4644&sku=KUBE2')
        paths = ('//div/span[contains(@id, "Shipping")]/text()')
        response = get_response('test_extract_helper_page1', url=url)

        shipping = extract_helper(response, paths)

        self.assertEqual(shipping, 'Free Shipping!')
Ejemplo n.º 26
0
def register():
    resp = helpers.get_response(request)
    if len(resp['password']) < 6:
    	return 'password too short', 406
    usersMatch = filter(lambda u: u['username'] == resp['username'], glob.users)
    if len(usersMatch) != 0 :
    	return 'Username already taken', 409
    allowed_fields = ['username', 'password', 'email', 'address1', 'address2', 'city', 'firstname', 'lastname', 'postalcode', 'country', 'token']
    mandatory_fields = ['username', 'password', 'email', 'address1', 'city', 'firstname', 'lastname', 'postalcode', 'country']
    special_fields = ['password', 'token']
    helpers.new_object(glob.users, resp, users_path, allowed_fields, mandatory_fields, special_fields)
    return 'Register successful', 201
Ejemplo n.º 27
0
def login():
    resp = helpers.get_response(request)
    mandatory_fields = ["username", "password"]
    helpers.verify_mandatory_field_form(mandatory_fields, resp)
    username = resp['username']
    password = resp['password']
    user = filter(lambda u: u['username'] == username, glob.users)
    if len(user) == 0:
        return 'No such username', 401	
    if password != base64.b64decode(user[0]['password']):
        return 'Wrong password', 403
    generate_token(user[0])
    return jsonify({'user_id': user[0]["id"], 'token': user[0]['token']}), 200
Ejemplo n.º 28
0
	def testPage1(self):
		'''
			Test extraction using a single path and index==one
		'''
		url = (
			'http://www.visions.ca/catalogue/category/Details'
			'.aspx?categoryId=162&productId=4644&sku=KUBE2'
		)
		paths = ('//div/span[contains(@id, "Shipping")]/text()')
		response = get_response('test_extract_helper_page1', url=url)

		shipping = extract_helper(response, paths)

		self.assertEqual(shipping, 'Free Shipping!')
Ejemplo n.º 29
0
    def testPage2(self):
        '''
			Test extraction using a multiple paths and index==one
		'''
        url = ('http://www.visions.ca/catalogue/category/Details'
               '.aspx?categoryId=162&productId=4644&sku=KUBE2')
        paths = ('//div/span[contains(@id, "price")]/a/text()'
                 '//div/span[contains(@id, "price")]/text()',
                 '//div[@class="productdetail-pricing"]/div/span[@id]/text()')
        response = get_response('test_extract_helper_page1', url=url)

        price = extract_helper(response, paths)

        self.assertEqual(price, '$398.00')
Ejemplo n.º 30
0
def search_products():
    resp = helpers.get_response(request)
    if 'query' not in resp:
        return 'You need to send a query param :(', 400
    regex = r""  + re.escape('seche')
    str = resp['query']
    products = []
    prods = glob.products
    for prod in prods:
        match = re.search(regex, prod['title'])
        match2 = re.search(regex, prod['description'])
        if match or match2:
            products.append(prod)
    return jsonify({'products' : products}), 200
Ejemplo n.º 31
0
	def testProductLinks2(self):
		'''
			Test spider extracts link to product page - bundles page
		'''
		url = 'http://www.visions.ca/Catalogue/Bundles/Default.aspx'

		response = get_response('product_page2', url=url)
		products = list(self.spider.parse_product(response))

		self.assertEqual(len(products), 1)
		self.assertEqual(
			products[0].url,
			'http://www.visions.ca/Catalogue/Bundles/Details.'
			'aspx?bundleId=2838'
		)
Ejemplo n.º 32
0
def show(user_id):
    resp = helpers.get_response(request)
    user = helpers.get_by(glob.users, user_id)
    if user is None:
        abort(make_response("User not found",400))
    u = copy.deepcopy(user)        
    del u['password']
    if not 'user_id' in resp or int(resp['user_id']) != user_id or not 'token' in resp or u['token'] != resp['token']: # Public profil
        del u['address1']
        del u['address2']
        del u['email']
        del u['firstname']
        del u['lastname']
        del u['token']
    if (len(u) != 0):
        return jsonify({'user': u})
    return 'User Not found', 401
Ejemplo n.º 33
0
	def testProductLinks(self):
		'''
			Test spider extracts link to product page
		'''
		url = (
			'http://www.visions.ca/Catalogue/Category/Product'
			'Results.aspx?categoryId=94&view='
		)

		response = get_response('product_page', url=url)
		products = list(self.spider.parse_product(response))

		self.assertEqual(len(products), 1)
		self.assertEqual(
			products[0].url,
			'http://www.visions.ca/Catalogue/Category/Details.'
			'aspx?categoryId=94&productId=8027&sku=CR2360'
		)
Ejemplo n.º 34
0
	def testSubCategories(self):
		'''
			Test that spider extracts link to one subcategory
		'''
		url = (
			'http://www.visions.ca/Catalogue/Category/Default.aspx'
			'?categoryId=368&menu=7'
		)

		response = get_response('subcat_page', url=url)
		subcategories = list(self.spider.parse_category(response))

		self.assertEqual(len(subcategories), 1)
		self.assertEqual(
			subcategories[0].url,
			'http://www.visions.ca/Catalogue/Category/Product'
			'Results.aspx?categoryId=144&view='
		)
Ejemplo n.º 35
0
	def testMainNav(self):
		'''
			Test extraction from the front/main page
		'''
		url = 'http://www.visions.ca/Default.aspx'
		response = get_response('front_page', url=url)
		subcategories = list(self.spider.parse(response))

		self.assertEqual(len(subcategories), 14)
		self.assertEqual(
			subcategories[0].url,
			'http://www.visions.ca/Catalogue/Category/'
			'Default.aspx?categoryId=2&menu=2'
		)
		self.assertEqual(
			subcategories[-1].url,
			'http://www.visions.ca/Catalogue/Bundles/Default.aspx'
		)
Ejemplo n.º 36
0
    def testPage1(self):
        ''' Test extracting data from a single xgroup '''

        url = ('http://www.visions.ca/Catalogue/Category/Details'
               '.aspx?categoryId=2&productId=29446&sku=KT609')
        response = get_response('test_details_runner_page1', url=url)

        group = XGroup(
            name='title',
            path=('//div[contains(@class, "contentright")]/h2/a/font/text()',
                  'div[contains(@class, "catalogueTitle")]/h3/text()',
                  '//h1/span[contains(@id, "ProdTitle")]/text()'),
            process=lambda x: x.upper())

        detail = detailsRunner(group, response=response)
        self.assertEqual(
            detail['title'],
            'KT-609 3D-COMPATIBLE 1080P FULL HD ANDROID TV MEDIA BOX - '
            'HORIZONTAL BLACK')
Ejemplo n.º 37
0
 def get_current_price(cls):
     data = get_response(cls.TICKER_URL)
     price = cls._current_price_extractor(data)
     open = cls._current_open_extractor(data)
     return (Decimal(price), Decimal(open))
Ejemplo n.º 38
0
def get_current_price():
    data = get_response(TICKER_URL)
    price = data['last']
    return Decimal(price)
Ejemplo n.º 39
0
def get_current_ask():
    data = get_response(TICKER_URL)
    price = data['ask']
    return Decimal(price)
Ejemplo n.º 40
0
def get_current_bid():
    data = get_response(TICKER_URL)
    price = data['bid']
    return Decimal(price)
Ejemplo n.º 41
0
 def get_current_ask(cls):
     data = get_response(cls.TICKER_URL)
     price = cls._current_ask_extractor(data)
     return Decimal(price)