Skip to content

Commit ae9a8b2

Browse files
authored
Merge pull request #174 from stevenhua0320/deprecate-parsefile
chore: deprecate parseFile method
2 parents 3855f25 + 284bc84 commit ae9a8b2

File tree

7 files changed

+129
-14
lines changed

7 files changed

+129
-14
lines changed

news/deprecate-parsefile.rst

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
**Added:**
2+
3+
* Added ``parse_file`` method in ``structureparser.py``
4+
* Added ``parse_lines`` method in ``p_cif.py``
5+
* Added ``parse_lines`` method in ``p_auto.py``
6+
7+
**Changed:**
8+
9+
* <news item>
10+
11+
**Deprecated:**
12+
13+
* Deprecated ``parse_file`` method in ``structureparser.py`` for removal in version 4.0.0
14+
* Deprecated ``parse_file`` method in ``p_cif.py`` for removal in version 4.0.0
15+
* Deprecated ``parse_file`` method in ``p_auto.py`` for removal in version 4.0.0
16+
17+
**Removed:**
18+
19+
* <news item>
20+
21+
**Fixed:**
22+
23+
* <news item>
24+
25+
**Security:**
26+
27+
* <news item>

src/diffpy/structure/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def loadStructure(filename, fmt="auto", **kw):
9898
"""
9999

100100
p = getParser(fmt, **kw)
101-
rv = p.parseFile(filename)
101+
rv = p.parse_file(filename)
102102
return rv
103103

104104

src/diffpy/structure/parsers/p_auto.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@
3232
"parse_lines",
3333
removal_version,
3434
)
35+
parseFile_deprecation_msg = build_deprecation_message(
36+
base,
37+
"parseFile",
38+
"parse_file",
39+
removal_version,
40+
)
3541

3642

3743
class P_auto(StructureParser):
@@ -139,7 +145,16 @@ def parse(self, s):
139145
"""
140146
return self._wrap_parse_method("parse", s)
141147

148+
@deprecated(parseFile_deprecation_msg)
142149
def parseFile(self, filename):
150+
"""This function has been deprecated and will be removed in
151+
version 4.0.0.
152+
153+
Please use diffpy.structure.P_auto.parse_file instead.
154+
"""
155+
return self.parse_file(filename)
156+
157+
def parse_file(self, filename):
143158
"""Detect format and create Structure instance from an existing
144159
file.
145160
@@ -163,7 +178,7 @@ def parseFile(self, filename):
163178
If the file cannot be read.
164179
"""
165180
self.filename = filename
166-
return self._wrap_parse_method("parseFile", filename)
181+
return self._wrap_parse_method("parse_file", filename)
167182

168183
def _wrap_parse_method(self, method: object, *args: object, **kwargs: object) -> Any:
169184
"""A helper evaluator method that try the specified parse method

src/diffpy/structure/parsers/p_cif.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@
5050
"parse_lines",
5151
removal_version,
5252
)
53+
parseFile_deprecation_msg = build_deprecation_message(
54+
base,
55+
"parseFile",
56+
"parse_file",
57+
removal_version,
58+
)
5359

5460

5561
class P_cif(StructureParser):
@@ -372,7 +378,16 @@ def parse_lines(self, lines):
372378
s = "\n".join(lines) + "\n"
373379
return self.parse(s)
374380

381+
@deprecated(parseFile_deprecation_msg)
375382
def parseFile(self, filename):
383+
"""This function has been deprecated and will be removed in
384+
version 4.0.0.
385+
386+
Please use diffpy.structure.P_cif.parse_file instead.
387+
"""
388+
return self.parse_file(filename)
389+
390+
def parse_file(self, filename):
376391
"""Create Structure from an existing CIF file.
377392
378393
Parameters

src/diffpy/structure/parsers/structureparser.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
"parse_lines",
2525
removal_version,
2626
)
27+
parseFile_deprecation_msg = build_deprecation_message(
28+
base,
29+
"parseFile",
30+
"parse_file",
31+
removal_version,
32+
)
2733

2834

