Skip to content

Commit ab24161

Browse files
committed
Rename some identifiers to snake_case, refactor in ZipFolder
1 parent b0d68a8 commit ab24161

8 files changed

Lines changed: 91 additions & 83 deletions

File tree

Stoner/compat.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,12 @@ def get_filedialog(what="file", **opts):
124124
Returns:
125125
A file name or directory or list of files.
126126
"""
127-
from .tools.widgets import fileDialog
127+
from .tools.widgets import file_dialog
128128

129129
funcs = {"file": "OpenFile", "directory": "SelectDirectory", "files": "OpenFiles", "save": "SaveFile"}
130130
if what not in funcs:
131131
raise RuntimeError(f"Unable to recognise required file dialog type:{what}")
132-
return fileDialog.open_dialog(mode=funcs[what], **opts)
132+
return file_dialog.open_dialog(mode=funcs[what], **opts)
133133

134134

135135
if np_version.major >= 2:

Stoner/folders/hdf5.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def getlist(self, recursive=None, directory=None, flatten=False, **kwargs): # p
160160
# At this point directory contains an open h5py.File object, or possibly a group
161161
directory.visititems(self._visit_func)
162162
if flatten:
163-
self.flatten()
163+
self.flatten() # pylint: disable=no-member
164164
if closeme:
165165
self.File.close()
166166
self.File = None

Stoner/folders/zip.py

Lines changed: 62 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,56 @@
99
import fnmatch
1010
import zipfile as zf
1111
from os import path
12+
from pathlib import Path
1213

13-
from ..compat import _pattern_type, get_filedialog, path_types
14+
from ..compat import _pattern_type, get_filedialog
1415
from ..core.data import Data
1516
from ..formats.utils.zip import test_is_zip
1617
from .core import BaseFolder
1718
from .mixins import DiskBasedFolderMixin
1819
from .utils import pathjoin
1920

2021

22+
def _prune_list(p, files):
23+
"""Prune the files list of entries that match pattern p."""
24+
if isinstance(p, str):
25+
for f in list(fnmatch.filter(files, p)):
26+
del files[files.index(f)]
27+
if isinstance(p, _pattern_type):
28+
matched = []
29+
# For reg expts we iterate over all files, but we can't delete matched
30+
# files as we go as we're iterating over them - so we store the
31+
# indices and delete them later.
32+
for f in files:
33+
if p.search(f):
34+
matched.append(files.index(f))
35+
matched.sort(reverse=True)
36+
for i in matched: # reverse sort the matching indices to safely delete
37+
del files[i]
38+
39+
40+
def _build_list(fldr, p, files):
41+
"""Add matching files from the list to folder if matching pattern p."""
42+
if isinstance(p, str):
43+
for f in fnmatch.filter(files, p):
44+
del files[files.index(f)]
45+
f.replace(path.sep, "/")
46+
fldr.append(f)
47+
elif isinstance(p, _pattern_type):
48+
matched = []
49+
# For reg expts we iterate over all files, but we can't delete matched
50+
# files as we go as we're iterating over them - so we store the
51+
# indices and delete them later.
52+
for ix, f in enumerate(files):
53+
if p.search(f):
54+
f.replace(path.sep, "/")
55+
fldr.append(f)
56+
else:
57+
matched.append(ix)
58+
for i in reversed(matched): # reverse sort the matching indices to safely delete
59+
del files[i]
60+
61+
2162
class ZipFolder(DiskBasedFolderMixin, BaseFolder):
2263
"""A sub class of DataFile that sores itself in a zip file.
2364
@@ -95,72 +136,39 @@ def getlist(self, recursive=None, directory=None, flatten=None, **_):
95136
if flatten is None:
96137
flatten = self.flat
97138

