Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

azure_spn_conn.py 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import os
  2. import time
  3. from rag import settings
  4. from rag.settings import azure_logger
  5. from rag.utils import singleton
  6. from azure.identity import ClientSecretCredential, AzureAuthorityHosts
  7. from azure.storage.filedatalake import FileSystemClient
  8. @singleton
  9. class RAGFlowAzureSpnBlob(object):
  10. def __init__(self):
  11. self.conn = None
  12. self.account_url = os.getenv('ACCOUNT_URL', settings.AZURE["account_url"])
  13. self.client_id = os.getenv('CLIENT_ID', settings.AZURE["client_id"])
  14. self.secret = os.getenv('SECRET', settings.AZURE["secret"])
  15. self.tenant_id = os.getenv('TENANT_ID', settings.AZURE["tenant_id"])
  16. self.container_name = os.getenv('CONTAINER_NAME', settings.AZURE["container_name"])
  17. self.__open__()
  18. def __open__(self):
  19. try:
  20. if self.conn:
  21. self.__close__()
  22. except Exception as e:
  23. pass
  24. try:
  25. credentials = ClientSecretCredential(tenant_id=self.tenant_id, client_id=self.client_id, client_secret=self.secret, authority=AzureAuthorityHosts.AZURE_CHINA)
  26. self.conn = FileSystemClient(account_url=self.account_url, file_system_name=self.container_name, credential=credentials)
  27. except Exception as e:
  28. azure_logger.error(
  29. "Fail to connect %s " % self.account_url + str(e))
  30. def __close__(self):
  31. del self.conn
  32. self.conn = None
  33. def health(self):
  34. bucket, fnm, binary = "txtxtxtxt1", "txtxtxtxt1", b"_t@@@1"
  35. f = self.conn.create_file(fnm)
  36. f.append_data(binary, offset=0, length=len(binary))
  37. return f.flush_data(len(binary))
  38. def put(self, bucket, fnm, binary):
  39. for _ in range(3):
  40. try:
  41. f = self.conn.create_file(fnm)
  42. f.append_data(binary, offset=0, length=len(binary))
  43. return f.flush_data(len(binary))
  44. except Exception as e:
  45. azure_logger.error(f"Fail put {bucket}/{fnm}: " + str(e))
  46. self.__open__()
  47. time.sleep(1)
  48. def rm(self, bucket, fnm):
  49. try:
  50. self.conn.delete_file(fnm)
  51. except Exception as e:
  52. azure_logger.error(f"Fail rm {bucket}/{fnm}: " + str(e))
  53. def get(self, bucket, fnm):
  54. for _ in range(1):
  55. try:
  56. client = self.conn.get_file_client(fnm)
  57. r = client.download_file()
  58. return r.read()
  59. except Exception as e:
  60. azure_logger.error(f"fail get {bucket}/{fnm}: " + str(e))
  61. self.__open__()
  62. time.sleep(1)
  63. return
  64. def obj_exist(self, bucket, fnm):
  65. try:
  66. client = self.conn.get_file_client(fnm)
  67. return client.exists()
  68. except Exception as e:
  69. azure_logger.error(f"Fail put {bucket}/{fnm}: " + str(e))
  70. return False
  71. def get_presigned_url(self, bucket, fnm, expires):
  72. for _ in range(10):
  73. try:
  74. return self.conn.get_presigned_url("GET", bucket, fnm, expires)
  75. except Exception as e:
  76. azure_logger.error(f"fail get {bucket}/{fnm}: " + str(e))
  77. self.__open__()
  78. time.sleep(1)
  79. return