def getOperators(operator_id): try: if operator_id: operator = Operator.objects(id=operator_id).get().clean_data() return jsonify(operator) else: operator = [ v.clean_data() for v in Operator.objects(is_active=True).all() ] return jsonify({"list": operator}) except Exception as error: return jsonify({"error": str(error)}), 400
def put(self, operator_id, delete=False): """update a single user by id""" update = {} if not delete: for key, value in request.json: if key == "password": value = PassHash.hash(value) update[f"set__{key}"] = value else: update["set__is_active"] = False try: Operator.objects(id=operator_id).get().update(**update) return jsonify({"response": "success"}) except Exception as error: return jsonify({"error": str(error)}), 400
def getToken(username): operator = Operator.objects(email=username, is_active=True) #.get()#.clean_data() if operator: return operator.get().generate_auth_token(), operator.get().clean_data( ) #print(operator) #g.user = operator return None
def verifyUser(username, password): user = Operator.verify_auth_token(username) #username_or_token if not user: operator = Operator.objects(email=username, is_active=True) #.get()#.clean_data() if operator: return operator.get().check_password(password) #print(operator) return False #g.user = operator return True
def get_operators_by_filters(filters, pages=0, per_page=10000): try: item_per_age = int(per_page) offset = (int(pages) - 1) * item_per_age if len(filters) > 0: flt = {} for k, v in filters.items(): flt[k] = v if 'is_active' == k: flt['is_active'] = True if flt[ 'is_active'] == '1' else False obj = Operator.objects(**flt) beneficiaries = [ v.clean_data() for v in obj.skip(offset).limit(item_per_age) ] return jsonify({"list": beneficiaries, 'count': obj.count()}) else: obj = Operator.objects(is_active=True) beneficiaries = [ v.clean_data() for v in obj.skip(offset).limit(item_per_age) ] return jsonify({"list": beneficiaries, 'count': obj.count()}) except Exception as error: return jsonify({"error": str(error)}), 400
def registerOperator(requestjson, created_by): """create a new user""" new_operator = requestjson if len(created_by) > 30: user = Operator.verify_auth_token(created_by) created_by = user.get().clean_data()['email'] # TODO: get authenticated operator and assignee to new Operator # new_operator["created_by"] = authenticated_oprator try: assert len( new_operator["password"] ) >= MIN_PASSWORD_LEN, f"Password is to short, min length is {MIN_PASSWORD_LEN}" new_operator["password"] = PassHash.hash(new_operator["password"]) new_operator['created_by'] = created_by assert not Operator.objects( email=new_operator['email']), "user with this email already exists" comment = Operator(**new_operator) comment.save() return jsonify({"response": "success", 'user': comment.clean_data()}) except Exception as error: return jsonify({"error": str(error)}), 400
def get_active_operator(days=2): days_diff = dt.now() - timedelta(days=days) pipeline_used_fixers = [{ '$match': { 'status': 'done', 'created_at': { '$gte': days_diff } } }, { '$sort': { 'created_at': 1 } }, { '$group': { '_id': '$fixer', 'count': { '$sum': 1 } } }] fixers = [] for f in Beneficiary.objects().aggregate(pipeline_used_fixers): fixers.append(f) available_fixers = [ v.clean_data() for v in Operator.objects( is_active=True, role='fixer', created_at__gte=days_diff) ] available_fixers = [{'_id': af.get('_id')} for af in available_fixers] if len(fixers) is not 0 and len(fixers) == len(available_fixers): return fixers[0].get('_id') else: fixers_ids = [val['_id'] for val in fixers] fixer_id = None for af in available_fixers: fixer_id = af.get('_id') if fixer_id not in fixers_ids: break return fixer_id