-
Notifications
You must be signed in to change notification settings - Fork 11
/
reffile.py
56 lines (45 loc) · 1.5 KB
/
reffile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env python
# coding: utf-8
import os
import shutil
import basefile
class reffile(basefile.basefile):
def __init__(self, path=None, dir=None, root=None, **kwargs):
self.dir = dir
self.setpath(path, root, **kwargs)
self.kind = 'ref'
def copy(self):
copy = reffile()
copy.path = self.path
copy.rootpath = self.rootpath
copy.name = self.name
copy.ext = self.ext
copy.loc = self.loc
return copy
def ref(self, **kwargs):
for key, value in kwargs.iteritems(): self.__dict__[key] = value
return self
def bin(self, **kwargs):
self.kind = 'bin'
self.__class__ = binfile.binfile
for key, value in kwargs.iteritems(): self.__dict__[key] = value
self.read()
return self
def raw(self, **kwargs):
self.kind = 'raw'
self.__class__ = rawfile.rawfile
for key, value in kwargs.iteritems(): self.__dict__[key] = value
self.read()
return self
def write(self, path):
dest = self.dest(path, makedir=True)
if self.path != dest:
if os.path.isfile(self.path):
shutil.copy2(self.path, dest)
elif os.path.isdir(self.path):
copytree.copytree(self.path, dest)
else:
raise ValueError('Failed to write file because its path %s refers to neither a file nor a directory.' % self.path)
import copytree
import binfile
import rawfile