2935
class StructureParser(object):
@@ -86,7 +92,16 @@ def tostring(self, stru):
8692
s = "\n".join(lines) + "\n"
8793
return s
8894

95+
@deprecated(parseFile_deprecation_msg)
8996
def parseFile(self, filename):
97+
"""This function has been deprecated and will be removed in
98+
version 4.0.0.
99+
100+
Please use diffpy.structure.StructureParser.parse_file instead.
101+
"""
102+
return self.parse_file(filename)
103+
104+
def parse_file(self, filename):
90105
"""Create Structure instance from an existing file."""
91106
self.filename = filename
92107
with open(filename) as fp:

src/diffpy/structure/structure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ def read(self, filename, format="auto"):
357357

358358
getParser = diffpy.structure.parsers.getParser
359359
p = getParser(format)
360-
new_structure = p.parseFile(filename)
360+
new_structure = p.parse_file(filename)
361361
# reinitialize data after successful parsing
362362
# avoid calling __init__ from a derived class
363363
Structure.__init__(self)

tests/test_p_cif.py

Lines changed: 54 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,49 @@ def test_parseFile(self):
173173
self.assertEqual(16, len(ptei))
174174
return
175175

176+
def test_parse_file(self):
177+
"""Check P_cif.parse_file()"""
178+
# pbteciffile
179+
stru = self.pfile.parse_file(self.pbteciffile)
180+
self.assertEqual(8, len(stru))
181+
self.assertEqual(6.461, stru.lattice.a)
182+
self.assertEqual(6.461, stru.lattice.b)
183+
self.assertEqual(6.461, stru.lattice.c)
184+
self.assertEqual(90.0, stru.lattice.alpha)
185+
self.assertEqual(90.0, stru.lattice.beta)
186+
self.assertEqual(90.0, stru.lattice.gamma)
187+
self.assertEqual("Fm-3m", self.pfile.spacegroup.short_name)
188+
a0 = stru[0]
189+
self.assertEqual(0.5, a0.x)
190+
self.assertEqual(0.5, a0.y)
191+
self.assertEqual(0.5, a0.z)
192+
self.assertEqual(False, a0.anisotropy)
193+
self.assertEqual(1.0, a0.occupancy)
194+
self.assertEqual(0.0225566, a0.Uisoequiv)
195+
# badciffile
196+
pfile2 = P_cif()
197+
self.assertRaises(StructureFormatError, pfile2.parse_file, self.badciffile)
198+
# graphite
199+
pgraphite = P_cif()
200+
graphite = pgraphite.parse_file(self.graphiteciffile)
201+
self.assertEqual(4, len(graphite))
202+
c1 = graphite[0]
203+
self.assertEqual(str, type(c1.element))
204+
self.assertEqual("C", c1.element)
205+
self.assertEqual(str, type(c1.label))
206+
self.assertEqual("C1", c1.label)
207+
# filename with unicode encoding
208+
hasbs = "\\" in self.graphiteciffile
209+
uciffile = self.graphiteciffile.replace("\\", "/")
210+
if hasbs: # pragma: no cover
211+
uciffile = uciffile.replace("/", "\\")
212+
ugraphite = P_cif().parse_file(uciffile)
213+
self.assertEqual(4, len(ugraphite))
214+
# File with full space group name
215+
ptei = P_cif().parse_file(self.teiciffile)
216+
self.assertEqual(16, len(ptei))
217+
return
218+
176219
# def test__parseCifBlock(self):
177220
# """check P_cif._parseCifBlock()
178221
# """
@@ -271,19 +314,19 @@ def test_eps(self):
271314
"""Test the P_cif.eps coordinates resolution."""
272315
pcif = P_cif()
273316
pcif.eps = 1e-8
274-
grph = pcif.parseFile(self.graphiteciffile)
317+
grph = pcif.parse_file(self.graphiteciffile)
275318
self.assertEqual(8, len(grph))
276319
self.assertTrue(all(a.label.startswith("C1") for a in grph[:2]))
277320
self.assertTrue(all(a.label.startswith("C2") for a in grph[2:]))
278321
pcif2 = P_cif()
279322
pcif2.eps = 1e-3
280-
grph2 = pcif2.parseFile(self.graphiteciffile)
323+
grph2 = pcif2.parse_file(self.graphiteciffile)
281324
self.assertEqual(4, len(grph2))
282325
return
283326

