Esempio n. 1
0
File: user.py Progetto: VeredR/app
def getAllUsers():
    try:
        users = {}
        for useri in cache.scan_iter("user*"):
            if useri:
                user = {}
                useri = useri.decode('utf-8')
                imps = getUserImps(useri)
                reqs = getUserReqs(useri)
                key = useri[5:]
                user = {
                    key: {
                        "user-name": key,
                        "impressions": imps,
                        "ad-requests": reqs
                    }
                }
                users.update(user)
            elif useri is None:
                break
        if users:
            return users
        elif not users:
            return -1
    except Exception as e:

        return errors.error_response(412, e)
Esempio n. 2
0
File: app.py Progetto: VeredR/app
def saveAdReqs(userName,sdk):
    try:
        user.saveUserReqs(userName)
        sdkModel.saveSdkReqs(sdk)
        return True
    except Exception as e:
        return errors.error_response(e) 
Esempio n. 3
0
def getAllSdks():
    try:
        sdks = {}
        for sdki in cache.scan_iter("sdk*"):
            sdk = {}
            sdki = sdki.decode('utf-8')
            imps = getSdkImps(sdki)
            reqs = getSdkReqs(sdki)
            key = sdki[4:]
            sdk = {
                key: {
                    "sdk-version": key,
                    "impressions": imps,
                    "ad-requests": reqs
                }
            }
            sdks.update(sdk)

        if sdks:
            return sdks
        elif not sdks:
            return -1

    except Exception as e:
        return errors.error_response(412, e)
Esempio n. 4
0
File: app.py Progetto: VeredR/app
def saveImpression(userName,sdk):
    try:
        user.saveUserImps(userName)
        sdkModel.saveSdkImps(sdk)
        return True
    except Exception as e:
        return errors.error_response(e) 
Esempio n. 5
0
def get_book_api(user_id, book_id):
    user = User.query.get_or_404(user_id)

    book = Book.query.filter_by(owner_id=user_id, id=book_id).first()
    if book is None:
        return error_response(404, "book {} not found".format(book_id))

    return jsonify(book.to_dict())
Esempio n. 6
0
def saveSdkReqs(sdk):
    try:
        if cache.exists('sdk:' + sdk):
            cache.hincrby('sdk:' + sdk, 'requests', 1)
        elif not cache.exists('sdk:' + sdk):
            cache.hincrby('sdk:' + sdk, 'requests', 1)
            cache.hset('sdk:' + sdk, 'impressions', 0)
    except Exception as e:
        return errors.error_response(412, str(e))
Esempio n. 7
0
File: user.py Progetto: VeredR/app
def saveUserImps(user):
    try:
        if cache.exists('user:'******'user:'******'impressions', 1)
        elif not cache.exists('user:'******'user:'******'impressions', 1)
            cache.hincrby('user:'******'requests', 0)
    except Exception as e:
        return errors.error_response(412, e)
Esempio n. 8
0
File: app.py Progetto: VeredR/app
def sendRequest():
    try:
        url = "https://6u3td6zfza.execute-api.us-east-2.amazonaws.com/prod/ad/vast"
        r = {}
        r = requests.get(url)
        
        return r.content.decode('utf8')
    except requests.exceptions.ConnectionError as e:
        if not r: 
            return errors.error_response(e.errno,e.strerror)  
Esempio n. 9
0
def handle_file_upload(file_storage: FileStorage, upload_type: str):
    filename, file_extension = os.path.splitext(file_storage.filename)
    file_uuid = f'{str(uuid.uuid4())}_{filename}'

    log.info(f'Save file {file_uuid}')
    original_filename = config.custom_input_file(
        f'{file_uuid}{file_extension}')
    csv_filename = config.custom_input_file(f'{file_uuid}.csv')
    file_storage.save(original_filename)

    log.info(f'Extract {upload_type}')

    data = None
    detected_language = None

    try:
        if upload_type == CSV_FILE:
            data = pd.read_csv(original_filename)
        elif upload_type == TXT_FILE:
            data = convert_txt_to_csv(original_filename)
        elif upload_type == WHATS_APP_TXT_FILE:
            data = convert_whats_app_to_csv(original_filename)
        elif upload_type == ZIP_FILE:
            data = DirectoryAnalytics(original_filename).pandas_data
        else:
            error_response(f"{file_extension} not supported yet")

        sample_text = " ".join(map(str, data.iloc[0].tolist()))
        detected_language = iso639.to_name(detect(sample_text)).lower()
    except Exception as e:
        upload_error_handler(e, original_filename, upload_type)

    if upload_type != CSV_FILE:
        log.info(f'Remove file: {original_filename}')
        os.remove(original_filename)
        data.to_csv(csv_filename)

    return {
        'cols': [col for col in data.columns],
        'filename': file_uuid,
        'language': detected_language,
        'recommendationSet': calculate_n_clusters_by_category(data.shape[0])
    }
