lbkit 0.7.3__tar.gz → 0.7.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {lbkit-0.7.3/lbkit.egg-info → lbkit-0.7.4}/PKG-INFO +1 -1
  2. lbkit-0.7.4/lbkit/__init__.py +2 -0
  3. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/codegen.py +46 -14
  4. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/idf_interface.py +8 -7
  5. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/client.c.mako +1 -1
  6. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/client.h.mako +1 -1
  7. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/public.c.mako +3 -3
  8. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/public.h.mako +1 -1
  9. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/server.c.mako +2 -2
  10. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/server.h.mako +1 -1
  11. lbkit-0.7.4/lbkit/utils/version.py +41 -0
  12. {lbkit-0.7.3 → lbkit-0.7.4/lbkit.egg-info}/PKG-INFO +1 -1
  13. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit.egg-info/SOURCES.txt +1 -0
  14. {lbkit-0.7.3 → lbkit-0.7.4}/test/test_codegen.py +44 -0
  15. lbkit-0.7.3/lbkit/__init__.py +0 -2
  16. {lbkit-0.7.3 → lbkit-0.7.4}/AUTHORS +0 -0
  17. {lbkit-0.7.3 → lbkit-0.7.4}/LICENSE +0 -0
  18. {lbkit-0.7.3 → lbkit-0.7.4}/MANIFEST.in +0 -0
  19. {lbkit-0.7.3 → lbkit-0.7.4}/README.md +0 -0
  20. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/build_conan_parallel.py +0 -0
  21. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/ci_robot/__init__.py +0 -0
  22. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/ci_robot/gitee.py +0 -0
  23. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/cli.py +0 -0
  24. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/__init__.py +0 -0
  25. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/ctype_defination.py +0 -0
  26. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/renderer.py +0 -0
  27. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/interface.c.mako +0 -0
  28. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/codegen/template/interface.introspect.xml.mako +0 -0
  29. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/component/__init__.py +0 -0
  30. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/component/arg_parser.py +0 -0
  31. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/component/build.py +0 -0
  32. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/component/template/conanbase.mako +0 -0
  33. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/component/template/deploy.mako +0 -0
  34. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/component/test.py +0 -0
  35. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/errors.py +0 -0
  36. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/helper.py +0 -0
  37. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/__init__.py +0 -0
  38. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/build_image.py +0 -0
  39. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/build_manifest.py +0 -0
  40. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/build_prepare.py +0 -0
  41. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/build_rootfs.py +0 -0
  42. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/config.py +0 -0
  43. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/task.py +0 -0
  44. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/template/conanfile.py.mako +0 -0
  45. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/integration/template/rootfs.py.mako +0 -0
  46. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/lbkit.py +0 -0
  47. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/log.py +0 -0
  48. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/misc.py +0 -0
  49. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/tools.py +0 -0
  50. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/utils/__init__.py +0 -0
  51. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/utils/images/__init__.py +0 -0
  52. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit/utils/images/emmc.py +0 -0
  53. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit.egg-info/dependency_links.txt +0 -0
  54. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit.egg-info/entry_points.txt +0 -0
  55. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit.egg-info/requires.txt +0 -0
  56. {lbkit-0.7.3 → lbkit-0.7.4}/lbkit.egg-info/top_level.txt +0 -0
  57. {lbkit-0.7.3 → lbkit-0.7.4}/setup.cfg +0 -0
  58. {lbkit-0.7.3 → lbkit-0.7.4}/setup.py +0 -0
  59. {lbkit-0.7.3 → lbkit-0.7.4}/test/__init__.py +0 -0
  60. {lbkit-0.7.3 → lbkit-0.7.4}/test/test_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: lbkit
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: Tools provided by litebmc.com
5
5
  Home-page: https://www.litebmc.com
6
6
  Author: xuhj@litebmc.com
@@ -0,0 +1,2 @@
1
+
2
+ __version__ = '0.7.4'
@@ -7,6 +7,7 @@ import json
7
7
  import yaml
8
8
  import argparse
9
9
  from lbkit.codegen.idf_interface import IdfInterface