98-
if self.File is None and directory is None:
99-
self.File = zf.ZipFile(self._zip_file_dialog(), "r")
100-
close_me = True
101-
elif isinstance(directory, zf.ZipFile):
102-
if directory.fp:
139+
match directory:
140+
case None if self.File is None:
141+
self.File = zf.ZipFile(self._zip_file_dialog(), "r") # pylint: disable=R1732
142+
close_me = True
143+
case zf.ZipFile() if directory.fp:
103144
self.File = directory
104145
close_me = False
105-
else:
106-
self.File = zf.ZipFile(directory, "r")
146+
case zf.ZipFile():
147+
self.File = zf.ZipFile(directory, "r") # pylint: disable=R1732
107148
close_me = True
108-
elif isinstance(directory, path_types) and path.isdir(directory): # Fall back to DataFolder
109-
return super().getlist(recursive=recursive, directory=directory, flatten=flatten)
110-
elif isinstance(directory, path_types) and zf.is_zipfile(directory):
111-
self.File = zf.ZipFile(directory, "r")
112-
close_me = True
113-
elif isinstance(self.File, zf.ZipFile):
114-
if self.File.fp:
149+
case str() | Path() if path.isdir(directory):
150+
return super().getlist(recursive=recursive, directory=directory, flatten=flatten)
151+
case str() | Path() if zf.is_zipfile(directory):
152+
self.File = zf.ZipFile(directory, "r") # pylint: disable=R1732
153+
close_me = True
154+
case _ if isinstance(self.File, zf.ZipFile) and self.File.fp:
115155
close_me = False
116-
else:
156+
case _ if isinstance(self.File, zf.ZipFile):
117157
self.File = zf.ZipFile(self.File.filename, "r") # pylint: disable=R1732
118158
close_me = True
119-
else:
120-
raise IOError(f"{directory} does not appear to be zip file!")
159+
case _:
160+
raise IOError(f"{directory} does not appear to be zip file!")
121161
# At this point directory contains an open h5py.File object, or possibly a group
122162
self.path = self.File.filename
123163
files = [x.filename for x in self.File.filelist]
124164
for p in self.exclude: # Remove excluded files
125-
if isinstance(p, str):
126-
for f in list(fnmatch.filter(files, p)):
127-
del files[files.index(f)]
128-
if isinstance(p, _pattern_type):
129-
matched = []
130-
# For reg expts we iterate over all files, but we can't delete matched
131-
# files as we go as we're iterating over them - so we store the
132-
# indices and delete them later.
133-
for f in files:
134-
if p.search(f):
135-
matched.append(files.index(f))
136-
matched.sort(reverse=True)
137-
for i in matched: # reverse sort the matching indices to safely delete
138-
del files[i]
139-
165+
_prune_list(p, files)
140166
for p in self.pattern: # pattern is a list of strings and regeps
141-
if isinstance(p, str):
142-
for f in fnmatch.filter(files, p):
143-
del files[files.index(f)]
144-
f.replace(path.sep, "/")
145-
self.append(f)
146-
elif isinstance(p, _pattern_type):
147-
matched = []
148-
# For reg expts we iterate over all files, but we can't delete matched
149-
# files as we go as we're iterating over them - so we store the
150-
# indices and delete them later.
151-
for ix, f in enumerate(files):
152-
if p.search(f):
153-
f.replace(path.sep, "/")
154-
self.append(f)
155-
else:
156-
matched.append(ix)
157-
for i in reversed(matched): # reverse sort the matching indices to safely delete
158-
del files[i]
159-
167+
_build_list(self, p, files)
160168
self._zip_contents = files
161169

162170
if flatten is None or not flatten:
163-
self.unflatten()
171+
self.unflatten() # pylint: disable=no-member
164172
if close_me:
165173
self.File.close()
166174
return self
@@ -260,7 +268,7 @@ def save(self, root=None):
260268
self.File.close()
261269
mode = "a" if path.exists(root) else "w"
262270
with zf.ZipFile(root, mode) as self.File:
263-
tmp = self.walk_groups(self._saver)
271+
tmp = self.walk_groups(self._saver) # pylint: disable=no-member
264272
return tmp
265273

266274
def _saver(self, f, trail):

Stoner/tools/file.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from ..core.exceptions import StonerLoadError, StonerUnrecognisedFormat
1919
from ..tools.typing import Filename
2020
from .decorators import make_Data, make_Image
21-
from .widgets import fileDialog
21+
from .widgets import file_dialog as _file_dialog
2222

