cos_config.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. class CosRegionInfo(object):
  4. def __init__(self, region=None, hostname=None, download_hostname=None, *args, **kwargs):
  5. self._hostname = None
  6. self._download_hostname = None
  7. if region in ['sh', 'shanghai']:
  8. self._hostname = 'sh.file.myqcloud.com'
  9. self._download_hostname = 'cossh.myqcloud.com'
  10. elif region in ['gz', 'guangzhou']:
  11. self._hostname = 'gz.file.myqcloud.com'
  12. self._download_hostname = 'cosgz.myqcloud.com'
  13. elif region in ['tj', 'tianjin', 'tianjing']: # bug: for compact previous release
  14. self._hostname = 'tj.file.myqcloud.com'
  15. self._download_hostname = 'costj.myqcloud.com'
  16. elif region in ['sgp', 'singapore']:
  17. self._hostname = 'sgp.file.myqcloud.com'
  18. self._download_hostname = 'cosspg.myqcloud.com'
  19. elif region is not None:
  20. self._hostname = '{region}.file.myqcloud.com'.format(region=region)
  21. self._download_hostname = 'cos{region}.myqcloud.com'.format(region=region)
  22. else:
  23. if hostname and download_hostname:
  24. self._hostname = hostname
  25. self._download_hostname = download_hostname
  26. else:
  27. raise ValueError("region or [hostname, download_hostname] must be set, and region should be sh/gz/tj/sgp")
  28. @property
  29. def hostname(self):
  30. assert self._hostname is not None
  31. return self._hostname
  32. @property
  33. def download_hostname(self):
  34. assert self._download_hostname is not None
  35. return self._download_hostname
  36. class CosConfig(object):
  37. """CosConfig 有关cos的配置"""
  38. def __init__(self, timeout=300, sign_expired=300, enable_https=False, *args, **kwargs):
  39. self._region = CosRegionInfo(*args, **kwargs)
  40. self._user_agent = 'cos-python-sdk-v4'
  41. self._timeout = timeout
  42. self._sign_expired = sign_expired
  43. self._enable_https = enable_https
  44. if self._enable_https:
  45. self._protocol = "https"
  46. else:
  47. self._protocol = "http"
  48. def get_endpoint(self):
  49. """获取域名地址
  50. :return:
  51. """
  52. # tmpl = "%s://%s/files/v2"
  53. return self._protocol + "://" + self._region.hostname + "/files/v2"
  54. def get_download_hostname(self):
  55. return self._region.download_hostname
  56. def get_user_agent(self):
  57. """获取HTTP头中的user_agent
  58. :return:
  59. """
  60. return self._user_agent
  61. def set_timeout(self, time_out):
  62. """设置连接超时, 单位秒
  63. :param time_out:
  64. :return:
  65. """
  66. assert isinstance(time_out, int)
  67. self._timeout = time_out
  68. def get_timeout(self):
  69. """获取连接超时,单位秒
  70. :return:
  71. """
  72. return self._timeout
  73. def set_sign_expired(self, expired):
  74. """设置签名过期时间, 单位秒
  75. :param expired:
  76. :return:
  77. """
  78. assert isinstance(expired, int)
  79. self._sign_expired = expired
  80. def get_sign_expired(self):
  81. """获取签名过期时间, 单位秒
  82. :return:
  83. """
  84. return self._sign_expired
  85. @property
  86. def enable_https(self):
  87. assert self._enable_https is not None
  88. return self._enable_https
  89. @enable_https.setter
  90. def enable_https(self, val):
  91. if val != self._enable_https:
  92. if val:
  93. self._enable_https = val
  94. self._protocol = "https"
  95. else:
  96. self._enable_https = val
  97. self._protocol = "http"