10
+ from lbkit.utils.version import Version, X_VER
10
11
 
11
12
  from mako.lookup import TemplateLookup
12
13
  from lbkit.log import Logger
@@ -17,13 +18,36 @@ from lbkit.misc import SmartFormatter
17
18
  lb_cwd = os.path.split(os.path.realpath(__file__))[0]
18
19
  log = Logger("codegen")
19
20
 
20
- __version__=5
21
+ # 历史自动生成版本号,计划用于用于生成代码稳定性测试
22
+ # TODO: 支持生成代码稳定性测试,确保生成的代码一致性
23
+ history_versions = {
24
+ "5.0": "简化枚举变更在接口间传递时的字符串定义"
25
+ }
26
+ __version__=Version("5.0")
27
+
28
+
29
+ def version_check(ver_str: str):
30
+ ver = Version(ver_str)
31
+ if history_versions.get(ver_str):
32
+ return ver
33
+ found = False
34
+ if ver.minor == X_VER:
35
+ major_str = str(ver.major) + "."
36
+ for v, _ in history_versions.items():
37
+ if v.startswith(major_str):
38
+ found = True
39
+ break
40
+ if not found:
41
+ log.error(f"Unkonw codegen version {ver_str}, supported versions:")
42
+ for ver, msg in history_versions.items():
43
+ log.error(f" {ver}: {msg}")
44
+ raise Exception("Unkonw codegen version get")
45
+ return ver
21
46
 
22
47
  class CodeGen(object):
23
48
  def __init__(self, args):
24
49
  self.args = args
25
50
  self.codegen_version = __version__
26
- pass
27
51
 
28
52
  def _gen(self, idf_file, directory="."):
29
53
  directory = os.path.realpath(directory)
@@ -32,12 +56,12 @@ class CodeGen(object):
32
56
  os.makedirs(os.path.join(directory, "client"), exist_ok=True)
33
57
  interface = self.get_interface(idf_file)
34
58
  out_file = os.path.join(directory, "public", interface.name + ".xml")
35
- interface.render_dbus_xml("interface.introspect.xml.mako", out_file, self.codegen_version)
59
+ interface.render_dbus_xml("interface.introspect.xml.mako", out_file)
36
60
  for code_type in ["server", "client", "public"]:
37
61
  out_file = os.path.join(directory, code_type, interface.name + ".h")
38
- interface.render_c_source(code_type + ".h.mako", out_file, self.codegen_version)
62
+ interface.render_c_source(code_type + ".h.mako", out_file)
39
63
  out_file = os.path.join(directory, code_type, interface.name + ".c")
40
- interface.render_c_source(code_type + ".c.mako", out_file, self.codegen_version)
64
+ interface.render_c_source(code_type + ".c.mako", out_file)
41
65
  json_file = os.path.join(directory, "package.yml")
