Click here to go to the corresponding page for the latest version of DIALS
Source code for dxtbx.serialize.dump
from __future__ import absolute_import, division, print_function
import json
import re
import textwrap
import warnings
from dxtbx.datablock import DataBlockDumper
from dxtbx.serialize.imageset import imageset_to_dict
[docs]def compact_simple_list(match):
"""Callback function. Given a simple list match, compact it and ensure
that it wraps around by 80 characters.
Params:
match The regular expression match
Returns:
The string to replace the expression with
"""
# Calculate the initial indent as the length of the first match group
initial_indent = len(match.group(1))
# Get the lines in the match
lines = match.group(2).splitlines()
# Set the indent by finding the indent of the first lines
if len(lines) > 1:
subsequent_indent = len(lines[1]) - len(lines[1].lstrip())
else:
subsequent_indent = 0
# Strip whitespace from the lines
lines = [l.strip() for l in lines]
# Create and return the string wrapped about 80 chars
list_string = "\n".join(
textwrap.wrap(
" ".join(lines),
80,
initial_indent=" " * initial_indent,
subsequent_indent=" " * subsequent_indent,
)
).lstrip()
# Return the string
return match.group(1) + list_string
[docs]def compact_simple_lists(string):
"""Find simple lists in the string and compact.
Params:
string The input JSON string
Returns:
The output JSON string
"""
return re.sub(r'(.*"\w+".*:.*)(\[[^\{\}\[\]]*\])', compact_simple_list, string)
[docs]def imageset_to_string(obj, compact=False):
"""Dump the given object to string.
Params:
obj The imageset
compact Write in compact representation
Returns:
The JSON string
"""
if compact:
return json.dumps(
imageset_to_dict(obj), separators=(",", ":"), ensure_ascii=True
)
else:
return json.dumps(imageset_to_dict(obj), indent=2, ensure_ascii=True)
[docs]def imageset(obj, outfile, compact=False):
"""Dump the given object to file.
Params:
obj The imageset to dump
outfile The output file name or file object
compact Write in compact representation
"""
# If the input is a string then open and write to that file
if isinstance(outfile, str):
with open(outfile, "wb") as outfile:
outfile.write(imageset_to_string(obj, compact).encode())
# Otherwise assume the input is a file and write to it
else:
outfile.write(imageset_to_string(obj, compact).encode())
[docs]def datablock(obj, outfile, **kwargs):
"""Dump the given object to file."""
dump = DataBlockDumper(obj)
dump.as_file(outfile, **kwargs)
[docs]def experiment_list(obj, outfile):
"""Dump an experiment list."""
warnings.warn(
"use .as_file() on the experimentlist directly",
DeprecationWarning,
stacklevel=2,
)
obj.as_file(outfile)