source file: /home/buildslave/tahoe/edgy/build/src/allmydata/immutable/filenode.py
file stats: 113 lines, 113 executed: 100.0% covered
1.
2. from zope.interface import implements
3. from twisted.internet import defer
4. from allmydata.interfaces import IFileNode, IFileURI, IURI, ICheckable
5. from allmydata import uri
6. from allmydata.immutable.checker import Results, DeepCheckResults, \
7. SimpleCHKFileChecker, SimpleCHKFileVerifier
8.
9. class FileNode:
10. implements(IFileNode, ICheckable)
11. checker_class = SimpleCHKFileChecker
12. verifier_class = SimpleCHKFileVerifier
13.
14. def __init__(self, uri, client):
15. u = IFileURI(uri)
16. self.u = u
17. self.uri = u.to_string()
18. self._client = client
19.
20. def get_uri(self):
21. return self.uri
22.
23. def is_mutable(self):
24. return False
25.
26. def is_readonly(self):
27. return True
28.
29. def get_readonly_uri(self):
30. return self.uri
31.
32. def get_size(self):
33. return self.u.get_size()
34.
35. def __hash__(self):
36. return hash((self.__class__, self.uri))
37. def __cmp__(self, them):
38. if cmp(type(self), type(them)):
39. return cmp(type(self), type(them))
40. if cmp(self.__class__, them.__class__):
41. return cmp(self.__class__, them.__class__)
42. return cmp(self.uri, them.uri)
43.
44. def get_verifier(self):
45. return self.u.get_verifier()
46.
47. def get_storage_index(self):
48. return self.u.storage_index
49.
50. def check(self, verify=False, repair=False):
51. assert repair is False # not implemented yet
52. storage_index = self.u.storage_index
53. k = self.u.needed_shares
54. N = self.u.total_shares
55. size = self.u.size
56. ueb_hash = self.u.uri_extension_hash
57. if verify:
58. v = self.verifier_class(self._client,
59. storage_index, k, N, size, ueb_hash)
60. else:
61. v = self.checker_class(self._client, storage_index, k, N)
62. return v.start()
63.
64. def deep_check(self, verify=False, repair=False):
65. d = self.check(verify, repair)
66. def _done(r):
67. dr = DeepCheckResults(self.get_verifier().storage_index)
68. dr.add_check(r)
69. return dr
70. d.addCallback(_done)
71. return d
72.
73. def download(self, target):
74. downloader = self._client.getServiceNamed("downloader")
75. return downloader.download(self.uri, target)
76.
77. def download_to_data(self):
78. downloader = self._client.getServiceNamed("downloader")
79. return downloader.download_to_data(self.uri)
80.
81.
82.
83. class LiteralFileNode:
84. implements(IFileNode, ICheckable)
85.
86. def __init__(self, my_uri, client):
87. u = IFileURI(my_uri)
88. assert isinstance(u, uri.LiteralFileURI)
89. self.uri = u.to_string()
90. self._client = client
91.
92. def get_uri(self):
93. return self.uri
94.
95. def is_mutable(self):
96. return False
97.
98. def is_readonly(self):
99. return True
100.
101. def get_readonly_uri(self):
102. return self.uri
103.
104. def get_size(self):
105. return len(IURI(self.uri).data)
106.
107. def __hash__(self):
108. return hash((self.__class__, self.uri))
109. def __cmp__(self, them):
110. if cmp(type(self), type(them)):
111. return cmp(type(self), type(them))
112. if cmp(self.__class__, them.__class__):
113. return cmp(self.__class__, them.__class__)
114. return cmp(self.uri, them.uri)
115.
116. def get_verifier(self):
117. return None
118.
119. def get_storage_index(self):
120. return None
121.
122. def check(self, verify=False, repair=False):
123. # neither verify= nor repair= affect LIT files
124. r = Results(None)
125. r.healthy = True
126. r.problems = []
127. return defer.succeed(r)
128.
129. def deep_check(self, verify=False, repair=False):
130. d = self.check(verify, repair)
131. def _done(r):
132. dr = DeepCheckResults(None)
133. dr.add_check(r)
134. return dr
135. d.addCallback(_done)
136. return d
137.
138. def download(self, target):
139. # note that this does not update the stats_provider
140. data = IURI(self.uri).data
141. target.open(len(data))
142. target.write(data)
143. target.close()
144. return defer.maybeDeferred(target.finish)
145.
146. def download_to_data(self):
147. data = IURI(self.uri).data
148. return defer.succeed(data)