42
66
  data = {
43
67
  "version": interface.version,
@@ -55,7 +79,7 @@ class CodeGen(object):
55
79
 
56
80
  def get_interface(self, idf_file):
57
81
  lookup = TemplateLookup(directories=os.path.join(lb_cwd, "template"))
58
- return IdfInterface(lookup, idf_file, __version__)
82
+ return IdfInterface(lookup, idf_file, self.codegen_version)
59
83
 
60
84
  def run(self):
61
85
  """
@@ -67,12 +91,16 @@ class CodeGen(object):
67
91
  prog="lbkit gen",
68
92
  formatter_class=SmartFormatter)
69
93
  # 默认的自动生成工具版本号为2
70
- parser.add_argument("-cv", "--codegen_version", help=f'''must less than or equal to {__version__}, default: 2
94
+ parser.add_argument("-cv", "--codegen_version", help=f'''must less than or equal to {__version__.str}, default: {__version__.str}
95
+ format: major.version
96
+ for example: 1.3、2.4、3.3
97
+
71
98
  description of changes:
72
- 3: compatible with lb_base/0.7.x
73
- 2: compatible with lb_base/0.6.x
99
+ 4.x: compatible with lb_base/0.8.x
100
+ 3.x: compatible with lb_base/0.7.x
101
+ 2.x: compatible with lb_base/0.6.x
74
102
  ''',
75
- type=int, default=2)
103
+ type=str, default=__version__.str)
76
104
  parser.add_argument("-d", "--directory", help='generate code directory', default=".")
77
105
  group2 = parser.add_argument_group('cdf file', 'Generate code using the specified CDF file')
78
106
  group2.add_argument("-c", "--cdf_file", help='component description file, default metadata/package.yml', default=None)
@@ -86,7 +114,9 @@ class CodeGen(object):
86
114
  raise ArgException(f"argument -c/--cdf_file: {args.cdf_file} not exist")
87
115
  configs = Helper.read_yaml(args.cdf_file, "codegen", [])
88
116
  # 为保障兼容,package.yml未指定版本号的,默认使用2,该版本配套lb_base/0.6.0版本,其LBProperty无set/get成员
89
- self.codegen_version = Helper.read_yaml(args.cdf_file, "codegen_version", 2)
117
+ ver_str = Helper.read_yaml(args.cdf_file, "codegen_version", args.codegen_version)
118
+ version_check(ver_str)
119
+ self.codegen_version = Version(ver_str)
90
120
  for cfg in configs:
91
121
  file = cfg.get("file")
92
122
  if file is None:
@@ -101,15 +131,17 @@ class CodeGen(object):
101
131
  outdir = cfg.get("outdir", os.getcwd())
102
132
  self._gen(file, outdir)
103
133
  return
134
+ else:
135
+ version_check(args.codegen_version)
136
+ self.codegen_version = Version(args.codegen_version)
104
137
 
105
138
  intf_file = args.idf_file
106
139
  if not intf_file:
107
140
  raise ArgException(f"argument error, arguments -c/--cdf_file and -i/--idf_file are not set")
108
141
  if not os.path.isfile(intf_file):
109
142
  raise ArgException(f"argument -i/--idf_file: {args.idf_file} not exist")
110
- if args.codegen_version > __version__ or args.codegen_version <= 0:
111
- raise ArgException(f"argument -v/--codegen_version: validate failed, must less than or equal to {__version__} and bigger than 0")
112
- self.codegen_version = args.codegen_version
143
+ if self.codegen_version.bt(__version__.str):
144
+ raise ArgException(f"argument -cv/--codegen_version: validate failed, must less than or equal to {__version__.str}")
113
145
  out_dir = os.path.join(os.getcwd(), args.directory)
114
146
  if not intf_file.endswith(".yaml"):
115
147
  raise ArgException(f"The IDF file ({intf_file}) not endswith .yaml")
@@ -9,6 +9,7 @@ from lbkit.codegen.ctype_defination import CTYPE_OBJS, RefObjArrayValidator, Ref
9
9
  from lbkit.misc import load_yml_with_json_schema_validate
10
10
  from lbkit.errors import OdfValidateException, LiteBmcException
11
11
  from lbkit.helper import SigInvalidException, validate_glib_signature
12
+ from lbkit.utils.version import Version
12
13
 
13
14
  log = Logger("gen_interface")
14
15
 
@@ -35,7 +36,7 @@ class IdfInterfaceBase(Renderer):
35
36
  self.description = None
36
37
  self.version = None
37
38
  self.alias = None
38
- self.codegen_version: int = 0
39
+ self.codegen_version: Version = None
39
40
 
40
41
  class IdfAnnotation():
41
42
  def __init__(self, name, value):
@@ -930,7 +931,7 @@ class IdfEnumeration(IdfBase):
930
931
  def odf_schema(self):
931
932
  values = []
932
933
  for prop in self.values.parameters:
933
- if self.intf.codegen_version >= 5:
934
+ if self.intf.codegen_version.lt("5.0"):
934
935
  val = self.intf.name + "." + self.name + "." + prop.name
935
936
  else:
936
937
  val = prop.name
@@ -1034,7 +1035,7 @@ class IdfDictionary():
1034
1035
 
1035
1036
 
1036
1037
  class IdfInterface(IdfInterfaceBase):
1037
- def __init__(self, lookup, idf_file, codegen_version):
1038
+ def __init__(self, lookup, idf_file, codegen_version: Version):
1038
1039
  if not idf_file.endswith(".yaml") and not idf_file.endswith(".yml"):
1039
1040
  raise IDFException(f"IDF file {idf_file} neither endswith .yaml nor endswith .yml")
1040
1041
  super().__init__()
@@ -1238,8 +1239,8 @@ class IdfInterface(IdfInterfaceBase):
1238
1239
  intf_stru = IdfStructure(self, idf, propety_key="properties")
1239
1240
  self.structures[self.alias] = intf_stru
1240
1241
 
1241
- def render_dbus_xml(self, template, out_file, codegen_version):
1242
- out = self.render(self.lookup, template, intf=self, codegen_version=codegen_version)
1242
+ def render_dbus_xml(self, template, out_file):
1243
+ out = self.render(self.lookup, template, intf=self, codegen_version=self.codegen_version)
1243
1244
  hash = hashlib.sha256()
1244
1245
  hash.update(out.encode('utf-8'))
1245
1246
  self.introspect_xml_sha256 = hash.hexdigest()
@@ -1247,9 +1248,9 @@ class IdfInterface(IdfInterfaceBase):
1247
1248
  with open(out_file, "w") as fd:
1248
1249
  fd.write(out)
1249
1250
 
1250
- def render_c_source(self, template, out_file, codegen_version):
1251
+ def render_c_source(self, template, out_file):
1251
1252
 
1252
- out = self.render(self.lookup, template, intf=self, codegen_version=codegen_version)
1253
+ out = self.render(self.lookup, template, intf=self, codegen_version=self.codegen_version)
1253
1254
  with open(out_file, "w") as fd:
1254
1255
  fd.write(out)
1255
1256
 
@@ -192,7 +192,7 @@ ${class_name}_Properties *${class_name}_properties(void)
192
192
  return &${properties};
193
193
  }
194
194
 
195
- % if codegen_version >= 4:
195
+ % if codegen_version.be("4.0"):
196
196
  ${class_name} ${class_name}_get(const gchar *well_known, const gchar *name)
197
197
  {
198
198
  return lb_impl._cli_get(&_${class_name}_interface, well_known, name);
@@ -110,7 +110,7 @@ ${class_name}_Properties *${class_name}_properties(void);
110
110
  LBInterface *${class_name}_interface(void);
111
111
  #define ${hump2underline(class_name).upper()} ${class_name}_interface()
112
112
 
113
- % if codegen_version >= 4:
113
+ % if codegen_version.be("4.0"):
114
114
  /* notes: 对象变更加回调函数 */
115
115
  typedef void (*${class_name}_on_changed_hook)(${class_name} lb_obj, gpointer user_data);
116
116
  /* notes: 属性变更后回调,远程对象或本地对象变更后都会调用 */
@@ -265,7 +265,7 @@ gboolean _validate_odf_as_struct_${name}_v(yaml_document_t *doc, yaml_node_t *no
265
265
 
266
266
  %endfor
267
267
  % for name, enum in intf.enumerations.items():
268
- % if codegen_version >= 5:
268
+ % if codegen_version.be("5.0"):
269
269
  ## 枚举序列化和反序列化函数
270
270
  static const gchar *_${name}StrMap[] = {
271
271
  % for value in enum.values.parameters:
@@ -888,7 +888,7 @@ static GDBusPropertyInfo ${class_name}_property_${prop.name} =
888
888
  % endif
889
889
  % endfor
890
890
  ## 只有自动生成工具版本号大于等于3的才会生成get和set方法
891
- % if codegen_version >= 3:
891
+ % if codegen_version.be("3.0"):
892
892
  % if len(intf.properties):
893
893
  static LBBase *_get_real_object(${class_name} object)
894
894
  {
@@ -939,7 +939,7 @@ static ${class_name}_Properties _${class_name}_properties =
939
939
  .info = NULL, /* load from /usr/share/dbus-1/interfaces/${intf.name} by lb_init */
940
940
  % endif
941
941
  .offset = offsetof(struct _${class_name}, ${prop.name}),
942
- % if codegen_version >= 3:
942
+ % if codegen_version.be("3.0"):
943
943
  .flags = ${prop.desc_flags},
944
944
  .set = ${class_name}_set_${prop.name}_variant,
945
945
  .get = ${class_name}_get_${prop.name}_variant
@@ -60,7 +60,7 @@ typedef enum {
60
60
  % for value in enum.values.parameters:
61
61
  ${name}_${value.name},
62
62
  % endfor
63
- % if codegen_version >= 5:
63
+ % if codegen_version.be("5.0"):
64
64
  _${name}_Invalid,
65
65
  % else:
66
66
  _${name}Invalid,
@@ -86,7 +86,7 @@ struct _${name} **_load_odf_as_${name}_v(yaml_document_t *doc, yaml_node_t *node
86
86
  % for name, enum in intf.enumerations.items():
87
87
  ${name} _load_odf_as_${name}(yaml_document_t *doc, yaml_node_t *node)
88
88
  {
89
- % if codegen_version >= 5:
89
+ % if codegen_version.be("5.0"):
90
90
  g_assert(node->type == YAML_SCALAR_NODE);
91
91
  if (node->type != YAML_SCALAR_NODE) {
92
92
  return _${name}_Invalid;
@@ -482,7 +482,7 @@ ${class_name}_Properties *${class_name}_properties(void)
482
482
  return &${properties};
483
483
  }
484
484
 
485
- % if codegen_version >= 4:
485
+ % if codegen_version.be("4.0"):
486
486
  ${class_name} ${class_name}_get(const gchar *name)
487
487
  {
488
488
  return lb_impl._get(&_${class_name}_interface, name);
@@ -56,7 +56,7 @@ ${class_name}_Properties *${class_name}_properties(void);
56
56
 
57
57
  #define ${hump2underline(class_name).upper()} ${class_name}_interface()
58
58
 
59
- % if codegen_version >= 4:
59
+ % if codegen_version.be("4.0"):
60
60
  /* notes: 对象变更加回调函数 */
61
61
  typedef void (*${class_name}_on_changed_hook)(${class_name} lb_obj, gpointer user_data);
62
62
  /* notes: 属性变更后回调,远程对象或本地对象变更后都会调用 */
@@ -0,0 +1,41 @@
1
+ """环境准备"""
2
+ import re
3
+
4
+ X_VER = 0x7fff_ffff
5
+
6
+ class Version():
7
+ def __init__(self, ver_str):
8
+ if not re.match("^([0-9]|([1-9][0-9]*))\\.(x|[0-9]|([1-9][0-9]*))$", ver_str):
9
+ raise Exception("Version string {ver_str} not match with regex ^([0-9]|([1-9][0-9]*))\\.([0-9]|([1-9][0-9]*))$")
10
+ chunks = ver_str.split(".")
11
+ self.major = int(chunks[0])
12
+ if chunks[1] == "x":
13
+ self.minor = X_VER
14
+ else:
15
+ self.minor = int(chunks[1])
16
+ self.str = ver_str
17
+
18
+ def bt(self, next_ver):
19
+ next = Version(next_ver)
20
+ if self.major > next.major or (self.major == next.major and (self.minor > next.minor and self.minor != X_VER)):
21
+ return True
22
+ return False
23
+
24
+ def be(self, next_ver):
25
+ next = Version(next_ver)
26
+ if self.major > next.major or (self.major == next.major and self.minor >= next.minor):
27
+ return True
28
+ return False
29
+
30
+ def lt(self, next_ver):
31
+ next = Version(next_ver)
32
+ if self.major < next.major or (self.major == next.major and (self.minor < next.minor and next.minor != X_VER and next.minor != X_VER)):
33
+ return True
34
+ return False
35
+
36
+ def le(self, next_ver):
37
+ next = Version(next_ver)
38
+ if self.major < next.major or (self.major == next.major and (self.minor <= next.minor or self.minor == X_VER)):
39
+ return True
40
+ return False
41
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: lbkit
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: Tools provided by litebmc.com
5
5
  Home-page: https://www.litebmc.com
6
6
  Author: xuhj@litebmc.com
@@ -49,6 +49,7 @@ lbkit/integration/task.py
49
49
  lbkit/integration/template/conanfile.py.mako
50
50
  lbkit/integration/template/rootfs.py.mako
51
51
  lbkit/utils/__init__.py
52
+ lbkit/utils/version.py
52
53
  lbkit/utils/images/__init__.py
53
54
  lbkit/utils/images/emmc.py
54
55
  test/__init__.py
@@ -7,6 +7,7 @@ tracemalloc.start()
7
7
  from lbkit.codegen.idf_interface import IdfInterface
8
8
  from lbkit import errors
9
9
  from lbkit.codegen.codegen import __version__ as codegen_version
10
+ from lbkit.utils.version import Version
10
11
 
11
12
  schema_dir = os.path.realpath(os.path.join(os.getcwd(), "..", "schema"))
12
13
 
@@ -280,5 +281,48 @@ class TestCodeGenClass(unittest.TestCase):
280
281
  IdfInterface(None, self.tmp_file, codegen_version)
281
282
 
282
283
 
284
+ class TestVersionClass(unittest.TestCase):
285
+ def test_version_bt(self):
286
+ self.assertTrue(Version("5.2").bt("5.1"))
287
+ self.assertTrue(Version("6.2").bt("5.1"))
288
+ self.assertTrue(Version("6.2").bt("5.2"))
289
+ self.assertTrue(Version("6.2").bt("5.3"))
290
+ self.assertFalse(Version("5.x").bt("5.1"))
291
+ self.assertFalse(Version("5.x").bt("5.x"))
292
+ self.assertFalse(Version("5.1").bt("5.2"))
293
+ self.assertFalse(Version("5.2").bt("5.2"))
294
+ self.assertFalse(Version("4.2").bt("5.2"))
295
+ self.assertFalse(Version("4.x").bt("5.2"))
296
+ self.assertFalse(Version("4.x").bt("5.x"))
297
+
298
+ def test_version_be(self):
299
+ self.assertTrue(Version("5.2").be("5.2"))
300
+ self.assertTrue(Version("5.x").be("5.3"))
301
+ self.assertTrue(Version("5.x").be("5.x"))
302
+ self.assertFalse(Version("5.1").be("5.x"))
303
+
304
+ def test_version_le(self):
305
+ self.assertFalse(Version("5.2").le("5.1"))
306
+ self.assertFalse(Version("6.2").le("5.1"))
307
+ self.assertFalse(Version("6.2").le("5.2"))
308
+ self.assertFalse(Version("6.2").le("5.3"))
309
+ self.assertTrue(Version("5.x").le("5.1"))
310
+ self.assertTrue(Version("5.x").le("5.x"))
311
+ self.assertTrue(Version("5.1").le("5.2"))
312
+ self.assertTrue(Version("5.2").le("5.2"))
313
+ self.assertTrue(Version("4.2").le("5.2"))
314
+ self.assertTrue(Version("4.x").le("5.2"))
315
+ self.assertTrue(Version("4.x").le("5.x"))
316
+
317
+ def test_version_lt(self):
318
+ self.assertFalse(Version("5.2").lt("5.2"))
319
+ self.assertFalse(Version("5.x").lt("5.3"))
320
+ self.assertFalse(Version("5.x").lt("5.x"))
321
+ self.assertFalse(Version("5.1").lt("5.x"))
322
+ self.assertTrue(Version("5.1").lt("5.2"))
323
+ self.assertTrue(Version("4.3").lt("5.2"))
324
+ self.assertTrue(Version("4.3").lt("5.3"))
325
+
326
+
283
327
  if __name__ == "__main__":
284
328
  unittest.main()
@@ -1,2 +0,0 @@
1
-
2
- __version__ = '0.7.3'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes