bugfix upload
This commit is contained in:
parent
34b8ef3aab
commit
46bb274636
87
impra/cli.py
87
impra/cli.py
|
@ -3,7 +3,7 @@
|
|||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# #
|
||||
# software : ImpraStorage <http://imprastorage.sourceforge.net/> #
|
||||
# version : 0.4 #
|
||||
# version : 0.6 #
|
||||
# date : 2012 #
|
||||
# licence : GPLv3.0 <http://www.gnu.org/licenses/> #
|
||||
# author : a-Sansara <http://www.a-sansara.net/> #
|
||||
|
@ -41,7 +41,7 @@ LINE_SEP_LEN = 120
|
|||
LINE_SEP_CHAR = '―'
|
||||
if not Clz.isUnix : LINE_SEP_CHAR = '-'
|
||||
APP_TITLE = 'ImpraStorage'
|
||||
APP_VERSION = '0.5'
|
||||
APP_VERSION = '0.6'
|
||||
APP_AUTHOR = 'a-Sansara'
|
||||
APP_COPY = 'pluie.org'
|
||||
APP_LICENSE = 'GNU GPLv3'
|
||||
|
@ -118,13 +118,14 @@ class Cli:
|
|||
gpConf.add_option('-V', '--view' , help='view configuration' , action='store' )
|
||||
gpConf.add_option('-L', '--load' , help='load configuration' , action='store' )
|
||||
gpConf.add_option('-S', '--save' , help='save configuration' , action='store' )
|
||||
gpConf.add_option('-C', '--check' , help='check configuration' , action='store' )
|
||||
gpConf.add_option('-H', '--set-host' , help='set imap host server' , action='store', metavar='HOST ')
|
||||
gpConf.add_option('-U', '--set-user' , help='set imap user login' , action='store', metavar='USER ')
|
||||
gpConf.add_option('-X', '--set-pass' , help='set imap user password' , action='store', metavar='PASS ')
|
||||
gpConf.add_option('-P', '--set-port' , help='set imap port' , action='store', metavar='PORT ')
|
||||
gpConf.add_option('-N', '--set-name' , help='set user name' , action='store', metavar='NAME ')
|
||||
gpConf.add_option('-B', '--set-boxn' , help='set boxName on imap server (default:[%default])' , action='store', metavar='BOXNAME ')
|
||||
gpConf.add_option('-K', '--gen-keys' , help='generate new key' , action='store_true', default=False)
|
||||
gpConf.add_option('-B', '--set-boxname' , help='set boxName on imap server (default:[%default])' , action='store', metavar='BOXNAME ')
|
||||
gpConf.add_option('-K', '--gen-key' , help='generate new key' , action='store_true', default=False)
|
||||
|
||||
parser.add_option_group(gpConf)
|
||||
|
||||
|
@ -154,7 +155,7 @@ class Cli:
|
|||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# ~~ conf CMD ~~
|
||||
if a[0] == 'conf' :
|
||||
|
||||
self.print_header()
|
||||
if o.load is not None or o.view is not None or o.save is not None :
|
||||
|
||||
if o.view is not None :
|
||||
|
@ -170,22 +171,28 @@ class Cli:
|
|||
|
||||
if o.load : self.load_profile(o)
|
||||
|
||||
elif o.view : self.ini.print(o.active_profile)
|
||||
elif o.view :
|
||||
if o.view == 'all' :
|
||||
sections = self.ini.getSections()
|
||||
if len(sections) > 0:
|
||||
Clz.print(' '+','.join(sections), Clz.fgB3)
|
||||
else : Clz.print(' no profiles', Clz.fgB1)
|
||||
else: self.ini.print(o.view)
|
||||
|
||||
elif o.save :
|
||||
if not o.set_host and not o.set_user and not o.set_pass and not o.set_port and not o.set_boxn and not o.set_name and not o.gen_keys:
|
||||
if not o.set_host and not o.set_user and not o.set_pass and not o.set_port and not o.set_boxname and not o.set_name and not o.gen_key:
|
||||
parser.error(' no options specified')
|
||||
else :
|
||||
if o.set_port and not util.represents_int(o.set_port):
|
||||
parser.error(' port must be a number')
|
||||
sys.exit(1)
|
||||
if o.set_boxn: self.ini.set('box' , o.set_boxn,o.active_profile+'.imap')
|
||||
if o.set_boxname: self.ini.set('box' , o.set_boxname,o.active_profile+'.imap')
|
||||
if o.set_host: self.ini.set('host', o.set_host,o.active_profile+'.imap')
|
||||
if o.set_user: self.ini.set('user', o.set_user,o.active_profile+'.imap')
|
||||
if o.set_pass: self.ini.set('pass', o.set_pass,o.active_profile+'.imap')
|
||||
if o.set_port: self.ini.set('port', o.set_port,o.active_profile+'.imap')
|
||||
if o.set_name: self.ini.set('name', o.set_name,o.active_profile+'.infos')
|
||||
if o.gen_keys:
|
||||
if o.gen_key:
|
||||
kg = crypt.KeyGen(256)
|
||||
self.ini.set('key' ,kg.key,o.active_profile+'.keys')
|
||||
self.ini.set('mark',kg.mark,o.active_profile+'.keys')
|
||||
|
@ -194,6 +201,9 @@ class Cli:
|
|||
self.ini.set('profile', o.active_profile)
|
||||
self.ini.write()
|
||||
self.ini.print(o.active_profile)
|
||||
elif o.check :
|
||||
self.check_profile(o.check, True)
|
||||
|
||||
else :
|
||||
self.print_usage('')
|
||||
|
||||
|
@ -205,6 +215,7 @@ class Cli:
|
|||
|
||||
|
||||
if self.check_profile(o.active_profile):
|
||||
self.print_header()
|
||||
conf = core.ImpraConf(self.ini,o.active_profile)
|
||||
impst = None
|
||||
try:
|
||||
|
@ -273,6 +284,7 @@ class Cli:
|
|||
|
||||
elif a[0] == 'add':
|
||||
if not len(a)>1 : self.error_cmd('`'+a[0]+' need at least one argument',parser)
|
||||
|
||||
vfile = a[1]
|
||||
if util.file_exists(vfile) :
|
||||
if not len(a)>2 :
|
||||
|
@ -291,8 +303,8 @@ class Cli:
|
|||
elif a[0] == 'get':
|
||||
|
||||
if not len(a)>1 : self.error_cmd('`'+a[0]+' need one argument',parser)
|
||||
vid = a[1]
|
||||
|
||||
vid = a[1]
|
||||
ids = []
|
||||
for sid in vid.split(',') :
|
||||
seq = sid.split('-')
|
||||
|
@ -374,6 +386,13 @@ class Cli:
|
|||
elif a[0] == 'remove':
|
||||
|
||||
if not len(a)>1 : self.error_cmd('`'+a[0]+' need one argument',parser)
|
||||
if not util.represents_int(a[1]):
|
||||
print('\n ',end='')
|
||||
Clz.print(' == `' , Clz.bg1+Clz.fgB7, False)
|
||||
Clz.print(a[1] , Clz.bg1+Clz.fgB3, False)
|
||||
Clz.print('` is not a valid id == ', Clz.bg1+Clz.fgB7)
|
||||
print()
|
||||
sys.exit(1)
|
||||
vid = a[1]
|
||||
key = impst.index.getById(vid)
|
||||
if key !=None :
|
||||
|
@ -385,7 +404,7 @@ class Cli:
|
|||
else:
|
||||
print('\n ',end='')
|
||||
Clz.print(' == `' , Clz.bg1+Clz.fgB7, False)
|
||||
Clz.print(str(o.remove) , Clz.bg1+Clz.fgB3, False)
|
||||
Clz.print(a[1] , Clz.bg1+Clz.fgB3, False)
|
||||
Clz.print('` is not a valid id == ', Clz.bg1+Clz.fgB7)
|
||||
print()
|
||||
|
||||
|
@ -398,9 +417,38 @@ class Cli:
|
|||
parser.error(msg)
|
||||
sys.exit(1)
|
||||
|
||||
def check_profile(self,profile):
|
||||
def check_profile(self,profile, activeCheck=False):
|
||||
""""""
|
||||
return self.ini.hasSection(profile+'.keys') and self.ini.has('host',profile+'.imap') and self.ini.has('user',profile+'.imap') and self.ini.has('pass',profile+'.imap') and self.ini.has('port',profile+'.imap')
|
||||
c = self.ini.hasSection(profile+'.keys') and self.ini.has('host',profile+'.imap') and self.ini.has('user',profile+'.imap') and self.ini.has('pass',profile+'.imap') and self.ini.has('port',profile+'.imap')
|
||||
if activeCheck :
|
||||
if c :
|
||||
Clz.print(' '+profile+' is ok', Clz.fgB2)
|
||||
Clz.print(' testing...', Clz.fgB3)
|
||||
conf = core.ImpraConf(self.ini,profile)
|
||||
impst = None
|
||||
try:
|
||||
impst = core.ImpraStorage(conf)
|
||||
Clz.print(' done...', Clz.fgB2)
|
||||
except crypt.BadKeyException as e :
|
||||
pass
|
||||
else :
|
||||
Clz.print(' '+profile+' incomplete', Clz.fgB1)
|
||||
Clz.print(' need :', Clz.fgB1)
|
||||
if not self.ini.hasSection(profile+'.keys'):
|
||||
Clz.print(' key (conf -S "'+profile+'" -K)', Clz.fgB1)
|
||||
if not self.ini.has('host',profile+'.imap'):
|
||||
Clz.print(' imap host (conf -S "'+profile+'" -H hostName)', Clz.fgB1)
|
||||
if not self.ini.has('user',profile+'.imap'):
|
||||
Clz.print(' imap user (conf -S "'+profile+'" -U userName)', Clz.fgB1)
|
||||
if not self.ini.has('pass',profile+'.imap'):
|
||||
Clz.print(' imap password (conf -S "'+profile+'" -X password)', Clz.fgB1)
|
||||
if not self.ini.has('port',profile+'.imap'):
|
||||
Clz.print(' imap port (conf -S "'+profile+'" -P port)', Clz.fgB1)
|
||||
if not self.ini.has('name',profile+'.infos'):
|
||||
if c :
|
||||
Clz.print(' think to add your userName :',Clz.bgB3)
|
||||
Clz.print(' userName (conf -S "'+profile+'" -N yourName)', Clz.fgB3)
|
||||
return c
|
||||
|
||||
def print_header(self):
|
||||
printLineSep(LINE_SEP_CHAR,LINE_SEP_LEN)
|
||||
|
@ -507,10 +555,7 @@ class Cli:
|
|||
Clz.print('profile', Clz.fgb1, False)
|
||||
Clz.print('} ', Clz.fgB1, False)
|
||||
Clz.print('[', Clz.fgB3, False)
|
||||
Clz.print(' -K ', Clz.fgB3, False)
|
||||
Clz.print('{', Clz.fgB1, False)
|
||||
Clz.print('length', Clz.fgB1, False)
|
||||
Clz.print('}', Clz.fgB1, False)
|
||||
Clz.print(' -K', Clz.fgB3, False)
|
||||
Clz.print(', -H ', Clz.fgB3, False)
|
||||
Clz.print('{', Clz.fgB1, False)
|
||||
Clz.print('host', Clz.fgB1, False)
|
||||
|
@ -588,7 +633,7 @@ class Cli:
|
|||
Clz.print('PROFILE'.ljust(10,' ') , Clz.fgB1, False)
|
||||
Clz.print(', --view'.ljust(18,' ') , Clz.fgB3, False)
|
||||
Clz.print('PROFILE'.ljust(10,' ') , Clz.fgB1)
|
||||
Clz.print(' '*50+'view the specified profile (or current)' , Clz.fgB7)
|
||||
Clz.print(' '*50+'view the specified profile (or * for all available)' , Clz.fgB7)
|
||||
|
||||
Clz.print(' '*4+'-S ' , Clz.fgB3, False)
|
||||
Clz.print('PROFILE'.ljust(10,' ') , Clz.fgB1, False)
|
||||
|
@ -605,10 +650,10 @@ class Cli:
|
|||
Clz.print(' '*50+'set imprastorage username' , Clz.fgB7)
|
||||
|
||||
Clz.print(' '*4+'-K ' , Clz.fgB3, False)
|
||||
Clz.print('LENGTH'.ljust(10,' ') , Clz.fgB1, False)
|
||||
Clz.print(''.ljust(10,' ') , Clz.fgB1, False)
|
||||
Clz.print(', --gen-key'.ljust(18,' ') , Clz.fgB3, False)
|
||||
Clz.print('LENGTH'.ljust(10,' ') , Clz.fgB1)
|
||||
Clz.print(' '*50+'generate a new key of optionnal LENGTH length (default:256)', Clz.fgB7)
|
||||
Clz.print(''.ljust(10,' ') , Clz.fgB1)
|
||||
Clz.print(' '*50+'generate a new key' , Clz.fgB7)
|
||||
|
||||
Clz.print(' '*4+'-H ' , Clz.fgB3, False)
|
||||
Clz.print('HOST'.ljust(10,' ') , Clz.fgB1, False)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# #
|
||||
# software : ImpraStorage <http://imprastorage.sourceforge.net/> #
|
||||
# version : 0.4 #
|
||||
# version : 0.6 #
|
||||
# date : 2012 #
|
||||
# licence : GPLv3.0 <http://www.gnu.org/licenses/> #
|
||||
# author : a-Sansara <http://www.a-sansara.net/> #
|
||||
|
@ -87,7 +87,8 @@ class FSplitter :
|
|||
|
||||
def _split(self, fromPath, hlst):
|
||||
""""""
|
||||
rt = RuTime(eval(__CALLER__()))
|
||||
from impra.util import DEBUG_NOTICE, DEBUG, DEBUG_LEVEL, DEBUG_INFO
|
||||
rt = RuTime(eval(__CALLER__()),DEBUG_INFO)
|
||||
f = open(fromPath, 'rb+')
|
||||
m = mmap(f.fileno(), 0)
|
||||
p = 0
|
||||
|
@ -577,11 +578,11 @@ class ImpraStorage:
|
|||
rt = RuTime(eval(__CALLER__()),DEBUG_INFO)
|
||||
if self.idx != None :
|
||||
self.ih.delete(self.idx, True)
|
||||
if len(self.delids) > 0 :
|
||||
for i in self.delids : self.ih.delete(i, True, False)
|
||||
Clz.print('\n expunge, waiting server...\n', Clz.fgB1)
|
||||
self.srv.expunge()
|
||||
sleep(2)
|
||||
#~ if len(self.delids) > 0 :
|
||||
#~ for i in self.delids : self.ih.delete(i, True, False)
|
||||
#~ Clz.print('\n expunge, waiting server...\n', Clz.fgB1)
|
||||
#~ self.srv.expunge()
|
||||
#~ sleep(2)
|
||||
encData = self.index.encrypt()
|
||||
msgIndex = self.mb.buildIndex(encData)
|
||||
if DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE : print(msgIndex.as_string())
|
||||
|
@ -613,7 +614,7 @@ class ImpraStorage:
|
|||
""""""
|
||||
lloc = [bytes(str(data[0]),'utf-8') for mid, data in enumerate(sendIds)]
|
||||
lsrv = self.ih.searchBySubject(subject,True)
|
||||
return [ i for i in set(lloc).difference(set(lsrv))]
|
||||
return [ int(i) for i in set(lloc).difference(set(lsrv))]
|
||||
|
||||
def addFile(self, path, label, catg=''):
|
||||
""""""
|
||||
|
@ -622,11 +623,10 @@ class ImpraStorage:
|
|||
rt = RuTime(eval(__CALLER__('"%s","%s","%s"' % (path[:13]+'...',label,catg))),DEBUG_INFO)
|
||||
|
||||
_, ext = splitext(path)
|
||||
|
||||
try:
|
||||
size = getsize(path)
|
||||
if size > 0 :
|
||||
md5 = hash_md5_file(path)
|
||||
md5 = hash_sha256(path)
|
||||
print()
|
||||
Clz.print(' file : ' , Clz.fgn7, False)
|
||||
Clz.print(path , Clz.fgN1)
|
||||
|
@ -659,40 +659,42 @@ class ImpraStorage:
|
|||
msg = self.mb.build(usr,'all',hlst['head'][2],self.fsplit.DIR_OUTBOX+row[1]+'.ipr')
|
||||
mid = self.ih.send(msg.as_string(), self.rootBox)
|
||||
if mid is not None :
|
||||
print(' ',end='')
|
||||
Clz.print('part ' , Clz.fgn7, False)
|
||||
Clz.print(str(row[0]) , Clz.fgB2, False)
|
||||
Clz.print(' sent as msg ', Clz.fgn7, False)
|
||||
Clz.print(str(mid[1]) , Clz.fgB1)
|
||||
sendIds.append((mid[1],row))
|
||||
else:
|
||||
print('\n-- error occured when sending part : %s\n-- retrying' % row[0])
|
||||
mid = self.ih.send(msg.as_string(), self.rootBox)
|
||||
if mid is not None :
|
||||
print('part %s sent as msg %s' % (row[0],mid[1]))
|
||||
# dont remove
|
||||
status, resp = self.ih.fetch(mid[1],'(UID BODYSTRUCTURE)', True)
|
||||
if status == self.ih.OK:
|
||||
sendIds.append((mid[1],row))
|
||||
print(' ',end='')
|
||||
Clz.print('part ' , Clz.fgn7, False)
|
||||
Clz.print(str(row[0]) , Clz.fgB2, False)
|
||||
Clz.print(' sent as msg ', Clz.fgn7, False)
|
||||
Clz.print(str(mid[1]) , Clz.fgB1)
|
||||
else:
|
||||
print('\n-- can\'t send part %s\n-- cancelling ' % row[0])
|
||||
cancel = True
|
||||
break
|
||||
print('\n-- error occured when sending part : %s\n-- retrying' % row[0])
|
||||
print()
|
||||
if not cancel :
|
||||
self.index.add(hlst['head'][3],label,hlst['head'][1],ext,ownerHash,catg,md5,bFlag,size)
|
||||
done = self.saveIndex()
|
||||
self.conf.set('nid', str(self.index.id),'index')
|
||||
diff = self.checkSendIds(sendIds,hlst['head'][2])
|
||||
for mid in diff :
|
||||
if mid > 0:
|
||||
print(mid)
|
||||
#self.ih.delete(str(mid), True, False)
|
||||
print('toto')
|
||||
self.conf.set('nid', str(self.index.id),'index')
|
||||
if len(diff) > 0 :
|
||||
Clz.print(' error when sending, missing parts :', Clz.fgB1)
|
||||
print(diff)
|
||||
for mid, row in sendIds :
|
||||
msg = self.mb.build(usr,'all',hlst['head'][2],self.fsplit.DIR_OUTBOX+row[1]+'.ipr')
|
||||
Clz.print(' resending part ' , Clz.fgn7, False)
|
||||
Clz.print(str(row[0]) , Clz.fgN2, False)
|
||||
mid = self.ih.send(msg.as_string(), self.rootBox)
|
||||
for mid in diff :
|
||||
# bugfix mid would be without +1
|
||||
k = [ k for k in sendIds if len(k)>0 and int(k[0]) == int(mid+1)]
|
||||
if len(k) > 0 :
|
||||
row = k[0][1]
|
||||
msg = self.mb.build(usr,'all',hlst['head'][2],self.fsplit.DIR_OUTBOX+row[1]+'.ipr')
|
||||
Clz.print(' resending part ' , Clz.fgn7, False)
|
||||
Clz.print(str(row[0]) , Clz.fgN2)
|
||||
mid = self.ih.send(msg.as_string(), self.rootBox)
|
||||
else :
|
||||
print()
|
||||
#Clz.print(' index intall files checked\n', Clz.fgB2)
|
||||
|
||||
done = self.saveIndex()
|
||||
|
||||
# clean
|
||||
for mid, row in sendIds :
|
||||
|
@ -714,6 +716,7 @@ class ImpraStorage:
|
|||
print()
|
||||
|
||||
except Exception as e :
|
||||
print('Erroreuh')
|
||||
print(e)
|
||||
rt.stop()
|
||||
return done
|
||||
|
@ -739,7 +742,7 @@ class ImpraStorage:
|
|||
self.ih.delete(mid, True, False)
|
||||
Clz.print('\n expunge, waiting pls...\n', Clz.fgB1)
|
||||
self.ih.srv.expunge()
|
||||
sleep(2)
|
||||
sleep(0.5)
|
||||
self.index.rem(key)
|
||||
done = self.saveIndex()
|
||||
rt.stop()
|
||||
|
@ -761,11 +764,11 @@ class ImpraStorage:
|
|||
rt = RuTime(eval(__CALLER__('"[%i] %s"' % (row[ImpraIndex.UID],row[ImpraIndex.LABEL]))),DEBUG_INFO)
|
||||
ck = ConfigKey(row[ImpraIndex.HASH])
|
||||
hlst = ck.getHashList(key,row[ImpraIndex.PARTS],True)
|
||||
ids = self._getIdsBySubject(hlst['head'][2])
|
||||
ids = self.ih.searchBySubject(hlst['head'][2],True)
|
||||
if len(ids) >= row[ImpraIndex.PARTS]:
|
||||
|
||||
for mid in ids :
|
||||
self.ih.downloadAttachment(mid,self.fsplit.DIR_INBOX)
|
||||
self.ih.downloadAttachment(mid,self.fsplit.DIR_INBOX, True)
|
||||
if DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE :
|
||||
print(hlst['head'])
|
||||
for v in hlst['data']:
|
||||
|
@ -781,13 +784,13 @@ class ImpraStorage:
|
|||
|
||||
else :
|
||||
print()
|
||||
Clz.print(' == `' , Clz.bg3+Clz.fgB4, False)
|
||||
Clz.print(row[ImpraIndex.LABEL] , Clz.bg3+Clz.fgB1, False)
|
||||
Clz.print('` invalid count parts ' , Clz.bg3+Clz.fgB4)
|
||||
Clz.print(str(len(ids)) , Clz.bg3+Clz.fgB1)
|
||||
Clz.print('/' , Clz.bg3+Clz.fgB4)
|
||||
Clz.print(str(len(row[ImpraIndex.PARTS])) , Clz.bg3+Clz.fgB1)
|
||||
Clz.print(' == ' , Clz.bg3+Clz.fgB4)
|
||||
Clz.print(' == `' , Clz.BG3+Clz.fgB1, False)
|
||||
Clz.print(row[ImpraIndex.LABEL] , Clz.BG3+Clz.fgB4, False)
|
||||
Clz.print('` invalid count parts ' , Clz.BG3+Clz.fgB1, False)
|
||||
Clz.print(str(len(ids)) , Clz.BG3+Clz.fgB4, False)
|
||||
Clz.print('/' , Clz.BG3+Clz.fgB1, False)
|
||||
Clz.print(str(row[ImpraIndex.PARTS]) , Clz.BG3+Clz.fgB4, False)
|
||||
Clz.print(' == ' , Clz.BG3+Clz.fgB1)
|
||||
print()
|
||||
|
||||
rt.stop()
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# #
|
||||
# software : ImpraStorage <http://imprastorage.sourceforge.net/> #
|
||||
# version : 0.4 #
|
||||
# version : 0.6 #
|
||||
# date : 2012 #
|
||||
# licence : GPLv3.0 <http://www.gnu.org/licenses/> #
|
||||
# author : a-Sansara <http://www.a-sansara.net/> #
|
||||
|
@ -334,23 +334,23 @@ class ImapHelper:
|
|||
else :
|
||||
status, resp = self.srv.store(mid, '+FLAGS', '\\Deleted')
|
||||
Clz.print(' flag msg ' , Clz.fgn7, False)
|
||||
Clz.print(str(mid) , Clz.fgB1, False)
|
||||
Clz.print(str(int(mid)), Clz.fgB1, False)
|
||||
Clz.print(' as deleted', Clz.fgn7)
|
||||
|
||||
if expunge :
|
||||
Clz.print('\n expunge, waiting server...\n', Clz.fgB1)
|
||||
self.srv.expunge()
|
||||
sleep(2)
|
||||
sleep(0.5)
|
||||
|
||||
rt.stop()
|
||||
return status == self.OK
|
||||
|
||||
def downloadAttachment(self, msg, toDir='./'):
|
||||
def downloadAttachment(self, msg, toDir='./', byUid=False):
|
||||
""""""
|
||||
from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_NOTICE, DEBUG_INFO
|
||||
rt = RuTime(eval(__CALLER__('%i' % int(msg))),DEBUG_INFO)
|
||||
if not isinstance(msg, Message) :
|
||||
msg = self.email(msg)
|
||||
msg = self.email(msg,byUid)
|
||||
for part in msg.walk():
|
||||
filename = part.get_filename()
|
||||
if filename != None and DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE : print(filename)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# #
|
||||
# software : ImpraStorage <http://imprastorage.sourceforge.net/> #
|
||||
# version : 0.4 #
|
||||
# version : 0.6 #
|
||||
# date : 2012 #
|
||||
# licence : GPLv3.0 <http://www.gnu.org/licenses/> #
|
||||
# author : a-Sansara <http://www.a-sansara.net/> #
|
||||
|
@ -187,7 +187,7 @@ def __CALLER__(args=''):
|
|||
"""
|
||||
global DEBUG_LEVEL, DEBUG, DEBUG_WARN
|
||||
val = "self.__class__.__name__+'.%s' % stack()[1][3]+'("+quote_escape(args)+") "
|
||||
if DEBUG and DEBUG_LEVEL<=DEBUG_WARN : val += "l:'+str(stack()[1][2])"
|
||||
if DEBUG and DEBUG_LEVEL<=DEBUG_WARN : val += "l:'+str(stack()[1][2]) "
|
||||
else: val += "'"
|
||||
return val
|
||||
|
||||
|
@ -300,6 +300,15 @@ class IniFile:
|
|||
with open(path, mode='w', encoding='utf-8') as o:
|
||||
o.write(content)
|
||||
|
||||
def getSections(self):
|
||||
""""""
|
||||
l = {}
|
||||
for s in self.dic:
|
||||
section = s.split('.')
|
||||
if len(section)> 1 and not section[0] in l :
|
||||
l[section[0]] = 1
|
||||
return [k for i,k in enumerate(l)]
|
||||
|
||||
def toString(self,section='*'):
|
||||
""""""
|
||||
content = ''
|
||||
|
@ -317,7 +326,7 @@ class IniFile:
|
|||
else : main += k+' = '+self.dic[s][k]+'\n'
|
||||
return main + content
|
||||
|
||||
def print(self,section='*'):
|
||||
def print(self,section='*', withoutSectionName=False):
|
||||
""""""
|
||||
a = ''
|
||||
for s in self.dic:
|
||||
|
@ -326,7 +335,9 @@ class IniFile:
|
|||
#~ if section=='*': content += '\n['+s+']\n'
|
||||
#~ else : content += '\n['+s[len(section)+1:]+']\n'
|
||||
print()
|
||||
Clz.print('['+s+']', Clz.fgB3)
|
||||
if not withoutSectionName :
|
||||
Clz.print('['+s+']', Clz.fgB3)
|
||||
else: Clz.print('['+s.split('.')[1]+']', Clz.fgB3)
|
||||
for k in sorted(self.dic[s]):
|
||||
k = k.rstrip(' ')
|
||||
if s!='main' :
|
||||
|
@ -378,6 +389,10 @@ class StrIterator:
|
|||
self.i += 1
|
||||
return self.d[self.i-1]
|
||||
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# ~~ class Coloriz ~~
|
||||
|
||||
class Coloriz:
|
||||
|
||||
_MARKER = '!§'
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# #
|
||||
# software : ImpraStorage <http://imprastorage.sourceforge.net/> #
|
||||
# version : 0.4 #
|
||||
# version : 0.6 #
|
||||
# date : 2012 #
|
||||
# licence : GPLv3.0 <http://www.gnu.org/licenses/> #
|
||||
# author : a-Sansara <http://www.a-sansara.net/> #
|
||||
|
@ -31,6 +31,11 @@ from impra.util import IniFile, RuTime, get_file_path
|
|||
from impra.cli import Cli
|
||||
import sys, os
|
||||
|
||||
# TODO
|
||||
# - check encrypt marker on crypt file
|
||||
# - readjust cli commands
|
||||
# - write help in colors
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Cli(get_file_path(__file__ ))
|
||||
|
|
|
@ -24,14 +24,17 @@ if 'bdist_msi' in sys.argv:
|
|||
exe = Executable(
|
||||
script="imprastorage.py",
|
||||
base=None,
|
||||
targetName="ImpraStorage.exe"
|
||||
targetName="ImpraStorage.exe",
|
||||
targetDir="lib",
|
||||
shortcutName="ImpraStorage",
|
||||
)
|
||||
setup(
|
||||
name="ImpraStorage.exe",
|
||||
version="0.5",
|
||||
author="Me",
|
||||
description="Copyright 2012",
|
||||
version="0.6",
|
||||
author="a-Sansara",
|
||||
description="ImpraStorage provided a private imap access to store large files. License GNU GPLv3 Copyright 2012 pluie.org",
|
||||
executables=[exe],
|
||||
include-files=('./launcher.bat','./launcher.bat')
|
||||
scripts=[
|
||||
'install.py'
|
||||
]
|
||||
|
@ -40,6 +43,6 @@ else :
|
|||
|
||||
setup( name = "ImpraStorage",
|
||||
version = "0.5",
|
||||
description = "ImpraStorage an imap private access storage",
|
||||
description = "mpraStorage provided a private imap access to store large files",
|
||||
options = {"build_exe": build_exe_options},
|
||||
executables = [Executable("imprastorage.py", base=base)])
|
||||
|
|
Loading…
Reference in New Issue
Block a user