def post(cls):
     """register user post method"""
     try:
         user_data = user_schema.load(request.get_json())
     except ValidationError as ve:
         return ve.messages, 400
     print(user_data)
     print(type(user_data))
     userModel = UserModel.find_by_name(user_data.username)
     if userModel:
         return {
             "message": gettext("user_exists").format(user_data.username)
         }, 400
     userModel = UserModel.find_by_email(user_data.email)
     if userModel:
         return {
             "message": gettext("user_exists").format(user_data.email)
         }, 400
     else:
         try:
             user_data.save_to_db()
             send_email(user_data.id)
             return {"message": gettext("user_created_email_sent")}, 201
         except MailGunException as e:
             print_tb(e.__traceback__)
             user_data.delete()
             return {"message": gettext("user_creation_failed")}, 500
         except Exception as e:
             user_data.delete()
             print(e)
             return {"message": gettext("user_creation_failed")}, 500
 def post(cls,email_id: str):
     user = UserModel.find_by_email(email_id)
     if not user:
         return {"message":gettext("invalid_user")},400
     if user.activated:
         return {"message":gettext("user_activated")},400
     confirmation = user.confirmation
     try:
         send_email(user.id)
         confirmation.delete()
         return {"message":gettext("email_sent")},200
     except MailGunException as e:
         return {"message":gettext("email_send_failed")},500
 def get(cls, token: str):
     confirmation = ConfirmationModel.find_by_id(token)
     if (confirmation):
         if(confirmation.expired()):
              return {"message":(gettext("token_expired"))}, 400
         else:
             user = confirmation.user
             user.activated = True
             user.save_to_db()
             confirmation.delete()
             return make_response(render_template('confirmation_page.html', email=user.email), 200,{"Content-Type": "text/html"})
     else:
         return {"message": gettext("invalid_token")}, 400
 def post(cls, userid: str):
     data = image_schema.load(
         request.files
     )  #returns a dict with Filestorage value and key image
     folder = f"user_{userid}"
     try:
         image_path = save_image(data["image"], folder=folder)
         image_name = get_basename(image_path)
         return {"message": gettext('image_uploaded')}, 201
     except UploadNotAllowed as e:
         print(e)
         return {"message": gettext('image_upload_failed')}, 500
     except Exception as e:
         print(e)
         return {"message": gettext('image_upload_failed')}, 500
 def get(cls, filename: str):
     user = get_jwt_identity()
     print(user)
     folder = f"user_{user}"
     print(folder)
     if not is_filename_safe(filename):
         return {"message": gettext('bad_file_request')}, 400
     try:
         path = get_path(filename, folder)
         print(path)
         if not os.path.exists(path):
             return {"message": gettext("file_not_exist")}, 400
         return send_file(path)
     except Exception as e:
         print(e)
         return {"message": gettext('error_get_image')}, 500
 def delete(cls, filename: str):
     user = get_jwt_identity()
     print(user)
     folder = f"user_{user}"
     print(folder)
     if not is_filename_safe(filename):
         return {"message": gettext('bad_file_request')}, 400
     try:
         path = get_path(filename, folder)
         print(path)
         if not os.path.exists(path):
             return {"message": gettext("file_not_exist")}, 400
         os.remove(path)
         return {"message": gettext("file_delete_success")}, 200
     except Exception as e:
         print(e)
         return {"message": gettext("error_delete_image")}, 500
def send_email_confirmation(to: List, subject: str, mail_body: str):

    if MAILGUN_DOMAIN is None:
        raise MailGunException(gettext("mailgun_domain_not_loaded"))
    if MAILGUN_API_KEY is None:
        raise MailGunException(gettext("mailgun_api_key_not_found"))

    resp = post(f"https://api.mailgun.net/v3/{MAILGUN_DOMAIN}/messages",
                auth=("api", MAILGUN_API_KEY),
                data={
                    "from": f"Mailgun User <mailgun@{MAILGUN_DOMAIN}>",
                    "to": to,
                    "subject": subject,
                    "html": mail_body
                })

    if resp.status_code != 200:
        raise MailGunException(gettext("email_not_sent"))

    return resp