Coverage for gpaw/io/fmf.py: 98%
43 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-14 00:18 +0000
1import os
2import time
4from gpaw import __version__
7class FMF:
8 """Full-Metadata Format
10 Full-Metadata Format after
11 https://www.sir.uni-freiburg.de/repository/2009/SI20090302a/SI20090302a.pdf
12 """
13 def __init__(self,
14 title='-',
15 creator=None,
16 place=None,
17 escape='#'):
18 self.escape = escape
19 self.estimate_creator(creator)
20 self.title = title
21 self.place = place
23 def header(self):
24 ec = self.escape
25 header = ec + '; -*- fmf version: 1.0 -*-\n'
26 header += ec + '[*reference]\n'
27 header += ec + 'creator: ' + self.creator + '\n'
28 header += ec + 'created: ' + time.strftime('%Y-%m-%d %H:%M') + '\n'
30 title = self.title
31 if isinstance(title, str):
32 title = title.split('\n')
33 for i, line in enumerate(title):
34 if i == 0:
35 header += ec + 'title: '
36 else:
37 header += ec + ' '
38 header += line + '\n'
40 header += ec + 'gpaw-version: ' + __version__ + '\n'
41 u = os.uname()
42 header += ec + 'hostname: ' + u.nodename + '\n'
43 header += ec + 'architecture: ' + u.machine + '\n'
45 return header
47 def data(self, definitions):
48 ec = self.escape
49 data = ec + '[* data definitions]\n'
50 for definition in definitions:
51 data += ec + definition + '\n'
52 data += ec + '[* data]\n'
53 return data
55 def field(self, title, entries):
56 ec = self.escape
57 res = ec + '[' + title + ']\n'
58 for entry in entries:
59 res += ec + entry + '\n'
60 return res
62 def estimate_creator(self, creator=None):
63 self.creator = creator or os.environ.get('USER', 'unknown')