version.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from packaging import version
  2. def in_range(version_str: str, range_str: str) -> bool:
  3. conditions = [cond.strip() for cond in range_str.split(",")]
  4. ver = version.parse(version_str)
  5. for cond in conditions:
  6. if cond.startswith(">="):
  7. if ver < version.parse(cond[2:]):
  8. return False
  9. elif cond.startswith("<="):
  10. if ver > version.parse(cond[2:]):
  11. return False
  12. elif cond.startswith(">"):
  13. if ver <= version.parse(cond[1:]):
  14. return False
  15. elif cond.startswith("<"):
  16. if ver >= version.parse(cond[1:]):
  17. return False
  18. else: # exact match
  19. if ver != version.parse(cond):
  20. return False
  21. return True
  22. def is_valid_version_str(version_str: str) -> bool:
  23. """
  24. Check if the version string is valid and can be parsed.
  25. Returns True if valid, False otherwise.
  26. """
  27. try:
  28. version.parse(version_str)
  29. return True
  30. except Exception:
  31. return False
  32. def is_worker_version_compatible(
  33. worker_version: str,
  34. server_version: str,
  35. ) -> bool:
  36. """
  37. Check if worker and server versions are compatible.
  38. Args:
  39. worker_version: The version string of the worker.
  40. server_version: The version string of the server.
  41. Returns:
  42. bool: is_compatible
  43. """
  44. # Skip development version
  45. if worker_version == "0.0.0" or server_version == "0.0.0":
  46. return True
  47. try:
  48. worker_ver = version.parse(worker_version)
  49. server_ver = version.parse(server_version)
  50. except Exception:
  51. return False
  52. return worker_ver == server_ver