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

1import os 

2import time 

3 

4from gpaw import __version__ 

5 

6 

7class FMF: 

8 """Full-Metadata Format 

9 

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 

22 

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' 

29 

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' 

39 

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' 

44 

45 return header 

46 

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 

54 

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 

61 

62 def estimate_creator(self, creator=None): 

63 self.creator = creator or os.environ.get('USER', 'unknown')