Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
digitalearth
DASF Data Analytics Software Framework
dasf-progress-api
Commits
ecbcb64c
Unverified
Commit
ecbcb64c
authored
Nov 22, 2021
by
Philipp Sommer
Browse files
reformat according to automated formatters
parent
65fd5695
Changes
3
Hide whitespace changes
Inline
Side-by-side
deprogressapi/__init__.py
View file @
ecbcb64c
from
.progress_report
import
ProgressReport
,
FormalProgressInterface
from
._version
import
get_versions
__version__
=
get_versions
()[
'version'
]
from
.progress_report
import
(
# noqa: F401
FormalProgressInterface
,
ProgressReport
,
)
__version__
=
get_versions
()[
"version"
]
del
get_versions
deprogressapi/_version.py
View file @
ecbcb64c
# This file helps to compute a version number in source trees obtained from
# git-archive tarball (such as those provided by githubs download-from-tag
# feature). Distribution tarballs (built by setup.py sdist) and build
...
...
@@ -15,6 +14,7 @@ import os
import
re
import
subprocess
import
sys
from
typing
import
Dict
def
get_keywords
():
...
...
@@ -52,23 +52,26 @@ class NotThisMethod(Exception):
"""Exception raised if a method is not valid for the current scenario."""
LONG_VERSION_PY
=
{}
LONG_VERSION_PY
:
Dict
[
str
,
str
]
=
{}
HANDLERS
=
{}
def
register_vcs_handler
(
vcs
,
method
):
# decorator
"""Decorator to mark a method as the handler for a particular VCS."""
def
decorate
(
f
):
"""Store f in HANDLERS[vcs][method]."""
if
vcs
not
in
HANDLERS
:
HANDLERS
[
vcs
]
=
{}
HANDLERS
[
vcs
][
method
]
=
f
return
f
return
decorate
def
run_command
(
commands
,
args
,
cwd
=
None
,
verbose
=
False
,
hide_stderr
=
False
,
env
=
None
):
def
run_command
(
commands
,
args
,
cwd
=
None
,
verbose
=
False
,
hide_stderr
=
False
,
env
=
None
):
"""Call the given command(s)."""
assert
isinstance
(
commands
,
list
)
p
=
None
...
...
@@ -76,10 +79,13 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False,
try
:
dispcmd
=
str
([
c
]
+
args
)
# remember shell=False, so use git.cmd on windows, not just git
p
=
subprocess
.
Popen
([
c
]
+
args
,
cwd
=
cwd
,
env
=
env
,
stdout
=
subprocess
.
PIPE
,
stderr
=
(
subprocess
.
PIPE
if
hide_stderr
else
None
))
p
=
subprocess
.
Popen
(
[
c
]
+
args
,
cwd
=
cwd
,
env
=
env
,
stdout
=
subprocess
.
PIPE
,
stderr
=
(
subprocess
.
PIPE
if
hide_stderr
else
None
),
)
break
except
EnvironmentError
:
e
=
sys
.
exc_info
()[
1
]
...
...
@@ -116,16 +122,22 @@ def versions_from_parentdir(parentdir_prefix, root, verbose):
for
i
in
range
(
3
):
dirname
=
os
.
path
.
basename
(
root
)
if
dirname
.
startswith
(
parentdir_prefix
):
return
{
"version"
:
dirname
[
len
(
parentdir_prefix
):],
"full-revisionid"
:
None
,
"dirty"
:
False
,
"error"
:
None
,
"date"
:
None
}
return
{
"version"
:
dirname
[
len
(
parentdir_prefix
)
:],
"full-revisionid"
:
None
,
"dirty"
:
False
,
"error"
:
None
,
"date"
:
None
,
}
else
:
rootdirs
.
append
(
root
)
root
=
os
.
path
.
dirname
(
root
)
# up a level
if
verbose
:
print
(
"Tried directories %s but none started with prefix %s"
%
(
str
(
rootdirs
),
parentdir_prefix
))
print
(
"Tried directories %s but none started with prefix %s"
%
(
str
(
rootdirs
),
parentdir_prefix
)
)
raise
NotThisMethod
(
"rootdir doesn't start with parentdir_prefix"
)
...
...
@@ -181,7 +193,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
# starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
# just "foo-1.0". If we see a "tag: " prefix, prefer those.
TAG
=
"tag: "
tags
=
set
([
r
[
len
(
TAG
):]
for
r
in
refs
if
r
.
startswith
(
TAG
)])
tags
=
set
([
r
[
len
(
TAG
)
:]
for
r
in
refs
if
r
.
startswith
(
TAG
)])
if
not
tags
:
# Either we're using git < 1.8.3, or there really are no tags. We use
# a heuristic: assume all version tags have a digit. The old git %d
...
...
@@ -190,7 +202,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
# between branches and tags. By ignoring refnames without digits, we
# filter out many common branch names like "release" and
# "stabilization", as well as "HEAD" and "master".
tags
=
set
([
r
for
r
in
refs
if
re
.
search
(
r
'
\d
'
,
r
)])
tags
=
set
([
r
for
r
in
refs
if
re
.
search
(
r
"
\d
"
,
r
)])
if
verbose
:
print
(
"discarding '%s', no digits"
%
","
.
join
(
refs
-
tags
))
if
verbose
:
...
...
@@ -198,19 +210,26 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
for
ref
in
sorted
(
tags
):
# sorting will prefer e.g. "2.0" over "2.0rc1"
if
ref
.
startswith
(
tag_prefix
):
r
=
ref
[
len
(
tag_prefix
):]
r
=
ref
[
len
(
tag_prefix
)
:]
if
verbose
:
print
(
"picking %s"
%
r
)
return
{
"version"
:
r
,
"full-revisionid"
:
keywords
[
"full"
].
strip
(),
"dirty"
:
False
,
"error"
:
None
,
"date"
:
date
}
return
{
"version"
:
r
,
"full-revisionid"
:
keywords
[
"full"
].
strip
(),
"dirty"
:
False
,
"error"
:
None
,
"date"
:
date
,
}
# no suitable tags, so version is "0+unknown", but full hex is still there
if
verbose
:
print
(
"no suitable tags, using unknown + full revision id"
)
return
{
"version"
:
"0+unknown"
,
"full-revisionid"
:
keywords
[
"full"
].
strip
(),
"dirty"
:
False
,
"error"
:
"no suitable tags"
,
"date"
:
None
}
return
{
"version"
:
"0+unknown"
,
"full-revisionid"
:
keywords
[
"full"
].
strip
(),
"dirty"
:
False
,
"error"
:
"no suitable tags"
,
"date"
:
None
,
}
@
register_vcs_handler
(
"git"
,
"pieces_from_vcs"
)
...
...
@@ -225,8 +244,9 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
if
sys
.
platform
==
"win32"
:
GITS
=
[
"git.cmd"
,
"git.exe"
]
out
,
rc
=
run_command
(
GITS
,
[
"rev-parse"
,
"--git-dir"
],
cwd
=
root
,
hide_stderr
=
True
)
out
,
rc
=
run_command
(
GITS
,
[
"rev-parse"
,
"--git-dir"
],
cwd
=
root
,
hide_stderr
=
True
)
if
rc
!=
0
:
if
verbose
:
print
(
"Directory %s not under git control"
%
root
)
...
...
@@ -234,10 +254,19 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
# if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
# if there isn't one, this yields HEX[-dirty] (no NUM)
describe_out
,
rc
=
run_command
(
GITS
,
[
"describe"
,
"--tags"
,
"--dirty"
,
"--always"
,
"--long"
,
"--match"
,
"%s*"
%
tag_prefix
],
cwd
=
root
)
describe_out
,
rc
=
run_command
(
GITS
,
[
"describe"
,
"--tags"
,
"--dirty"
,
"--always"
,
"--long"
,
"--match"
,
"%s*"
%
tag_prefix
,
],
cwd
=
root
,
)
# --long was added in git-1.5.5
if
describe_out
is
None
:
raise
NotThisMethod
(
"'git describe' failed"
)
...
...
@@ -260,17 +289,18 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
dirty
=
git_describe
.
endswith
(
"-dirty"
)
pieces
[
"dirty"
]
=
dirty
if
dirty
:
git_describe
=
git_describe
[:
git_describe
.
rindex
(
"-dirty"
)]
git_describe
=
git_describe
[:
git_describe
.
rindex
(
"-dirty"
)]
# now we have TAG-NUM-gHEX or HEX
if
"-"
in
git_describe
:
# TAG-NUM-gHEX
mo
=
re
.
search
(
r
'
^(.+)-(\d+)-g([0-9a-f]+)$
'
,
git_describe
)
mo
=
re
.
search
(
r
"
^(.+)-(\d+)-g([0-9a-f]+)$
"
,
git_describe
)
if
not
mo
:
# unparseable. Maybe git-describe is misbehaving?
pieces
[
"error"
]
=
(
"unable to parse git-describe output: '%s'"
%
describe_out
)
pieces
[
"error"
]
=
(
"unable to parse git-describe output: '%s'"
%
describe_out
)
return
pieces
# tag
...
...
@@ -279,10 +309,12 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
if
verbose
:
fmt
=
"tag '%s' doesn't start with prefix '%s'"
print
(
fmt
%
(
full_tag
,
tag_prefix
))
pieces
[
"error"
]
=
(
"tag '%s' doesn't start with prefix '%s'"
%
(
full_tag
,
tag_prefix
))
pieces
[
"error"
]
=
"tag '%s' doesn't start with prefix '%s'"
%
(
full_tag
,
tag_prefix
,
)
return
pieces
pieces
[
"closest-tag"
]
=
full_tag
[
len
(
tag_prefix
):]
pieces
[
"closest-tag"
]
=
full_tag
[
len
(
tag_prefix
)
:]
# distance: number of commits since tag
pieces
[
"distance"
]
=
int
(
mo
.
group
(
2
))
...
...
@@ -293,13 +325,15 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
else
:
# HEX: no tags
pieces
[
"closest-tag"
]
=
None
count_out
,
rc
=
run_command
(
GITS
,
[
"rev-list"
,
"HEAD"
,
"--count"
],
cwd
=
root
)
count_out
,
rc
=
run_command
(
GITS
,
[
"rev-list"
,
"HEAD"
,
"--count"
],
cwd
=
root
)
pieces
[
"distance"
]
=
int
(
count_out
)
# total number of commits
# commit date: see ISO-8601 comment in git_versions_from_keywords()
date
=
run_command
(
GITS
,
[
"show"
,
"-s"
,
"--format=%ci"
,
"HEAD"
],
cwd
=
root
)[
0
].
strip
()
date
=
run_command
(
GITS
,
[
"show"
,
"-s"
,
"--format=%ci"
,
"HEAD"
],
cwd
=
root
)[
0
].
strip
()
pieces
[
"date"
]
=
date
.
strip
().
replace
(
" "
,
"T"
,
1
).
replace
(
" "
,
""
,
1
)
return
pieces
...
...
@@ -330,8 +364,7 @@ def render_pep440(pieces):
rendered
+=
".dirty"
else
:
# exception #1
rendered
=
"0+untagged.%d.g%s"
%
(
pieces
[
"distance"
],
pieces
[
"short"
])
rendered
=
"0+untagged.%d.g%s"
%
(
pieces
[
"distance"
],
pieces
[
"short"
])
if
pieces
[
"dirty"
]:
rendered
+=
".dirty"
return
rendered
...
...
@@ -445,11 +478,13 @@ def render_git_describe_long(pieces):
def
render
(
pieces
,
style
):
"""Render the given version pieces into the requested style."""
if
pieces
[
"error"
]:
return
{
"version"
:
"unknown"
,
"full-revisionid"
:
pieces
.
get
(
"long"
),
"dirty"
:
None
,
"error"
:
pieces
[
"error"
],
"date"
:
None
}
return
{
"version"
:
"unknown"
,
"full-revisionid"
:
pieces
.
get
(
"long"
),
"dirty"
:
None
,
"error"
:
pieces
[
"error"
],
"date"
:
None
,
}
if
not
style
or
style
==
"default"
:
style
=
"pep440"
# the default
...
...
@@ -469,9 +504,13 @@ def render(pieces, style):
else
:
raise
ValueError
(
"unknown style '%s'"
%
style
)
return
{
"version"
:
rendered
,
"full-revisionid"
:
pieces
[
"long"
],
"dirty"
:
pieces
[
"dirty"
],
"error"
:
None
,
"date"
:
pieces
.
get
(
"date"
)}
return
{
"version"
:
rendered
,
"full-revisionid"
:
pieces
[
"long"
],
"dirty"
:
pieces
[
"dirty"
],
"error"
:
None
,
"date"
:
pieces
.
get
(
"date"
),
}
def
get_versions
():
...
...
@@ -485,8 +524,9 @@ def get_versions():
verbose
=
cfg
.
verbose
try
:
return
git_versions_from_keywords
(
get_keywords
(),
cfg
.
tag_prefix
,
verbose
)
return
git_versions_from_keywords
(
get_keywords
(),
cfg
.
tag_prefix
,
verbose
)
except
NotThisMethod
:
pass
...
...
@@ -495,13 +535,16 @@ def get_versions():
# versionfile_source is the relative path from the top of the source
# tree (where the .git directory might live) to this file. Invert
# this to find the root from __file__.
for
i
in
cfg
.
versionfile_source
.
split
(
'/'
):
for
i
in
cfg
.
versionfile_source
.
split
(
"/"
):
root
=
os
.
path
.
dirname
(
root
)
except
NameError
:
return
{
"version"
:
"0+unknown"
,
"full-revisionid"
:
None
,
"dirty"
:
None
,
"error"
:
"unable to find root of source tree"
,
"date"
:
None
}
return
{
"version"
:
"0+unknown"
,
"full-revisionid"
:
None
,
"dirty"
:
None
,
"error"
:
"unable to find root of source tree"
,
"date"
:
None
,
}
try
:
pieces
=
git_pieces_from_vcs
(
cfg
.
tag_prefix
,
root
,
verbose
)
...
...
@@ -515,6 +558,10 @@ def get_versions():
except
NotThisMethod
:
pass
return
{
"version"
:
"0+unknown"
,
"full-revisionid"
:
None
,
"dirty"
:
None
,
"error"
:
"unable to compute version"
,
"date"
:
None
}
return
{
"version"
:
"0+unknown"
,
"full-revisionid"
:
None
,
"dirty"
:
None
,
"error"
:
"unable to compute version"
,
"date"
:
None
,
}
deprogressapi/progress_report.py
View file @
ecbcb64c
from
typing
import
List
import
abc
import
json
from
typing
import
List
def
report_to_json
(
report
:
'ProgressReport'
)
->
dict
:
def
report_to_json
(
report
:
"ProgressReport"
)
->
dict
:
return
{
'
step_message
'
:
report
.
step_message
,
'
steps
'
:
report
.
steps
,
'
completed
'
:
report
.
completed
,
'
children
'
:
[
report_to_json
(
child
)
for
child
in
report
.
children
]
"
step_message
"
:
report
.
step_message
,
"
steps
"
:
report
.
steps
,
"
completed
"
:
report
.
completed
,
"
children
"
:
[
report_to_json
(
child
)
for
child
in
report
.
children
]
,
}
...
...
@@ -15,7 +16,7 @@ class FormalProgressInterface(metaclass=abc.ABCMeta):
def
__init__
(
self
):
self
.
__root_progress
=
None
def
set_root_progress_report
(
self
,
progress_report_root
:
'
ProgressReport
'
):
def
set_root_progress_report
(
self
,
progress_report_root
:
"
ProgressReport
"
):
self
.
__root_progress
=
progress_report_root
self
.
submit
()
...
...
@@ -35,7 +36,12 @@ class FormalProgressInterface(metaclass=abc.ABCMeta):
class
ProgressReport
:
def
__init__
(
self
,
step_message
:
str
,
send_handler
:
FormalProgressInterface
,
steps
:
int
=
0
):
def
__init__
(
self
,
step_message
:
str
,
send_handler
:
FormalProgressInterface
,
steps
:
int
=
0
,
):
self
.
step_message
=
step_message
self
.
steps
=
steps
self
.
send_handler
=
send_handler
...
...
@@ -52,9 +58,14 @@ class ProgressReport:
# re-submit the now completed report
self
.
send_handler
.
submit
()
def
create_subreport
(
self
,
step_message
:
str
,
steps
:
int
=
0
)
->
'ProgressReport'
:
child
=
ProgressReport
(
step_message
=
step_message
,
send_handler
=
self
.
send_handler
,
steps
=
steps
)
def
create_subreport
(
self
,
step_message
:
str
,
steps
:
int
=
0
)
->
"ProgressReport"
:
child
=
ProgressReport
(
step_message
=
step_message
,
send_handler
=
self
.
send_handler
,
steps
=
steps
,
)
self
.
children
.
append
(
child
)
self
.
send_handler
.
submit
()
return
child
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment