Skip to content

Commit 6b9093d

Browse files
committed
Format Python code with Black
References: * [AC-216] Apply Black to all casework Python code bases Acked-by: kchason <kchason@users.noreply.github.com> Signed-off-by: Alex Nelson <alexander.nelson@nist.gov>
1 parent ddf7a32 commit 6b9093d

File tree

18 files changed

+540
-424
lines changed

18 files changed

+540
-424
lines changed

case_utils/__init__.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,13 @@
2020

2121
from . import local_uuid
2222

23+
2324
def guess_format(
24-
fpath : str,
25-
fmap : typing.Optional[typing.Dict[str, str]] = None
25+
fpath: str, fmap: typing.Optional[typing.Dict[str, str]] = None
2626
) -> typing.Optional[str]:
27-
warnings.warn("The functionality in case_utils.guess_format is now upstream. Please revise your code to use rdflib.util.guess_format. The function arguments remain the same. case_utils.guess_format will be removed in case_utils 0.4.0.", DeprecationWarning)
27+
warnings.warn(
28+
"The functionality in case_utils.guess_format is now upstream. Please revise your code to use rdflib.util.guess_format. The function arguments remain the same. case_utils.guess_format will be removed in case_utils 0.4.0.",
29+
DeprecationWarning,
30+
)
2831

2932
return rdflib.util.guess_format(fpath, fmap) # type: ignore

case_utils/case_file/__init__.py

Lines changed: 91 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -31,28 +31,33 @@
3131

3232
NS_RDF = rdflib.RDF
3333
NS_UCO_CORE = rdflib.Namespace("https://unifiedcyberontology.org/ontology/uco/core#")
34-
NS_UCO_OBSERVABLE = rdflib.Namespace("https://unifiedcyberontology.org/ontology/uco/observable#")
34+
NS_UCO_OBSERVABLE = rdflib.Namespace(
35+
"https://unifiedcyberontology.org/ontology/uco/observable#"
36+
)
3537
NS_UCO_TYPES = rdflib.Namespace("https://unifiedcyberontology.org/ontology/uco/types#")
36-
NS_UCO_VOCABULARY = rdflib.Namespace("https://unifiedcyberontology.org/ontology/uco/vocabulary#")
38+
NS_UCO_VOCABULARY = rdflib.Namespace(
39+
"https://unifiedcyberontology.org/ontology/uco/vocabulary#"
40+
)
3741
NS_XSD = rdflib.XSD
3842

3943
# Shortcut syntax for defining an immutable named tuple is noted here:
4044
# https://docs.python.org/3/library/typing.html#typing.NamedTuple
4145
# via the "See also" box here: https://docs.python.org/3/library/collections.html#collections.namedtuple
4246
class HashDict(typing.NamedTuple):
43-
filesize : int
44-
md5 : str
45-
sha1 : str
46-
sha256 : str
47-
sha512 : str
47+
filesize: int
48+
md5: str
49+
sha1: str
50+
sha256: str
51+
sha512: str
52+
4853

4954
def create_file_node(
50-
graph : rdflib.Graph,
51-
filepath : str,
52-
node_iri : typing.Optional[str] = None,
53-
node_prefix : str = DEFAULT_PREFIX,
54-
disable_hashes : bool = False,
55-
disable_mtime : bool = False
55+
graph: rdflib.Graph,
56+
filepath: str,
57+
node_iri: typing.Optional[str] = None,
58+
node_prefix: str = DEFAULT_PREFIX,
59+
disable_hashes: bool = False,
60+
disable_mtime: bool = False,
5661
) -> rdflib.URIRef:
5762
r"""
5863
This function characterizes the file at filepath.
@@ -82,65 +87,49 @@ def create_file_node(
8287
node_slug = "file-" + case_utils.local_uuid.local_uuid()
8388
node_iri = rdflib.Namespace(node_prefix)[node_slug]
8489
n_file = rdflib.URIRef(node_iri)
85-
graph.add((
86-
n_file,
87-
NS_RDF.type,
88-
NS_UCO_OBSERVABLE.File
89-
))
90+
graph.add((n_file, NS_RDF.type, NS_UCO_OBSERVABLE.File))
9091

9192
basename = os.path.basename(filepath)
9293
literal_basename = rdflib.Literal(basename)
9394

9495
file_stat = os.stat(filepath)
9596
n_file_facet = rdflib.BNode()
96-
graph.add((
97-
n_file_facet,
98-
NS_RDF.type,
99-
NS_UCO_OBSERVABLE.FileFacet,
100-
))
101-
graph.add((
102-
n_file_facet,
103-
NS_UCO_OBSERVABLE.fileName,
104-
literal_basename
105-
))
106-
graph.add((
107-
n_file_facet,
108-
NS_UCO_OBSERVABLE.sizeInBytes,
109-
rdflib.Literal(int(file_stat.st_size))
110-
))
111-
graph.add((
112-
n_file,
113-
NS_UCO_CORE.hasFacet,
114-
n_file_facet
115-
))
97+
graph.add(
98+
(
99+
n_file_facet,
100+
NS_RDF.type,
101+
NS_UCO_OBSERVABLE.FileFacet,
102+
)
103+
)
104+
graph.add((n_file_facet, NS_UCO_OBSERVABLE.fileName, literal_basename))
105+
graph.add(
106+
(
107+
n_file_facet,
108+
NS_UCO_OBSERVABLE.sizeInBytes,
109+
rdflib.Literal(int(file_stat.st_size)),
110+
)
111+
)
112+
graph.add((n_file, NS_UCO_CORE.hasFacet, n_file_facet))
116113

117114
if not disable_mtime:
118-
mtime_datetime = datetime.datetime.fromtimestamp(file_stat.st_mtime, tz=datetime.timezone.utc)
115+
mtime_datetime = datetime.datetime.fromtimestamp(
116+
file_stat.st_mtime, tz=datetime.timezone.utc
117+
)
119118
str_mtime = mtime_datetime.isoformat()
120119
literal_mtime = rdflib.Literal(str_mtime, datatype=NS_XSD.dateTime)
121-
graph.add((
122-
n_file_facet,
123-
NS_UCO_OBSERVABLE.modifiedTime,
124-
literal_mtime
125-
))
120+
graph.add((n_file_facet, NS_UCO_OBSERVABLE.modifiedTime, literal_mtime))
126121

127122
if not disable_hashes:
128123
n_contentdata_facet = rdflib.BNode()
129-
graph.add((
130-
n_file,
131-
NS_UCO_CORE.hasFacet,
132-
n_contentdata_facet
133-
))
134-
graph.add((
135-
n_contentdata_facet,
136-
NS_RDF.type,
137-
NS_UCO_OBSERVABLE.ContentDataFacet
138-
))
124+
graph.add((n_file, NS_UCO_CORE.hasFacet, n_contentdata_facet))
125+
graph.add(
126+
(n_contentdata_facet, NS_RDF.type, NS_UCO_OBSERVABLE.ContentDataFacet)
127+
)
139128

140129
# Compute hashes until they are re-computed and match once. (This is a lesson learned from working with a NAS that had a subtly faulty network cable.)
141130

142-
successful_hashdict : typing.Optional[HashDict] = None
143-
last_hashdict : typing.Optional[HashDict] = None
131+
successful_hashdict: typing.Optional[HashDict] = None
132+
last_hashdict: typing.Optional[HashDict] = None
144133
for attempt_no in [0, 1, 2, 3]:
145134
# Hash file's contents.
146135
# This hashing logic was partially copied from DFXML's walk_to_dfxml.py.
@@ -169,11 +158,11 @@ def create_file_node(
169158
if not stashed_error is None:
170159
raise stashed_error
171160
current_hashdict = HashDict(
172-
byte_tally,
173-
md5obj.hexdigest(),
174-
sha1obj.hexdigest(),
175-
sha256obj.hexdigest(),
176-
sha512obj.hexdigest()
161+
byte_tally,
162+
md5obj.hexdigest(),
163+
sha1obj.hexdigest(),
164+
sha256obj.hexdigest(),
165+
sha512obj.hexdigest(),
177166
)
178167
if last_hashdict == current_hashdict:
179168
successful_hashdict = current_hashdict
@@ -187,54 +176,56 @@ def create_file_node(
187176
if successful_hashdict.filesize != file_stat.st_size:
188177
# TODO - Discuss with AC whether this should be something stronger, like an assertion error.
189178
warnings.warn(
190-
"Inode file size and hashed file sizes disagree: %d vs. %d." % (
191-
file_stat.st_size,
192-
successful_hashdict.filesize
193-
)
179+
"Inode file size and hashed file sizes disagree: %d vs. %d."
180+
% (file_stat.st_size, successful_hashdict.filesize)
194181
)
195182
# TODO - Discuss whether this property should be recorded even if hashes are not attempted.
196-
graph.add((
197-
n_contentdata_facet,
198-
NS_UCO_OBSERVABLE.sizeInBytes,
199-
rdflib.Literal(successful_hashdict.filesize)
200-
))
183+
graph.add(
184+
(
185+
n_contentdata_facet,
186+
NS_UCO_OBSERVABLE.sizeInBytes,
187+
rdflib.Literal(successful_hashdict.filesize),
188+
)
189+
)
201190

202191
# Add confirmed hashes into graph.
203192
for key in successful_hashdict._fields:
204193
if not key in ("md5", "sha1", "sha256", "sha512"):
205194
continue
206195
n_hash = rdflib.BNode()
207-
graph.add((
208-
n_contentdata_facet,
209-
NS_UCO_OBSERVABLE.hash,
210-
n_hash
211-
))
212-
graph.add((
213-
n_hash,
214-
NS_RDF.type,
215-
NS_UCO_TYPES.Hash
216-
))
217-
graph.add((
218-
n_hash,
219-
NS_UCO_TYPES.hashMethod,
220-
rdflib.Literal(key.upper(), datatype=NS_UCO_VOCABULARY.HashNameVocab)
221-
))
196+
graph.add((n_contentdata_facet, NS_UCO_OBSERVABLE.hash, n_hash))
197+
graph.add((n_hash, NS_RDF.type, NS_UCO_TYPES.Hash))
198+
graph.add(
199+
(
200+
n_hash,
201+
NS_UCO_TYPES.hashMethod,
202+
rdflib.Literal(
203+
key.upper(), datatype=NS_UCO_VOCABULARY.HashNameVocab
204+
),
205+
)
206+
)
222207
hash_value = getattr(successful_hashdict, key)
223-
graph.add((
224-
n_hash,
225-
NS_UCO_TYPES.hashValue,
226-
rdflib.Literal(hash_value.upper(), datatype=NS_XSD.hexBinary)
227-
))
208+
graph.add(
209+
(
210+
n_hash,
211+
NS_UCO_TYPES.hashValue,
212+
rdflib.Literal(hash_value.upper(), datatype=NS_XSD.hexBinary),
213+
)
214+
)
228215

229216
return n_file
230217

218+
231219
def main() -> None:
232220
import argparse
221+
233222
parser = argparse.ArgumentParser()
234223
parser.add_argument("--base-prefix", default=DEFAULT_PREFIX)
235224
parser.add_argument("--disable-hashes", action="store_true")
236225
parser.add_argument("--disable-mtime", action="store_true")
237-
parser.add_argument("--output-format", help="Override extension-based format guesser.")
226+
parser.add_argument(
227+
"--output-format", help="Override extension-based format guesser."
228+
)
238229
parser.add_argument("out_graph")
239230
parser.add_argument("in_file")
240231
args = parser.parse_args()
@@ -257,24 +248,23 @@ def main() -> None:
257248
else:
258249
output_format = args.output_format
259250

260-
serialize_kwargs : typing.Dict[str, typing.Any] = {
261-
"format": output_format
262-
}
251+
serialize_kwargs: typing.Dict[str, typing.Any] = {"format": output_format}
263252
if output_format == "json-ld":
264-
context_dictionary = {k:v for (k,v) in graph.namespace_manager.namespaces()}
253+
context_dictionary = {k: v for (k, v) in graph.namespace_manager.namespaces()}
265254
serialize_kwargs["context"] = context_dictionary
266255

267256
node_iri = NS_BASE["file-" + case_utils.local_uuid.local_uuid()]
268257
n_file = create_file_node(
269-
graph,
270-
args.in_file,
271-
node_iri=node_iri,
272-
node_prefix=args.base_prefix,
273-
disable_hashes=args.disable_hashes,
274-
disable_mtime=args.disable_mtime
258+
graph,
259+
args.in_file,
260+
node_iri=node_iri,
261+
node_prefix=args.base_prefix,
262+
disable_hashes=args.disable_hashes,
263+
disable_mtime=args.disable_mtime,
275264
)
276265

277266
graph.serialize(args.out_graph, **serialize_kwargs)
278267

268+
279269
if __name__ == "__main__":
280270
main()

case_utils/case_sparql_construct/__init__.py

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,36 +31,39 @@
3131

3232
_logger = logging.getLogger(os.path.basename(__file__))
3333

34+
3435
def main() -> None:
3536
parser = argparse.ArgumentParser()
3637

3738
# Configure debug logging before running parse_args, because there could be an error raised before the construction of the argument parser.
38-
logging.basicConfig(level=logging.DEBUG if ("--debug" in sys.argv or "-d" in sys.argv) else logging.INFO)
39+
logging.basicConfig(
40+
level=logging.DEBUG
41+
if ("--debug" in sys.argv or "-d" in sys.argv)
42+
else logging.INFO
43+
)
3944

4045
built_version_choices_list = ["none", "case-" + CURRENT_CASE_VERSION]
4146

47+
parser.add_argument("-d", "--debug", action="store_true")
4248
parser.add_argument(
43-
"-d",
44-
"--debug",
45-
action="store_true"
49+
"--built-version",
50+
choices=tuple(built_version_choices_list),
51+
default="case-" + CURRENT_CASE_VERSION,
52+
help="Ontology version to use to supplement query, such as for subclass querying. Does not require networking to use. Default is most recent CASE release.",
4653
)
4754
parser.add_argument(
48-
"--built-version",
49-
choices=tuple(built_version_choices_list),
50-
default="case-"+CURRENT_CASE_VERSION,
51-
help="Ontology version to use to supplement query, such as for subclass querying. Does not require networking to use. Default is most recent CASE release."
55+
"--disallow-empty-results",
56+
action="store_true",
57+
help="Raise error if no results are returned for query.",
5258
)
5359
parser.add_argument(
54-
"--disallow-empty-results",
55-
action="store_true",
56-
help="Raise error if no results are returned for query."
60+
"--output-format", help="Override extension-based format guesser."
5761
)
62+
parser.add_argument("out_graph")
5863
parser.add_argument(
59-
"--output-format",
60-
help="Override extension-based format guesser."
64+
"in_sparql",
65+
help="File containing a SPARQL CONSTRUCT query. Note that prefixes not mapped with a PREFIX statement will be mapped according to their first occurrence among input graphs.",
6166
)
62-
parser.add_argument("out_graph")
63-
parser.add_argument("in_sparql", help="File containing a SPARQL CONSTRUCT query. Note that prefixes not mapped with a PREFIX statement will be mapped according to their first occurrence among input graphs.")
6467
parser.add_argument("in_graph", nargs="+")
6568
args = parser.parse_args()
6669

@@ -72,7 +75,7 @@ def main() -> None:
7275
out_graph = rdflib.Graph()
7376

7477
# Inherit prefixes defined in input context dictionary.
75-
nsdict = {k:v for (k,v) in in_graph.namespace_manager.namespaces()}
78+
nsdict = {k: v for (k, v) in in_graph.namespace_manager.namespaces()}
7679
for prefix in sorted(nsdict.keys()):
7780
out_graph.bind(prefix, nsdict[prefix])
7881

@@ -83,9 +86,13 @@ def main() -> None:
8386
assert not construct_query_text is None
8487

8588
if "subClassOf" in construct_query_text:
86-
case_utils.ontology.load_subclass_hierarchy(in_graph, built_version=args.built_version)
89+
case_utils.ontology.load_subclass_hierarchy(
90+
in_graph, built_version=args.built_version
91+
)
8792

88-
construct_query_object = rdflib.plugins.sparql.prepareQuery(construct_query_text, initNs=nsdict)
93+
construct_query_object = rdflib.plugins.sparql.prepareQuery(
94+
construct_query_text, initNs=nsdict
95+
)
8996

9097
# https://rdfextras.readthedocs.io/en/latest/working_with.html
9198
construct_query_result = in_graph.query(construct_query_object)
@@ -102,14 +109,15 @@ def main() -> None:
102109
else:
103110
output_format = args.output_format
104111

105-
serialize_kwargs : typing.Dict[str, typing.Any] = {
106-
"format": output_format
107-
}
112+
serialize_kwargs: typing.Dict[str, typing.Any] = {"format": output_format}
108113
if output_format == "json-ld":
109-
context_dictionary = {k:v for (k,v) in out_graph.namespace_manager.namespaces()}
114+
context_dictionary = {
115+
k: v for (k, v) in out_graph.namespace_manager.namespaces()
116+
}
110117
serialize_kwargs["context"] = context_dictionary
111118

112119
out_graph.serialize(args.out_graph, **serialize_kwargs)
113120

121+
114122
if __name__ == "__main__":
115123
main()

0 commit comments

Comments
 (0)