Esempio n. 10
0
def get_elections():
    """
    Get all the election cycles from 2019-2020
    :return: list or set of JSON objects containing individual election cycle information
    """
    try:
        election_shape = redis.getAnyShape("elections")
        if not election_shape:
            return empty_response("Elections")
        return jsonify(election_shape)
    except Exception as error:
        return error_response(f"{error}")
Esempio n. 11
0
def get_metadata():
    """
    Get 
    :return: JSON containing metadata
    """
    try:
        metadata_shape = redis.getAnyShape("metadata")
        if not metadata_shape:
            return empty_response("Metadata")
        return jsonify(metadata_shape)
    except Exception as error:
        return error_response(f"{error}")
Esempio n. 12
0
def get_referendums():
    """
    Get all referendums from current election cycle
    :return: JSON containing referendum data
    """
    try:
        referendums_shape = redis.getAnyShape("referendums")
        if not referendums_shape:
            return empty_response("Referendums")
        return jsonify(referendums_shape)
    except Exception as error:
        return error_response(f"{error}")
Esempio n. 13
0
def create_candidate():
    data = request.get_json()
    if "name" not in data:
        return error_response(400, "Name not found")
    candidate_name = data["name"]
    candidate = Candidate.query.filter_by(name=candidate_name).first()
    status_code = 200
    if not candidate:
        candidate = Candidate(name=candidate_name)
        db.session.add(candidate)
        db.session.commit()
        status_code = 201
    return jsonify(candidate.serialize()), status_code
Esempio n. 14
0
def get_committees(serve_fake=True):
    """
    Get all the committees from the current election period
    :return: list or set of JSON objects containing individual candidate information
    """
    if serve_fake:
        return jsonify({"Committees": fake_data.get_committees_shape()})
    try:
        response = redis.getAnyShape("Committees")
        if not response:
            return empty_response("Committees")
        return jsonify({"Committees": json.loads(response)})
    except Exception as error:
        return error_response(f"{error}")
Esempio n. 15
0
    def __init__(self, settings):
        data_source = settings['city']
        if data_source not in [
                'amsterdam', 'athens', 'barcelona', 'berlin', 'bologna',
                'dublin', 'geneva', 'hongkong', 'westernaustralia'
        ]:
            error_response(f'{data_source} does not exist')

        CsvDataHandler.__init__(self, f'AirBnBDB{data_source}',
                                f'{data_source}_listings_details.csv')

        self.HAS_MULTIPLE_DATA_SOURCES = True
        self.DATA_SOURCE = data_source
        self.PRE_LOAD_UUID = f'AirBnB-Demo-{data_source}'

        self.df = self.df[:4_000]
        self.saved_item_to_cluster = [
            i + j + k + l for i, j, k, l in zip(
                self.clean_up_df_text('description'),
                self.clean_up_df_text('space'),
                self.clean_up_df_text('neighborhood_overview'),
                self.clean_up_df_text('transit'))
        ]
Esempio n. 16
0
def get_total_contributions(serve_fake=True):
    """
    Query redis to get the total amount of monies spent
    :return: int representing the total for (either all time or current election)
    """
    if serve_fake:
        return jsonify({"TotalContributions": 100000})
    try:
        response = redis.getAnyShape("Total Contributions")
        if not response:
            return empty_response("TotalContributions")
        return jsonify({"TotalContributions": json.loads(response)})
    except Exception as error:
        return error_response(f"{error}")
