Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. import abc
  2. import logging
  3. from six import with_metaclass
  4.  
  5. logger = logging.getLogger(__name__)
  6.  
  7. DEFAULT = "Android"
  8.  
  9. class YowsupEnvType(abc.ABCMeta):
  10. def __init__(cls, name, bases, dct):
  11. if name != "YowsupEnv":
  12. YowsupEnv.registerEnv(cls)
  13. super(YowsupEnvType, cls).__init__(name, bases, dct)
  14.  
  15. class YowsupEnv(with_metaclass(YowsupEnvType, object)):
  16. __metaclass__ = YowsupEnvType
  17. __ENVS = {}
  18. __CURR = None
  19.  
  20. _USERAGENT_STRING = "WhatsApp/{WHATSAPP_VERSION} {OS_NAME}/{OS_VERSION} Device/{MANUFACTURER}-{DEVICE_NAME}"
  21.  
  22. @classmethod
  23. def registerEnv(cls, envCls):
  24. envName = envCls.__name__.lower().replace("yowsupenv", "")
  25. cls.__ENVS[envName] = envCls
  26. logger.debug("registered env %s => %s" % (envName, envCls))
  27.  
  28. @classmethod
  29. def setEnv(cls, envName):
  30. if not envName in cls.__ENVS:
  31. raise ValueError("%s env does not exist" % envName)
  32. logger.debug("Current env changed to %s " % envName)
  33. cls.__CURR = cls.__ENVS[envName]()
  34.  
  35. @classmethod
  36. def getEnv(cls, envName):
  37. if not envName in cls.__ENVS:
  38. raise ValueError("%s env does not exist" % envName)
  39.  
  40. return cls.__ENVS[envName]()
  41.  
  42. @classmethod
  43. def getRegisteredEnvs(cls):
  44. return list(cls.__ENVS.keys())
  45.  
  46. @classmethod
  47. def getCurrent(cls):
  48. if cls.__CURR is None:
  49. env = DEFAULT
  50. envs = cls.getRegisteredEnvs()
  51. if env not in envs:
  52. env = envs[0]
  53. logger.debug("Env not set, setting it to %s" % env)
  54. cls.setEnv(env)
  55. return cls.__CURR
  56.  
  57. @abc.abstractmethod
  58. def getToken(self, phoneNumber):
  59. pass
  60.  
  61. @abc.abstractmethod
  62. def getVersion(self):
  63. pass
  64.  
  65. @abc.abstractmethod
  66. def getOSVersion(self):
  67. pass
  68.  
  69. @abc.abstractmethod
  70. def getOSName(self):
  71. pass
  72.  
  73. @abc.abstractmethod
  74. def getDeviceName(self):
  75. pass
  76.  
  77. @abc.abstractmethod
  78. def getManufacturer(self):
  79. pass
  80.  
  81. @abc.abstractmethod
  82. def isAxolotlEnabled(self):
  83. pass
  84.  
  85. def getBuildVersion(self):
  86. return ""
  87.  
  88. def getResource(self):
  89. return self.getOSName() + "-" + self.getVersion()
  90.  
  91. def getUserAgent(self):
  92. return self.__class__._USERAGENT_STRING.format(
  93. WHATSAPP_VERSION = self.getVersion(),
  94. OS_NAME = self.getOSName(),
  95. OS_VERSION = self.getOSVersion(),
  96. MANUFACTURER = self.getManufacturer(),
  97. DEVICE_NAME = self.getDeviceName()
  98. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement