annotate sat/tools/utils.py @ 3562:9f599ccbea4e

misc: update .hgignore
author Goffi <goffi@goffi.org>
date Fri, 11 Jun 2021 09:19:43 +0200
parents be6d91572633
children f9a5b810f14d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
3368
e86b71b1aa31 core: minor typos, docstring/comments update
Goffi <goffi@goffi.org>
parents: 3239
diff changeset
3 # SaT: an XMPP client
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3420
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
6 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
9 # (at your option) any later version.
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
11 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
14 # GNU Affero General Public License for more details.
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
18
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
19 """ various useful methods """
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
20
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
21 import unicodedata
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
22 import os.path
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
23 import datetime
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
24 import subprocess
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
25 import time
2089
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 1935
diff changeset
26 import sys
2181
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
27 import random
2470
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
28 import inspect
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
29 import textwrap
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
30 import functools
3215
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
31 from asyncio import iscoroutine
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
32 from twisted.python import procutils, failure
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
33 from twisted.internet import defer
2793
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
34 from sat.core.constants import Const as C
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
35 from sat.core.log import getLogger
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
36
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
37 log = getLogger(__name__)
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
38
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
39
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
40 NO_REPOS_DATA = "repository data unknown"
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
41 repos_cache_dict = None
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
42 repos_cache = None
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
43
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
44
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
45 def clean_ustr(ustr):
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
46 """Clean unicode string
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
47
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
48 remove special characters from unicode string
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
49 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
50
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
51 def valid_chars(unicode_source):
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
52 for char in unicode_source:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
53 if unicodedata.category(char) == "Cc" and char != "\n":
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
54 continue
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
55 yield char
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
56
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
57 return "".join(valid_chars(ustr))
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
58
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
59
2793
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
60 def logError(failure_):
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
61 """Genertic errback which log the error as a warning, and re-raise it"""
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
62 log.warning(failure_.value)
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
63 raise failure_
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
64
181735d1b062 plugin mr mercurial, tools(common/utils): moved command protocol to a new module
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
65
2470
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
66 def partial(func, *fixed_args, **fixed_kwargs):
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
67 # FIXME: temporary hack to workaround the fact that inspect.getargspec is not working with functools.partial
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
68 # making partial unusable with current D-bus module (in addMethod).
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
69 # Should not be needed anywore once moved to Python 3
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
70
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
71 ori_args = inspect.getargspec(func).args
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
72 func = functools.partial(func, *fixed_args, **fixed_kwargs)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
73 if ori_args[0] == "self":
2470
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
74 del ori_args[0]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
75 ori_args = ori_args[len(fixed_args) :]
2470
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
76 for kw in fixed_kwargs:
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
77 ori_args.remove(kw)
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
78
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
79 exec(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
80 textwrap.dedent(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
81 """\
2470
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
82 def method({args}):
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
83 return func({kw_args})
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
84 """
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
85 ).format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
86 args=", ".join(ori_args), kw_args=", ".join([a + "=" + a for a in ori_args])
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
87 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
88 locals(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
89 )
2470
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
90
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
91 return method
8084066ac95b tools (utils): new "partial" function which is a hack to workaround issue with functools.partial while using it with dbus module.
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
92
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
93
3215
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
94 def asDeferred(func, *args, **kwargs):
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
95 """Call a method and return a Deferred
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
96
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
97 the method can be a simple callable, a Deferred or a coroutine.
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
98 It is similar to defer.maybeDeferred, but also handles coroutines
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
99 """
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
100 try:
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
101 ret = func(*args, **kwargs)
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
102 except Exception as e:
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
103 return defer.fail(failure.Failure(e))
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
104 else:
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
105 if iscoroutine(ret):
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
106 return defer.ensureDeferred(ret)
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
107 elif isinstance(ret, defer.Deferred):
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
108 return ret
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
109 elif isinstance(ret, failure.Failure):
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
110 return defer.fail(ret)
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
111 else:
3239
4396bf14f5fc core (tools/utils): fixed return value for non async callbacks
Goffi <goffi@goffi.org>
parents: 3215
diff changeset
112 return defer.succeed(ret)
3215
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
113
bfa1bde97f48 core (tools/utils): new `asDeferred` function:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
114
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
115 def xmpp_date(timestamp=None, with_time=True):
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
116 """Return date according to XEP-0082 specification
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
117
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
118 to avoid reveling the timezone, we always return UTC dates
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
119 the string returned by this method is valid with RFC 3339
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
120 @param timestamp(None, float): posix timestamp. If None current time will be used
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
121 @param with_time(bool): if True include the time
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
122 @return(unicode): XEP-0082 formatted date and time
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
123 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
124 template_date = "%Y-%m-%d"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
125 template_time = "%H:%M:%SZ"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
126 template = (
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
127 "{}T{}".format(template_date, template_time) if with_time else template_date
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
128 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
129 return datetime.datetime.utcfromtimestamp(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
130 time.time() if timestamp is None else timestamp
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
131 ).strftime(template)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
132
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
133
2181
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
134 def generatePassword(vocabulary=None, size=20):
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
135 """Generate a password with random characters.
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
136
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
137 @param vocabulary(iterable): characters to use to create password
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
138 @param size(int): number of characters in the password to generate
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
139 @return (unicode): generated password
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
140 """
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
141 random.seed()
968b0d13bcc7 plugin account, tools: some cleaning account + email and password tools:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
142 if vocabulary is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
143 vocabulary = [
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
144 chr(i) for i in list(range(0x30, 0x3A)) + list(range(0x41, 0x5B)) + list(range(0x61, 0x7B))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
145 ]
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
146 return "".join([random.choice(vocabulary) for i in range(15)])
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
147
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
148
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
149 def getRepositoryData(module, as_string=True, is_path=False):
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
150 """Retrieve info on current mecurial repository
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
151
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
152 Data is gotten by using the following methods, in order:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
153 - using "hg" executable
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
154 - looking for a .hg/dirstate in parent directory of module (or in module/.hg if
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
155 is_path is True), and parse dirstate file to get revision
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
156 - checking package version, which should have repository data when we are on a dev version
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
157 @param module(unicode): module to look for (e.g. sat, libervia)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
158 module can be a path if is_path is True (see below)
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
159 @param as_string(bool): if True return a string, else return a dictionary
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
160 @param is_path(bool): if True "module" is not handled as a module name, but as an
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
161 absolute path to the parent of a ".hg" directory
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
162 @return (unicode, dictionary): retrieved info in a nice string,
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
163 or a dictionary with retrieved data (key is not present if data is not found),
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
164 key can be:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
165 - node: full revision number (40 bits)
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
166 - branch: branch name
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
167 - date: ISO 8601 format date
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
168 - tag: latest tag used in hierarchie
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
169 - distance: number of commits since the last tag
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
170 """
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
171 global repos_cache_dict
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
172 if as_string:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
173 global repos_cache
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
174 if repos_cache is not None:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
175 return repos_cache
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
176 else:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
177 if repos_cache_dict is not None:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
178 return repos_cache_dict
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
179
2089
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 1935
diff changeset
180 if sys.platform == "android":
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
181 #  FIXME: workaround to avoid trouble on android, need to be fixed properly
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
182 repos_cache = "Cagou android build"
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
183 return repos_cache
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
184
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
185 KEYS = ("node", "node_short", "branch", "date", "tag", "distance")
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
186 ori_cwd = os.getcwd()
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
187
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
188 if is_path:
2568
8e204f0d3193 tools(utils): fixed path handling in getRepositoryData
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
189 repos_root = os.path.abspath(module)
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
190 else:
2568
8e204f0d3193 tools(utils): fixed path handling in getRepositoryData
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
191 repos_root = os.path.abspath(os.path.dirname(module.__file__))
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
192
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
193 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
194 hg_path = procutils.which("hg")[0]
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
195 except IndexError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
196 log.warning("Can't find hg executable")
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
197 hg_path = None
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
198 hg_data = {}
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
199
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
200 if hg_path is not None:
1376
28fd9e838f8f core: getRepositoryData now get the module in argument
Goffi <goffi@goffi.org>
parents: 1375
diff changeset
201 os.chdir(repos_root)
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
202 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
203 hg_data_raw = subprocess.check_output(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
204 [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
205 "hg",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
206 "log",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
207 "-r",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
208 "-1",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
209 "--template",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
210 "{node}\n"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
211 "{node|short}\n"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
212 "{branch}\n"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
213 "{date|isodate}\n"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
214 "{latesttag}\n"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
215 "{latesttagdistance}",
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
216 ],
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
217 text=True
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
218 )
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
219 except subprocess.CalledProcessError:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
220 hg_data = {}
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
221 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
222 hg_data = dict(list(zip(KEYS, hg_data_raw.split("\n"))))
1857
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
223 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
224 hg_data["modified"] = "+" in subprocess.check_output(["hg", "id", "-i"], text=True)
1857
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
225 except subprocess.CalledProcessError:
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
226 pass
1471
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
227 else:
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
228 hg_data = {}
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
229
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
230 if not hg_data:
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
231 # .hg/dirstate method
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
232 log.debug("trying dirstate method")
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
233 if is_path:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
234 os.chdir(repos_root)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
235 else:
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
236 os.chdir(os.path.abspath(os.path.dirname(repos_root)))
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
237 try:
3064
d62fceccff22 core (tools/utils): fixed hex conversion in getRepositoryData following Python 3 port
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
238 with open(".hg/dirstate", 'rb') as hg_dirstate:
d62fceccff22 core (tools/utils): fixed hex conversion in getRepositoryData following Python 3 port
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
239 hg_data["node"] = hg_dirstate.read(20).hex()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
240 hg_data["node_short"] = hg_data["node"][:12]
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
241 except IOError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
242 log.debug("Can't access repository data")
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
243
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
244 # we restore original working dir
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
245 os.chdir(ori_cwd)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
246
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
247 if not hg_data:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
248 log.debug("Mercurial not available or working, trying package version")
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
249 try:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
250 import pkg_resources
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
251 except ImportError:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
252 log.warning("pkg_resources not available, can't get package data")
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
253 else:
3420
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
254 try:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
255 pkg_version = pkg_resources.get_distribution(C.APP_NAME_FILE).version
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
256 version, local_id = pkg_version.split("+", 1)
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
257 except pkg_resources.DistributionNotFound:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
258 log.warning("can't retrieve package data")
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
259 except ValueError:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
260 log.info(
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
261 "no local version id in package: {pkg_version}".format(
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
262 pkg_version=pkg_version
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
263 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
264 )
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
265 else:
3420
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
266 version = version.replace(".dev0", "D")
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
267 if version != C.APP_VERSION:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
268 log.warning(
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
269 "Incompatible version ({version}) and pkg_version ({pkg_version})"
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
270 .format(
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
271 version=C.APP_VERSION, pkg_version=pkg_version
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
272 )
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
273 )
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
274 else:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
275 try:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
276 hg_node, hg_distance = local_id.split(".")
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
277 except ValueError:
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
278 log.warning("Version doesn't specify repository data")
b526b95f11f2 tools(utils): fixed error catching when getting repository data with `pkg_resources`
Goffi <goffi@goffi.org>
parents: 3368
diff changeset
279 hg_data = {"node_short": hg_node, "distance": hg_distance}
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
280
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
281 repos_cache_dict = hg_data
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
282
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
283 if as_string:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
284 if not hg_data:
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
285 repos_cache = NO_REPOS_DATA
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
286 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
287 strings = ["rev", hg_data["node_short"]]
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
288 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2612
diff changeset
289 if hg_data["modified"]:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
290 strings.append("[M]")
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
291 except KeyError:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
292 pass
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
293 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
294 strings.extend(["({branch} {date})".format(**hg_data)])
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
295 except KeyError:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
296 pass
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
297 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
298 strings.extend(["+{distance}".format(**hg_data)])
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
299 except KeyError:
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
300 pass
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2793
diff changeset
301 repos_cache = " ".join(strings)
2573
18e2ca5f798e tools (utils): better repository version handling:
Goffi <goffi@goffi.org>
parents: 2568
diff changeset
302 return repos_cache
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
303 else:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
304 return hg_data