284327
def test_unknown_occupancy(self):
285328
"test CIF file with unknown occupancy data"
286-
stru = self.ptest.parseFile(self.datafile("TeI-unkocc.cif"))
329+
stru = self.ptest.parse_file(self.datafile("TeI-unkocc.cif"))
287330
self.assertTrue(numpy.array_equal(16 * [1], stru.occupancy))
288331
return
289332

@@ -311,7 +354,7 @@ def test_unknown_spacegroup_number(self):
311354
def test_nosites_cif(self):
312355
"""Test reading of CIF file with no valid sites."""
313356
ptest = self.ptest
314-
stru = ptest.parseFile(self.datafile("nosites.cif"))
357+
stru = ptest.parse_file(self.datafile("nosites.cif"))
315358
self.assertEqual(0, len(stru))
316359
self.assertEqual(10.413, stru.lattice.a)
317360
self.assertEqual(10.413, stru.lattice.b)
@@ -322,14 +365,14 @@ def test_badspacegroup_cif(self):
322365
"""Test reading of CIF file with unrecognized space group."""
323366
ptest = self.ptest
324367
filename = self.datafile("badspacegroup.cif")
325-
self.assertRaises(StructureFormatError, ptest.parseFile, filename)
368+
self.assertRaises(StructureFormatError, ptest.parse_file, filename)
326369
return
327370

328371
def test_custom_spacegroup_cif(self):
329372
"""Test parsing of nonstandard symops-defined space group."""
330373
pfile = self.pfile
331374
filename = self.datafile("customsg.cif")
332-
pfile.parseFile(filename)
375+
pfile.parse_file(filename)
333376
sg = pfile.spacegroup
334377
self.assertEqual("CIF data", sg.short_name)
335378
self.assertEqual(6, len(sg.symop_list))
@@ -349,14 +392,14 @@ def test_spacegroup_isotropy(self):
349392

350393
def test_spacegroup_anisotropy(self):
351394
"verify site anisotropy due to site symmetry."
352-
stru = self.ptest.parseFile(self.graphiteciffile)
395+
stru = self.ptest.parse_file(self.graphiteciffile)
353396
self.assertTrue(all(stru.anisotropy))
354397
return
355398

356399
def test_spacegroup_ref(self):
357400
"verify space group reference"
358401
pfile = self.pfile
359-
pfile.parseFile(self.refciffile)
402+
pfile.parse_file(self.refciffile)
360403
sg = pfile.spacegroup
361404
self.assertEqual("Fm-3m", sg.short_name)
362405

@@ -406,20 +449,20 @@ def test_unknown_aniso(self):
406449
def test_curly_brace(self):
407450
"verify loading of a CIF file with unquoted curly brace"
408451
ptest = self.ptest
409-
stru = ptest.parseFile(self.datafile("curlybrackets.cif"))
452+
stru = ptest.parse_file(self.datafile("curlybrackets.cif"))
410453
self.assertEqual(20, len(stru))
411454
return
412455

413456
def test_getParser(self):
414457
"""Test passing of eps keyword argument by getParser
415458
function."""
416459
pcif = getParser("cif", eps=1e-6)
417-
grph = pcif.parseFile(self.graphiteciffile)
460+
grph = pcif.parse_file(self.graphiteciffile)
418461
self.assertEqual(8, len(grph))
419462
self.assertTrue(all(a.label.startswith("C1") for a in grph[:2]))
420463
self.assertTrue(all(a.label.startswith("C2") for a in grph[2:]))
421464
pcif2 = getParser("cif")
422-
grph2 = pcif2.parseFile(self.graphiteciffile)
465+
grph2 = pcif2.parse_file(self.graphiteciffile)
423466
self.assertEqual(4, len(grph2))
424467
return
425468

0 commit comments

Comments
 (0)