def main(pool_name: str = _YESTERDAY, users_json_filters: str = '', limit: str = '20') -> None: """Create a pool of use cases and store them in MongoDB.""" users_filters = json.loads( users_json_filters) if users_json_filters else _DEFAULT_USERS_FILTER user_iterator = _USER_DB.user.find(users_filters).limit(int(limit)) for user_index, user_dict in enumerate(user_iterator): use_case_proto = privacy.user_to_use_case(user_dict, pool_name, user_index) if not use_case_proto: continue use_case = json_format.MessageToDict(use_case_proto) use_case['_id'] = use_case.pop('useCaseId') try: _DB.use_case.insert_one(use_case) except errors.DuplicateKeyError: _DB.use_case.replace_one({'_id': use_case['_id']}, use_case) if _SLACK_CREATE_POOL_URL: pool_url = f'{_BASE_URL}/eval?poolName={parse.quote(pool_name)}' requests.post( _SLACK_CREATE_POOL_URL, json={ 'text': f'A new use cases pool is ready for evaluation: <{pool_url}|{pool_name}>', })
def main(pool_name=_YESTERDAY, users_json_filters=None, limit=20): """Create a pool of use cases and store them in MongoDB.""" users_filters = json.loads( users_json_filters) if users_json_filters else _DEFAULT_USERS_FILTER user_iterator = _USER_DB.user.find(users_filters).limit(int(limit)) for user_index, user_dict in enumerate(user_iterator): use_case_proto = privacy.user_to_use_case(user_dict, pool_name, user_index) use_case = json_format.MessageToDict(use_case_proto) use_case['_id'] = use_case.pop('useCaseId') try: _DB.use_case.insert_one(use_case) except pymongo.errors.DuplicateKeyError: _DB.use_case.replace_one({'_id': use_case['_id']}, use_case) if _SLACK_CREATE_POOL_URL: requests.post( _SLACK_CREATE_POOL_URL, json={ 'text': 'A new use cases pool is ready for evaluation: <{}|{}>'.format( '{}/eval?poolName={}'.format(_BASE_URL, parse.quote(pool_name)), pool_name) })
def create_use_case(request: use_case_pb2.UseCaseCreateRequest, requester_email: str) \ -> use_case_pb2.UseCase: """Create a use case from a user.""" database = flask.current_app.config['EVAL_DATABASE'] user_database = flask.current_app.config['USER_DATABASE'] identifier = request.WhichOneof('identifier') if not identifier: flask.abort(400, "Il manque un identifiant pour créer le cas d'usage.") if request.email: _log_request(request.email, requester_email, database) query = {'hashedEmail': auth.hash_user_email(request.email)} elif request.ticket_id: query = {'supportTickets.ticketId': request.ticket_id} else: query = {'_id': objectid.ObjectId(request.user_id)} # Find user. user_dict = user_database.user.find_one(query) if not user_dict: flask.abort( 404, f'Aucun utilisateur avec l\'identifiant "{getattr(request, identifier)}" ' f"({identifier}) n\'a été trouvé.") # Find next free index in use case pool. last_use_case_in_pool = database.use_case.find( { 'poolName': request.pool_name }, { '_id': 0, 'indexInPool': 1 }, ).sort('indexInPool', pymongo.DESCENDING).limit(1) next_index = next( (u.get('indexInPool', 0) for u in last_use_case_in_pool), -1) + 1 # Convert user to use case. use_case_proto = privacy.user_to_use_case(user_dict, request.pool_name, next_index) if not use_case_proto: flask.abort(500, 'Impossible to read user data.') if not request.pool_name: return use_case_proto # Save use case. use_case = json_format.MessageToDict(use_case_proto) use_case['_id'] = use_case.pop('useCaseId') database.use_case.insert_one(use_case) return use_case_proto
def main(pool_name: str = _YESTERDAY, users_json_filters: str = '', limit: str = '20') -> None: """Create a pool of use cases and store them in MongoDB.""" stats_db, user_db, eval_db = mongo.get_connections_from_env() user_counts = diagnostic.get_users_counts(stats_db) users_filters = json.loads( users_json_filters) if users_json_filters else _DEFAULT_USERS_FILTER user_iterator = user_db.user.find(users_filters).limit(int(limit)) num_cases = 0 for user_index, user_dict in enumerate(user_iterator): use_case_proto = privacy.user_to_use_case(user_dict, pool_name, user_index) if not use_case_proto: continue if user_counts and user_counts.frequent_firstnames: use_case_proto.user_data.profile.name = _pick_random( user_counts.frequent_firstnames) use_case = json_format.MessageToDict(use_case_proto) use_case['_id'] = use_case.pop('useCaseId') try: eval_db.use_case.insert_one(use_case) except errors.DuplicateKeyError: eval_db.use_case.replace_one({'_id': use_case['_id']}, use_case) num_cases += 1 if num_cases and _SLACK_CREATE_POOL_URL: pool_url = campaign.get_bob_link(f'/eval/{parse.quote(pool_name)}') requests.post( _SLACK_CREATE_POOL_URL, json={ 'text': f'A new use cases pool is ready for evaluation: <{pool_url}|{pool_name}>', })