2323
__all__ = [
2424
"get_hdf_loader",
@@ -152,7 +152,7 @@ def file_dialog(mode: str, filename: Filename, filetype: str) -> Union[pathlib.P
152152
mode = "SaveFile"
153153
else:
154154
mode = "SelectDirectory"
155-
filename = fileDialog.open_dialog(start=dirname, mode=mode, patterns=patterns)
155+
filename = _file_dialog.open_dialog(start=dirname, mode=mode, patterns=patterns)
156156
return filename if filename else None
157157

158158

Stoner/tools/widgets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
Code based on the PyQt5 Tutorial code,
55
"""
6-
__all__ = ["fileDialog"]
6+
__all__ = ["file_dialog"]
77
import pathlib
88
from typing import Any, Dict, Optional, Type, Union
99

@@ -253,4 +253,4 @@ def keypress(self, event):
253253
p.update({"color": col, "facecolor": col})
254254

255255

256-
fileDialog: Type[App] = App()
256+
file_dialog: Type[App] = App()

scripts/VSManalysis_v2.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def diamag_background_rem(data, N):
102102
min_harg = int(np.argmin(data[:, 1]))
103103

104104
# linear fit to saturated data (+- N points from max/min field)
105-
highFit = np.polyfit(
105+
high_fit = np.polyfit(
106106
data[max_harg - N : max_harg + N, 1],
107107
data[max_harg - N : max_harg + N, 2],
108108
1,
@@ -113,7 +113,7 @@ def diamag_background_rem(data, N):
113113
1,
114114
)
115115
# Average grad
116-
fit_grad = (highFit[0] + low_fit[0]) / 2
116+
fit_grad = (high_fit[0] + low_fit[0]) / 2
117117
# Delete linear grad from all data
118118
data[:, 2] = data[:, 2] - (fit_grad * data[:, 1])
119119
return data
@@ -128,7 +128,7 @@ def invert(data):
128128
return data
129129

130130

131-
def makeTruem(data):
131+
def make_true_m(data):
132132
"""VSM takes m from lock in X, this takes m from lock in R, useful if theta!=0."""
133133
vsm_calibration = (
134134
data.data[5, data.find_col("m (emu)")]
@@ -141,7 +141,7 @@ def makeTruem(data):
141141
return data
142142

143143

144-
def plotmH(data):
144+
def plot_m_h(data):
145145
"""Take a stoner type data source."""
146146
plot.clf()
147147
plot.xlabel("H(T)")
@@ -157,9 +157,9 @@ def split_filename(my_filename):
157157
"""
158158
for i in range(len(my_filename) - 1, -1, -1):
159159
if my_filename[i] == ".":
160-
fileName = my_filename[:i]
161-
fileExt = my_filename[i:]
162-
return [fileName, fileExt]
160+
filename = my_filename[:i]
161+
file_ext = my_filename[i:]
162+
return [filename, file_ext]
163163
return [my_filename, ""]
164164

165165

@@ -169,7 +169,7 @@ def edit_data(data, operations):
169169
return data
170170
N = int(input("Input the number of saturated data points on each arm: "))
171171
if 1 in operations:
172-
data = makeTruem(data)
172+
data = make_true_m(data)
173173
if 2 in operations:
174174
data.data = drift_eliminator(data.data, N)
175175
if 3 in operations:
@@ -234,7 +234,7 @@ def edit_data(data, operations):
234234
break
235235
fw.close()
236236
while True:
237-
plotmH(data)
237+
plot_m_h(data)
238238
if "Original m (emu)" not in data.column_headers:
239239
data.add_column(data.column("m (emu)"), "Original m (emu)")
240240
print(
@@ -250,13 +250,13 @@ def edit_data(data, operations):
250250
"5. Reflect graph in y axis \n",
251251
)
252252

253-
strOp = input("")
253+
str_op = input("")
254254
operations = [] # array of options selected
255-
for i in range(len(strOp.strip())):
256-
operations.append(int(strOp[i]))
255+
for i in range(len(str_op.strip())):
256+
operations.append(int(str_op[i]))
257257
t = data.clone # edit a copied array.
258258
t = edit_data(t, operations)
259-
plotmH(t)
259+
plot_m_h(t)
260260
what_next = input(
261261
"Press enter to save changes, r to restart or q to quit the program: "
262262
)

scripts/XMCD_Reduction.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Simple XMCD Data reduction example."""
22

3-
# pylint: disable=invalid-name, redefined-outer-name
3+
# pylint: disable=invalid-name, redefined-outer-name,no-member
44
import re
55

66
import numpy as np
@@ -141,7 +141,7 @@ def collate(grp, trail, **kwargs):
141141

142142
# Read the directory of data files and sort by run number
143143
fldr = DataFolder(directory, pattern=pattern, read_means=True)
144-
fldr.sort("run")
144+
fldr.sort("run") # pylint: disable=no-member
145145
# Remove files outside of the run number range
146146
fldr.filterout(lambda f: f["run"] > endrun or f["run"] < startrun)
147147
# group the files by position, temperatures and polarisations

tests/Stoner/tools/test_widgets.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ def dummy(mode="getOpenFileName"):
6060
app = getattr(widgets, "App")
6161
setattr(app, "modes", modes)
6262

63-
assert widgets.fileDialog.open_dialog() == ret_pth
64-
assert widgets.fileDialog.open_dialog(title="Test", start=".") == ret_pth
65-
assert widgets.fileDialog.open_dialog(patterns={"*.bad": "Very bad files"}) == ret_pth
66-
assert widgets.fileDialog.open_dialog(mode="OpenFiles") == [ret_pth]
67-
assert widgets.fileDialog.open_dialog(mode="SaveFile") is None
68-
assert widgets.fileDialog.open_dialog(mode="SelectDirectory") == ret_pth.parent
63+
assert widgets.file_dialog.open_dialog() == ret_pth
64+
assert widgets.file_dialog.open_dialog(title="Test", start=".") == ret_pth
65+
assert widgets.file_dialog.open_dialog(patterns={"*.bad": "Very bad files"}) == ret_pth
66+
assert widgets.file_dialog.open_dialog(mode="OpenFiles") == [ret_pth]
67+
assert widgets.file_dialog.open_dialog(mode="SaveFile") is None
68+
assert widgets.file_dialog.open_dialog(mode="SelectDirectory") == ret_pth.parent
6969
with pytest.raises(ValueError):
70-
widgets.fileDialog.open_dialog(mode="Whateve")
70+
widgets.file_dialog.open_dialog(mode="Whateve")
7171

7272

7373
def test_loader():

0 commit comments

Comments
 (0)