Esempio n. 17
0
File: app.py Progetto: VeredR/app
def GetStats():
    try:
        if "filterType" in request.args:
            if request.args["filterType"] == 'user':
               users = user.getAllUsers()
               if users != -1:
                    for i in users:
                        imps = users[i]["impressions"]
                        reqs = users[i]["ad-requests"]
                        if int(reqs) != 0:
                            fillRate = imps / reqs
                            users[i].update({"fill-rate":float(fillRate)})
                        elif int(reqs) == 0:
                            users.pop(i)
                    return app.make_response(rv=jsonify(users))
               elif users == -1:
                   return errors.error_response(412,"no users to calculate")
                    
            elif request.args["filterType"] == "sdk":
                sdks = sdkModel.getAllSdks()
                if sdks:
                    for i in sdks:
                        imps = sdks[i]["impressions"]
                        reqs = sdks[i]["ad-requests"]
                        if int(reqs) != 0:
                            fillRate = int(imps) / int(reqs)
                            sdks[i].update({"fill-rate":float(fillRate)})
                        elif int(reqs) == 0:
                            sdks.pop(i)
                    return app.make_response(rv=jsonify(sdks))
                elif sdks == -1:
                    errors.error_response(412,"no sdks to calculate")
                
            
    except Exception as e:
        return errors.error_response(412,e)
Esempio n. 18
0
File: app.py Progetto: VeredR/app
def GetAd():
    try:
        if len(request.args) == 5 and 'sdk' in request.args and "user" in request.args: 
            req = sendRequest()
            if req:# XML in a VAST format in a json format
                if saveAdReqs(request.args['user'],request.args['sdk']):
                    return app.make_response(rv = req)
            elif not req:
                return errors.error_response(412,"No XML VAST Retrived")
        elif len(request.args) != 5 or not "user"  in request.args or not "sdk" in request.args:
            return errors.bad_request("wrong input in request or missing")

    except Exception as e:
        
        return errors.bad_request(str(e))
Esempio n. 19
0
def upload_error_handler(e, original_filename, upload_type):
    log.error(f'Remove file due to an error: {original_filename}')
    os.remove(original_filename)
    log.error('An exception occurred: %r', e)

    if upload_type == CSV_FILE:
        error_response(f"Currenty only ','-separated files are supported")
    if upload_type == ZIP_FILE:
        error_response(f"Zip is empty. It only supports: {FILTER_OPTION_LIST}")
    error_response(f"Wrong data format")
Esempio n. 20
0
def get_candidates(serve_fake=False):
    """
    Get all the candidates from the current election period or
    a specific candidate
    :param candidate_id: unique identifier associated with each candidate {election-title;cand-name;election-date}
    :type candidate_id: string
    :return: data on all candidates or for one specific candidate
    :rtype: JSON
    """
    try:
        candidate_shape = redis.getAnyShape("candidates")
        if not candidate_shape:
            return empty_response("Candidates")
        return jsonify(candidate_shape)
    except Exception as error:
        return error_response(f"{error}")
Esempio n. 21
0
def token_auth_error():
    return error_response(401)
Esempio n. 22
0
def basic_auth_error():
    return error_response(401)
Esempio n. 23
0
def get_by_candidate(candidate_name):
    candidate = Candidate.query.filter_by(name=candidate_name).first()
    if not candidate:
        return error_response(404, "Candidate not found")
    return jsonify(candidate.serialize()), 200
Esempio n. 24
0
def token_auth_error():
    return error_response(401, 'Неправильные креденшиалы')
Esempio n. 25
0
 def not_found():
     return error_response(404, 'Not found')
Esempio n. 26
0
class FizzBuzzResponse(BaseModel):
    passed: bool = True
    message: str = ''


@app.exception_handler(ApiError)
async def api_error_handler(request, err: ApiError):
    raise HTTPException(status_code=err.status_code,
                        detail=f'{err.detail}\n{err.reason}')


@app.post("/check_fizzbuzz",
          response_model=FizzBuzzRequest,
          responses=error_response([
              DontSetDummyParameter, InvalidFizzBuzzInput, WrongFizzBuzzAnswer
          ]))
def check_fizzbuzz(req: FizzBuzzRequest):
    if req.dummy:
        # 実際は validator でやると綺麗
        raise DontSetDummyParameter()
    try:
        expected = fizzbuzz(req.input)
    except ValueError:
        # 実際は validator でやると綺麗
        raise InvalidFizzBuzzInput(reason=f'{req.input} is invalid range.')
    if expected != req.answer:
        raise WrongFizzBuzzAnswer(
            reason=f'`{req.answer}` is wrong. Expected: `{expected}`')
    return FizzBuzzResponse(message='Good!')