def test_create_user_on_metamask_login(self, session): user = User(id=2, address='0xC257274276a4E539741Ca11b590B9447B26A8051', username='******', blockchain_id=1) user.save() retrieved = User.get_by_id(user.id) assert retrieved == user
def test_uploaded_at_defaults_to_datetime(self, session): user = User(id=2, address='0xC257274276a4E539741Ca11b590B9447B26A8051', username='******', blockchain_id=1) user.save() assert bool(user.created_at) assert isinstance(user.created_at, dt.datetime)
def put(self): current_user = get_jwt_identity() user = User.get_user_from_jwt_token(current_user) if not user: return {'Error': 'Invalid token'}, 404 request_json = request.get_json() review_id = request_json.get('review_id') review = Review.get_by_id(review_id) if not review: return {'Error': 'Review not found.'}, 404 # TODO: add review vote submission page try: review_like = ReviewLike(dapp_id=review.dapp_id, user_id=user.id, review_id=review_id, helpful=1) review_like.save() review_like_schema = ReviewLikeSchema() serialized = review_like_schema.dump(review_like).data return serialized, 200 except Exception as e: print('ERROR!!!: {}'.format(e)) return {'Error': 'Cannot like review twice.'}, 404
def post(self): current_user = get_jwt_identity() user = User.get_user_from_jwt_token(current_user) if not user: return {'Error': 'Invalid token'}, 400 request_json = request.get_json() dapp_id = request_json.get('dapp_id') rating = request_json.get('rating') title = request_json.get('title') review = request_json.get('review') feature = request_json.get('feature') if not dapp_id or not rating or not title or not review: return {'Error': 'Required field is empty.'}, 400 if feature and not all([1 if x in Config.RATING_TYPES else 0 for x in feature.keys()]): return {'Error': 'Invalid featured rating fields.'}, 400 dapp = Dapp.get_by_id(dapp_id) try: celery.send_task('add_review_with_metrics', (user.address, dapp.address, user.id, request_json)) return {'state': 1, 'message': 'Review submitted successfully.', 'result': ''}, 200 except Exception as e: print('EXCEPTION!!!: {}'.format(e)) return {'state': 0, 'message': 'Failed to submit review.', 'result': ''}, 500
def put(self): current_user = get_jwt_identity() user = User.get_user_from_jwt_token(current_user) if not user: return {'Error': 'Invalid token'}, 404 request_json = request.get_json() review_id = request_json.get('review_id') review = Review.get_by_id(review_id) if not review: return {'Error': 'Review not found.'}, 404 try: review_like = (ReviewLike.query.filter_by(dapp_id=review.dapp_id, user_id=user.id, review_id=review_id) .first()) review_like.delete() return {'message': 'Review vote removed successfully.'}, 200 except Exception as e: print('ERROR!!!: {}'.format(e)) return {'Error': 'Cannot delete review vote.'}, 400
def initialize(db): """ Initialize data to testing session to satisfy foreign key constraints. """ blockchain = Blockchain(name='Bitcoin', symbol='BTC') block_interval = BlockInterval(blockchain_id=1, time_start=0, time_stop=100, block_start=10, block_stop=20) user = User(address='0xb9D5ef5c0Cb313118da2960aE0F988Fe98699a31', username='******', blockchain_id=1, s3_id='7f1badea-9922-490c-bac8-fe06fdfa55a4') category = Category(name='Game') dapp = Dapp(name='CryptoKitties', url='cryptokitties.co', address=['0xb1690c08e213a35ed9bab7b318de14420fb57d8c'], author=['Brown Estate'], email='*****@*****.**', logo_path='tmp.png', screenshot=['tmp1.png', 'tmp2.png'], tagline='Dapp tagline', description='Long descrption here.', category_id=1, blockchain_id=1, user_id=1, s3_id='0f0bedea-9922-490c-bac8-fe06fdfa55a4') review1 = Review(dapp_id=1, user_id=1, rating=1, title='Best Dapp Ever', review='Long review here.') review2 = Review(dapp_id=1, user_id=1, rating=1, title='Worst Dapp Ever', review='Very Long review here.') review_of_the_day = DailyItem(item_name='review_of_the_day', item_id=1) dapp_of_the_day = DailyItem(item_name='dapp_of_the_day', item_id=1) db.session.add(blockchain) db.session.add(block_interval) db.session.add(user) db.session.add(category) db.session.add(dapp) db.session.add(review1) db.session.add(review2) db.session.add(review_of_the_day) db.session.add(dapp_of_the_day) db.session.commit()
def delete(review_id): current_user = get_jwt_identity() user = User.get_user_from_jwt_token(current_user) if not user: return {'Error': 'Invalid token'}, 404 review = Review.get_by_id(review_id) if not review: return {'Error': 'Review does not exist.'}, 404 if user.id != review.user_id: return {'Error': 'You do not own this review.'}, 401 ReviewLike.query.filter_by(review_id=review_id).delete() Review.query.filter_by(id=review_id).delete() db.session.commit() return True, 200
def put(review_id): current_user = get_jwt_identity() user = User.get_user_from_jwt_token(current_user) if not user: return {'Error': 'Invalid token'}, 404 request_json = request.get_json() rating = request_json.get('rating') review_text = request_json.get('review') feature = request_json.get('feature') title = request_json.get('title') review = Review.get_by_id(review_id) if not review: return {'Error': 'Review does not exist.'}, 404 if rating: review.rating = rating if review_text: review.review = review_text if feature: review.feature = feature if title: review.title = title db.session.commit() review_schema = ReviewSchema() serialized = review_schema.dump(review).data return serialized, 200
def post(): try: request_json = request.get_json() if not validate_request(request_json, [ 'name', 'url', 'address', 'user_address', 'blockchain', 'category', 'author', 'email', 'logo', 'screenshots', 'tagline', 'description' ]): return {'Error': 'Missing required field.'}, 400 logo = request_json.get('logo') screenshots = request_json.get('screenshots') logo_base64_string = logo.get('image') logo_file_type = logo.get('file_type') address = request_json.get('address') # Validate logo logo_file_type = logo_file_type.lower() if logo_file_type else None logo_error = valdate_image_type(logo_base64_string, logo_file_type) if logo_error: return {'Logo Error': logo_error}, 400 # Validate max number of screenshots if len(screenshots) > 5: return { 'Error': 'Max number of screenshots allowed is 5.' }, 400 # Validate screenshots for s in screenshots: base64_string = s.get('image') file_type = s.get('file_type') file_type = file_type.lower() if file_type else None error = valdate_image_type(base64_string, file_type) if error: return {'Error': error}, 400 s3_client = client( 's3', aws_access_key_id=current_app.config['AWS_ACCESS_KEY_ID'], aws_secret_access_key=current_app. config['AWS_SECRET_ACCESS_KEY']) bucket = current_app.config['S3_BUCKET_NAME'] # Create user user_address = request_json.get('user_address') if not verify_eth_address(user_address): return {'Error': 'Ethereum address not valid.'}, 400 user = User.query.filter_by(address=user_address).first() # Upload image to S3 s3_id = str(uuid4()) if not user: user = User(address=user_address, username=user_address, blockchain_id=1, s3_id=s3_id) user.save() # Upload image to S3 s3_id = str(uuid4()) try: logo_path = upload_image_to_s3( s3_client, bucket, logo_base64_string, logo_file_type, path=f'dapp_submission/{s3_id}/logo') except Exception: return {'Error': 'Failed to upload image to S3.'}, 500 # Upload screenshots to S3 screenshot_names = [] try: for s in screenshots: base64_string = s.get('image') file_type = s.get('file_type') file_type = file_type.lower() if file_type else None screenshot_name = upload_image_to_s3( s3_client, bucket, base64_string, file_type, path=f'dapp_submission/{s3_id}/screenshots') screenshot_names.append(screenshot_name) except Exception: return {'Error': 'Failed to upload image to S3.'}, 500 dapp_submission = DappSubmission( name=request_json.get('name'), url=request_json.get('url'), address=address, blockchain_id=request_json.get('blockchain'), category_id=request_json.get('category'), user_id=user.id, author=request_json.get('author'), email=request_json.get('email'), logo_path=logo_path, screenshot=screenshot_names, tagline=request_json.get('tagline'), description=request_json.get('description'), whitepaper=request_json.get('whitepaper'), social_media=request_json.get('social_media'), s3_id=s3_id, status=DappSubmissionStatus.SUBMITTED.value) dapp_submission.save() #celery.send_task('update_contract_deployment_date', (dapp_submission.id, address)) dapp_submission_schema = DappSubmissionSchema() result = dapp_submission_schema.dump(dapp_submission).data return result, 200 except Exception as e: return {'Error': 'Failed to submit dapp: {}.'.format(e)}, 500