1
|
|
|
import copy |
2
|
|
|
from niprov.dependencies import Dependencies |
3
|
|
|
import niprov.comparing |
4
|
|
|
|
5
|
|
|
|
6
|
|
|
class BaseFile(object): |
7
|
|
|
|
8
|
|
|
def __init__(self, location, provenance=None, dependencies=Dependencies()): |
9
|
|
|
self.dependencies = dependencies |
10
|
|
|
self.listener = dependencies.getListener() |
11
|
|
|
self.filesystem = dependencies.getFilesystem() |
12
|
|
|
self.hasher = dependencies.getHasher() |
13
|
|
|
self.location = dependencies.getLocationFactory().fromString(location) |
14
|
|
|
self.formats = dependencies.getFormatFactory() |
15
|
|
|
self.pictures = dependencies.getPictureCache() |
16
|
|
|
if provenance: |
17
|
|
|
self.provenance = provenance |
18
|
|
|
else: |
19
|
|
|
self.provenance = {} |
20
|
|
|
self.provenance.update(self.location.toDictionary()) |
21
|
|
|
self.path = self.provenance['path'] |
22
|
|
|
self.status = 'new' |
23
|
|
|
|
24
|
|
|
def inspect(self): |
25
|
|
|
self.provenance['size'] = self.filesystem.getsize(self.path) |
26
|
|
|
self.provenance['created'] = self.filesystem.getctime(self.path) |
27
|
|
|
self.provenance['hash'] = self.hasher.digest(self.path) |
28
|
|
|
if not 'modality' in self.provenance: |
29
|
|
|
self.provenance['modality'] = 'other' |
30
|
|
|
return self.provenance |
31
|
|
|
|
32
|
|
|
def attach(self, form='json'): |
33
|
|
|
""" |
34
|
|
|
Not implemented for BaseFile parent class. |
35
|
|
|
|
36
|
|
|
Args: |
37
|
|
|
form (str): Data format in which to serialize provenance. Defaults |
38
|
|
|
to 'json'. |
39
|
|
|
""" |
40
|
|
|
pass |
41
|
|
|
|
42
|
|
|
def getProvenance(self, form='dict'): |
43
|
|
|
return self.formats.create(form).serialize(self) |
44
|
|
|
|
45
|
|
|
def getSeriesId(self): |
46
|
|
|
pass |
47
|
|
|
|
48
|
|
|
@property |
49
|
|
|
def parents(self): |
50
|
|
|
return self.provenance.get('parents', []) |
51
|
|
|
|
52
|
|
|
@property |
53
|
|
|
def versions(self): |
54
|
|
|
return self.provenance.get('_versions', []) |
55
|
|
|
|
56
|
|
|
def compare(self, other): |
57
|
|
|
return niprov.comparing.compare(self, other, self.dependencies) |
58
|
|
|
|
59
|
|
|
def getProtocolFields(self): |
60
|
|
|
return None |
61
|
|
|
|
62
|
|
|
def viewSnapshot(self): |
63
|
|
|
viewer = self.dependencies.getMediumFactory().create('viewer') |
64
|
|
|
snapshot = self.pictures.getFilepath(for_=self) |
65
|
|
|
viewer.export(snapshot) |
66
|
|
|
|
67
|
|
|
def getSnapshotFilepath(self): |
68
|
|
|
return self.pictures.getFilepath(for_=self) |
69
|
|
|
|
70
|
|
|
def keepVersionsFromPrevious(self, previous): |
71
|
|
|
history = previous.provenance.get('_versions', []) |
72
|
|
|
prevprov = copy.copy(previous.provenance) |
73
|
|
|
if '_versions' in prevprov: |
74
|
|
|
del prevprov['_versions'] |
75
|
|
|
history.append(prevprov) |
76
|
|
|
self.provenance['_versions'] = history |
77
|
|
|
self.status = 'new-version' |
78
|
|
|
|
79
|
|
|
|