def __init__(self,hist): self.mysite = Piwigo(url='http://qmul.piwigo.com/') self.mysite.login(username="******", password="******") self.webfdlist = self.mysite.plan self.webparent = u'CRLM_V2 / ' ## " " space is necessary self.hist = hist self.finame = hist.finame if self.webfdlist.has_key(self.webparent+self.finame) == False: self.mysite.mkdir(self.webparent+self.finame)
def __init__(self, fdname, finame): self.fdname = fdname self.finame = finame self.im = ops.OpenSlide(self.fdname + self.finame + '.ndpi') self.root = self.ExtractRoot() self.an_num = self.root.__len__() self.mysite = Piwigo(url='http://qmul.piwigo.com/') self.login = self.Login() self.webimlist = self.mysite.images(self.mysite.plan.keys()[0]) self.webfdlist = self.mysite.plan self.update = self.CheckMysite() #Update or
class HisImage(): def __init__(self, fdname, finame): self.fdname = fdname self.finame = finame self.webparent = r'/Test2/' self.im = ops.OpenSlide(self.fdname + self.finame + '.ndpi') self.root = self.ExtractRoot() self.an_num = self.root.__len__() self.mysite = Piwigo(url='http://qmul.piwigo.com/') self.login = self.Login() self.webimlist = self.mysite.images(self.mysite.plan.keys()[0]) self.webfdlist = self.mysite.plan self.update = self.CheckMysite() #Update or def __del__(self): self.Logout() def Logout(self): self.mysite.logout() def Login(self): return self.mysite.login(username="******", password="******") def CheckMysite(self): if self.webfdlist.has_key(self.webparent + self.finame): return True else: self.mysite.mkdir(self.webparent + self.finame) return False def ExtractRoot(self): with open(self.fdname + self.finame + '.ndpi.ndpa') as f: tree = ElementTree.parse(f) return tree.getroot() def ConvertXY(self, ax, by): xmpp = float(self.im.properties['openslide.mpp-x']) xoff = float(self.im.properties['hamamatsu.XOffsetFromSlideCentre']) ympp = float(self.im.properties['openslide.mpp-y']) yoff = float(self.im.properties['hamamatsu.YOffsetFromSlideCentre']) ld = self.im.dimensions nax = int((ax - xoff) / (xmpp * 1000.0) + ld[0] / 2.0) nby = int((by - yoff) / (ympp * 1000.0) + ld[1] / 2.0) return nax, nby def Upload(self, imgname): fdpath = self.webparent + self.finame + r'/' + imgname[-1].upper() if self.webfdlist.has_key(fdpath) == False: self.mysite.mkdir(fdpath) try: self.mysite.upload(imgname + '.png', fdpath) except Exception as e: print imgname print e self.mysite.upload(imgname + '.png', fdpath) os.remove(imgname + '.png') def NameAnnotation(self, index): if self.root[index][0].text != None and self.root[index][ 0].text != 'roi': name = 'ID-' + self.root[index].attrib['id'] + '-' + self.root[ index][0].text elif self.root[index][0].text == 'roi' or self.root[index][ 0].text == 'ROI': name = 'ID-' + self.root[index].attrib['id'] + '-' + 'R' else: name = 'ID-' + self.root[index].attrib['id'] + '-' + 'O' return name def AnnotationDots(self, index): if self.root[index][-1][-1].tag == 'pointlist': tplist = self.root[index][-1][-1] elif self.root[index][-1][-1].tag == 'specialtype' and self.root[ index][-1][-3].tag == 'pointlist': tplist = self.root[index][-1][-3] else: return np.array([]) Plist1 = [] for i in range(tplist.__len__()): Plist1.append( self.ConvertXY(int(tplist[i][0].text), int(tplist[i][1].text))) return np.array(Plist1) def LocateROI(self): ROIlist = [] for index in range(self.root.__len__()): if self.root[index][0].text == 'roi' or self.root[index][ 0].text == 'ROI': ROIlist.append([index, self.AnnotationDots(index)]) return ROIlist def ExtractImage(self, index): name = self.NameAnnotation(index) pl_arr = self.AnnotationDots(index) pl_arr = np.vstack((pl_arr, pl_arr[0])) xi = pl_arr[:, 0].min() xa = pl_arr[:, 0].max() yi = pl_arr[:, 1].min() ya = pl_arr[:, 1].max() if (xa - xi) * (ya - yi) > 1000 * 1000: level = 2 else: level = 0 tmpim = self.im.read_region( (xi - 100, yi - 100), level, ((xa - xi + 200) / 2**level, (ya - yi + 200) / 2**level)) fig, ax = plt.subplots() ax.imshow(tmpim) ax.axis('image') ax.axis('off') ax.plot((pl_arr[:, 0] - xi + 100.0) / 2**level, (pl_arr[:, 1] - yi + 100.0) / 2**level, 'y-', linewidth=3) #plt.savefig(name,dpi=fig.dpi ) self.SaveFigureAsImage(name, fig=fig, orig_size=(np.array(tmpim).shape[0], np.array(tmpim).shape[1])) plt.close(fig) return name def ExtractandUpload(self, index): #ROIlist = LocateROI() #if self.root[index][0].text == 'roi' or self.root[index][0].text == 'ROI' : name = self.ExtractImage(index) self.Upload(name) def ExtractandUploadAll(self): #ROIlist = LocateROI() print 'uploading started' for index in range(self.root.__len__()): #if self.root[index][0].text == 'roi' or self.root[index][0].text == 'ROI' : #continue name = self.ExtractImage(index) self.Upload(name) print index + 'Uploaded' def ExtractandUpload_bak(self): for index in range(self.root.__len__()): #for index in range(2): name = self.NameAnnotation(index) pl_arr = self.AnnotationDots(index) xi = pl_arr[:, 0].min() xa = pl_arr[:, 0].max() yi = pl_arr[:, 1].min() ya = pl_arr[:, 1].max() tmpim = self.im.read_region((xi - 100, yi - 100), 0, (xa - xi + 200, ya - yi + 200)) fig, ax = plt.subplots() ax.imshow(tmpim) ax.axis('image') ax.axis('off') ax.plot(pl_arr[:, 0] - xi + 100, pl_arr[:, 1] - yi + 100, 'y-', linewidth=3) #plt.savefig(name,dpi=fig.dpi ) self.SaveFigureAsImage(name, fig=fig, orig_size=(np.array(tmpim).shape[0], np.array(tmpim).shape[1])) plt.close(fig) del (pl_arr) del (tmpim) self.Upload(name) self.Logout() def SaveFigureAsImage(self, fileName, fig=None, **kwargs): ''' Save a Matplotlib figure as an image without borders or frames. Args: fileName (str): String that ends in .png etc. fig (Matplotlib figure instance): figure you want to save as the image Keyword Args: orig_size (tuple): width, height of the original image used to maintain aspect ratio. ''' fig_size = fig.get_size_inches() w, h = fig_size[0], fig_size[1] fig.patch.set_alpha(0) if kwargs.has_key('orig_size'): # Aspect ratio scaling if required w, h = kwargs['orig_size'] w2, h2 = fig_size[0], fig_size[1] fig.set_size_inches([(w2 / w) * w, (w2 / w) * h]) fig.set_dpi((w2 / w) * fig.get_dpi()) a = fig.gca() a.set_frame_on(False) a.set_xticks([]) a.set_yticks([]) plt.axis('off') plt.xlim(0, h) plt.ylim(w, 0) fig.savefig(fileName, transparent=True, bbox_inches='tight', pad_inches=0)
# -*- coding: utf-8 -*- """ Created on Sun Feb 21 22:18:47 2016 @author: john """ from piwigotools import Piwigo from piwigo.ws import Ws from piwigotools.interface import * import os mysite = Piwigo(url='http://qmul.piwigo.com/') mysite.login(username="******", password="******") #mysite.mkdir(r'/Test1/2016-1-1/T') #print mysite.plan #print mysite.idcategory(mysite.plan.keys()[0]) #print mysite.images(mysite.plan.keys()[-1]) #mysite.removedirs('/Test3') flist = os.listdir('../Samples') ''' for tmp in flist: if tmp[-3:] != 'png': flist.remove(tmp) for im in flist: mysite.upload(im,mysite.plan.keys()[0])
class HistUpload(): """ finame : category name """ def __init__(self, webparent=u'LYMPH_NODE_METASTASES_V2 / '): self.mysite = Piwigo(url='http://qmul.piwigo.com/') self.mysite.login(username="******", password="******") self.webfdlist = self.mysite.plan self.webparent = webparent # u'LYMPH_NODE_METASTASES_V2 / ' ## " " space is necessary def __del__(self): self.mysite.logout() def Upload(self, image_path, subfolder=None, name=None, comment=None): """ if multi-layer subfolder : 'Test / Test_v1 / Test_v2' """ if subfolder is not None: if self.webfdlist.has_key(self.webparent + subfolder) == False: self.mysite.mkdir(self.webparent + subfolder) fdpath = self.webparent + subfolder try: if name is not None: self.mysite.upload(image_path, fdpath, name=name, comment=comment) else: self.mysite.upload(image_path, fdpath, comment=comment) except Exception as e: print e if name is not None: self.mysite.upload(image_path, fdpath, name=name, comment=comment) else: self.mysite.upload(image_path, fdpath, comment=comment) os.remove(image_path) def Check_exist(self, image_path, subfolder=None, name=None, comment=None): fdpath = self.webparent + subfolder tname = image_path.split('/')[-1].split( '.')[0] if name is None else name if self.webfdlist.has_key(fdpath): #int(webimlist['paging']['count'])/500 #--todo webimlist = self.mysite.pwg.categories.getImages( cat_id=self.mysite.plan[fdpath], per_page=1000) for webim in webimlist['images']: #existID.append([int(webim['name'].split('-')[1]),webim['id']]) if webim['name'] == tname: return webim['id'] return False def Delete(self, image_path, subfolder=None, name=None, comment=None): tid = Check_exist(image_path, subfolder, name, comment) self.mysite.pwg.images.delete(image_id=tid, pwg_token=test_histo.mysite.token) def Logout(self): self.mysite.logout()
def __init__(self, webparent=u'LYMPH_NODE_METASTASES_V2 / '): self.mysite = Piwigo(url='http://qmul.piwigo.com/') self.mysite.login(username="******", password="******") self.webfdlist = self.mysite.plan self.webparent = webparent # u'LYMPH_NODE_METASTASES_V2 / ' ## " " space is necessary
def setUp(self): self.url = "http://mygallery.piwigo.com/" self.usertest = 'USERTEST' self.passwordtest = 'xxxxxx' self.piwigo = Piwigo(self.url)
class BasicTestCase(unittest.TestCase): """ Class for Basic Test for piwigotools """ def setUp(self): self.url = "http://mygallery.piwigo.com/" self.usertest = 'USERTEST' self.passwordtest = 'xxxxxx' self.piwigo = Piwigo(self.url) def test_basic(self): self.assertTrue(self.piwigo.pwg.getVersion()) def test_checkLogin(self): self.assertTrue(self.piwigo.login(self.usertest, self.passwordtest)) self.assertTrue(self.piwigo.logout()) self.assertRaises(LoginException, self.piwigo.mkdir) self.assertRaises(LoginException, self.piwigo.makedirs) self.assertRaises(LoginException, self.piwigo.upload) def test_createCategory(self): self.piwigo.login(self.usertest, self.passwordtest) self.assertTrue(self.piwigo.mkdir('level')) self.assertTrue(self.piwigo.mkdir('level / sublevel')) self.assertTrue(self.piwigo.makedirs('level2 / sublevel2')) self.piwigo.removedirs('level2') self.piwigo.removedirs('level') self.piwigo.logout() def test_checkpath(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') self.assertTrue(self.piwigo.iscategory('level')) self.assertTrue(self.piwigo.iscategory('level /')) self.piwigo.removedirs('level') self.piwigo.logout() def test_removeCategory(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.makedirs('level2 / sublevel2') self.assertTrue(self.piwigo.removedirs('level2')) self.assertFalse(self.piwigo.iscategory('level2')) self.piwigo.logout() def test_uploadImage(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') img = os.path.join(os.path.dirname(os.path.abspath(__file__)),'samplepiwigotools.jpg') id = self.piwigo.upload(image=img, path="level") self.assertTrue(id) self.assertTrue(self.piwigo.isimage('level / samplepiwigotools.jpg')) self.piwigo.pwg.images.delete(image_id=id, pwg_token=self.piwigo.token) self.piwigo.removedirs('level') self.piwigo.logout() def test_removeImage(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') img = os.path.join(os.path.dirname(os.path.abspath(__file__)),'samplepiwigotools.jpg') id = self.piwigo.upload(image=img, path="level") self.assertTrue(self.piwigo.remove('level / samplepiwigotools.jpg')) self.assertFalse(self.piwigo.isimage('level / samplepiwigotools.jpg')) self.piwigo.removedirs('level') self.piwigo.logout() def test_sublevel(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.makedirs('level2 / sublevel2') self.assertTrue(len(self.piwigo.sublevels('level2'))) self.piwigo.removedirs('level2') self.piwigo.logout() def test_downloadImage(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') img = os.path.join(os.path.dirname(os.path.abspath(__file__)),'samplepiwigotools.jpg') id = self.piwigo.upload(image=img, path="level") imgdst = os.path.join(os.path.dirname(os.path.abspath(__file__)),'download.jpg') self.assertTrue(self.piwigo.download("level / samplepiwigotools.jpg",imgdst)) os.remove(imgdst) self.piwigo.remove('level / samplepiwigotools.jpg') self.piwigo.removedirs('level') self.piwigo.logout()
def main(): usage = USAGE parser = OptionParser(version="%s %s" % (PROG,VERSION), usage=usage) parser.description= DESCRIPTION parser.epilog = AUTHOR try: add_dynamic_option(parser) (options, args) = parser.parse_args() verb = args[0] if verb == 'ws': piwigo = Piwigo(url=options.url) if 'user' and 'password' in options.__dict__: piwigo.login(options.user, options.password) kw = purge_kw(options.__dict__,('user','password','url')) pp = pprint.PrettyPrinter(indent=4) pp.pprint(Ws(piwigo, options.method)(**kw)) if piwigo.islogged: piwigo.logout() if verb == "download": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check if not os.path.isdir(options.dest): os.makedirs(options.dest) options.dest = os.path.abspath(options.dest) piwigo.iscategory(options.category) if options.category[-2:] == ' /' : options.category = options.category[:-2] # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__,('user','password','url','dest','category','thread')) for img in piwigo.images(options.category, **kw): run.add(piwigo.download, ["%s / %s" % (options.category, str(img)), "%s%s%s" % (options.dest, os.path.sep, str(img))], kw) except Exception as e: ana.stop() raise e ana.stop() run.start() piwigo.logout() if run.error: parser.error(run.strerror) if verb == "upload": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check piwigo.makedirs(options.category) # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__,('user','password','url','source','category','thread')) for img in glob.glob(options.source): run.add(piwigo.upload, [os.path.abspath(img), options.category], kw) ana.stop() except Exception as e: ana.stop() raise e run.start() piwigo.logout() if run.error: parser.error(run.strerror) if verb == "sync-up": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check options.source = os.path.abspath(options.source) if not os.path.isdir(options.source): raise Exception("%s is not directory" % options.source) piwigo.iscategory(options.category) if len(options.category) and options.category[-1] != '/' and options.category[:-3] != ' / ': options.category = options.category+ ' / ' # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__,('user','password','url','source','category','thread')) # local -> piwigo for root, dirnames, filenames in os.walk(options.source): filtering = fnmatch.filter(filenames, options.extension.split(',')[0]) for ext in options.extension.split(',')[1:]: filtering = filtering + fnmatch.filter(filenames, ext) for filename in filtering: pathrel = os.path.abspath(os.path.join(root, filename))[len(options.source)+1:] pathabs = os.path.abspath(os.path.join(root, filename)) category = options.category + ' / '.join(pathrel.split(os.sep)[:-1]) if not piwigo.isimage(category + ' / ' + filename): run.add(piwigo.makedirs,[category,], kw) run.add(piwigo.upload,[pathabs, category], kw) ana.stop() except Exception as e: ana.stop() raise e run.start() piwigo.logout() if run.error: parser.error(run.strerror) if verb == "sync-down": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check options.source = os.path.abspath(options.source) if not os.path.isdir(options.source): raise Exception("%s is not directory" % options.source) piwigo.iscategory(options.category) if len(options.category) and options.category[-1] != '/' and options.category[:-3] != ' / ': options.category = options.category+ ' / ' # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__,('user','password','url','source','category','thread')) # piwigo -> local for category, item in piwigo.plan.iteritems(): if options.category == category[0:len(options.category)]: path = os.path.join(options.source, *category[len(options.category):].split(' / ')) if not os.path.exists(path): os.makedirs(path) for img in piwigo.images(category): pathimg = os.path.join(path, img) if not os.path.exists(pathimg): run.add(piwigo.download, ["%s / %s" % (category, str(img)), pathimg], kw) ana.stop() except Exception as e: ana.stop() raise e run.start() piwigo.logout() if run.error: parser.error(run.strerror) except Exception as e: parser.error(e) sys.exit(1)
class BasicTestCase(unittest.TestCase): """ Class for Basic Test for piwigotools """ def setUp(self): self.url = "http://mygallery.piwigo.com/" self.usertest = 'USERTEST' self.passwordtest = 'xxxxxx' self.piwigo = Piwigo(self.url) def test_basic(self): self.assertTrue(self.piwigo.pwg.getVersion()) def test_checkLogin(self): self.assertTrue(self.piwigo.login(self.usertest, self.passwordtest)) self.assertTrue(self.piwigo.logout()) self.assertRaises(LoginException, self.piwigo.mkdir) self.assertRaises(LoginException, self.piwigo.makedirs) self.assertRaises(LoginException, self.piwigo.upload) def test_createCategory(self): self.piwigo.login(self.usertest, self.passwordtest) self.assertTrue(self.piwigo.mkdir('level')) self.assertTrue(self.piwigo.mkdir('level / sublevel')) self.assertTrue(self.piwigo.makedirs('level2 / sublevel2')) self.piwigo.removedirs('level2') self.piwigo.removedirs('level') self.piwigo.logout() def test_checkpath(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') self.assertTrue(self.piwigo.iscategory('level')) self.assertTrue(self.piwigo.iscategory('level /')) self.piwigo.removedirs('level') self.piwigo.logout() def test_removeCategory(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.makedirs('level2 / sublevel2') self.assertTrue(self.piwigo.removedirs('level2')) self.assertFalse(self.piwigo.iscategory('level2')) self.piwigo.logout() def test_uploadImage(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') img = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'samplepiwigotools.jpg') id = self.piwigo.upload(image=img, path="level") self.assertTrue(id) self.assertTrue(self.piwigo.isimage('level / samplepiwigotools.jpg')) self.piwigo.pwg.images.delete(image_id=id, pwg_token=self.piwigo.token) self.piwigo.removedirs('level') self.piwigo.logout() def test_removeImage(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') img = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'samplepiwigotools.jpg') id = self.piwigo.upload(image=img, path="level") self.assertTrue(self.piwigo.remove('level / samplepiwigotools.jpg')) self.assertFalse(self.piwigo.isimage('level / samplepiwigotools.jpg')) self.piwigo.removedirs('level') self.piwigo.logout() def test_sublevel(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.makedirs('level2 / sublevel2') self.assertTrue(len(self.piwigo.sublevels('level2'))) self.piwigo.removedirs('level2') self.piwigo.logout() def test_downloadImage(self): self.piwigo.login(self.usertest, self.passwordtest) self.piwigo.mkdir('level') img = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'samplepiwigotools.jpg') id = self.piwigo.upload(image=img, path="level") imgdst = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'download.jpg') self.assertTrue( self.piwigo.download("level / samplepiwigotools.jpg", imgdst)) os.remove(imgdst) self.piwigo.remove('level / samplepiwigotools.jpg') self.piwigo.removedirs('level') self.piwigo.logout()
class HistUpload(): def __init__(self,hist): self.mysite = Piwigo(url='http://qmul.piwigo.com/') self.mysite.login(username="******", password="******") self.webfdlist = self.mysite.plan self.webparent = u'CRLM_V2 / ' ## " " space is necessary self.hist = hist self.finame = hist.finame if self.webfdlist.has_key(self.webparent+self.finame) == False: self.mysite.mkdir(self.webparent+self.finame) def __del__(self): self.mysite.logout() def Upload(self,imgname): if imgname == None: pass else: fdpath = self.webparent+self.finame+u' / '+imgname[-1].upper() self.webfdlist = self.mysite.plan if self.webfdlist.has_key(fdpath) == False: self.mysite.mkdir(fdpath) try: self.mysite.upload(tfprefix+imgname+'.png',fdpath) except Exception as e: print imgname print e self.mysite.upload(tfprefix+imgname+'.png',fdpath) os.remove(tfprefix+imgname+'.png') def ExistID(self): existID = [] for cat in Abr_list: fdpath = self.webparent+self.finame+u' / '+cat if self.webfdlist.has_key(fdpath): webimlist = self.mysite.pwg.categories.getImages(cat_id=self.mysite.plan[fdpath],per_page = 1000) for webim in webimlist['images']: existID.append([int(webim['name'].split('-')[1]),webim['id']]) existID.sort() return existID def Update(self): existID = self.ExistID() webindex = 0 localindex =0 while(localindex<self.hist.root.__len__()): #for index in range(hist.root.__len__()): tmpid = int(self.hist.root[localindex].attrib['id']) if existID==[]: self.Upload(self.hist.ExtractImage(localindex)) localindex +=1 print localindex,' Uploaded' elif tmpid>existID[-1][0] or webindex>existID.__len__(): self.Upload(self.hist.ExtractImage(localindex)) localindex +=1 print localindex,' Uploaded' elif tmpid>existID[webindex][0]: self.mysite.pwg.images.delete(image_id=existID[webindex][1],pwg_token = self.mysite.token) webindex +=1 print 'ID-',webindex,'Deleted' elif tmpid == existID[webindex][0]: webindex +=1 localindex+=1 else: self.Upload(self.hist.ExtractImage(localindex)) localindex +=1 print localindex,' Uploaded' def Logout(self): self.mysite.logout()
def main(): usage = USAGE parser = OptionParser(version="%s %s" % (PROG, VERSION), usage=usage) parser.description = DESCRIPTION parser.epilog = AUTHOR try: add_dynamic_option(parser) (options, args) = parser.parse_args() verb = args[0] if verb == 'ws': piwigo = Piwigo(url=options.url) if 'user' and 'password' in options.__dict__: piwigo.login(options.user, options.password) kw = purge_kw(options.__dict__, ('user', 'password', 'url')) pp = pprint.PrettyPrinter(indent=4) pp.pprint(Ws(piwigo, options.method)(**kw)) if piwigo.islogged: piwigo.logout() if verb == "download": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check if not os.path.isdir(options.dest): os.makedirs(options.dest) options.dest = os.path.abspath(options.dest) piwigo.iscategory(options.category) if options.category[-2:] == ' /': options.category = options.category[:-2] # treatment run = Run(verb, options.thread) kw = purge_kw( options.__dict__, ('user', 'password', 'url', 'dest', 'category', 'thread')) for img in piwigo.images(options.category, **kw): run.add(piwigo.download, [ "%s / %s" % (options.category, str(img)), "%s%s%s" % (options.dest, os.path.sep, str(img)) ], kw) except Exception as e: ana.stop() raise e ana.stop() run.start() piwigo.logout() if run.error: parser.error(run.strerror) if verb == "upload": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check piwigo.makedirs(options.category) # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__, ('user', 'password', 'url', 'source', 'category', 'thread')) for img in glob.glob(options.source): run.add(piwigo.upload, [os.path.abspath(img), options.category], kw) ana.stop() except Exception as e: ana.stop() raise e run.start() piwigo.logout() if run.error: parser.error(run.strerror) if verb == "sync-up": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check options.source = os.path.abspath(options.source) if not os.path.isdir(options.source): raise Exception("%s is not directory" % options.source) piwigo.iscategory(options.category) if len(options.category) and options.category[ -1] != '/' and options.category[:-3] != ' / ': options.category = options.category + ' / ' # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__, ('user', 'password', 'url', 'source', 'category', 'thread')) # local -> piwigo for root, dirnames, filenames in os.walk(options.source): filtering = fnmatch.filter(filenames, options.extension.split(',')[0]) for ext in options.extension.split(',')[1:]: filtering = filtering + fnmatch.filter(filenames, ext) for filename in filtering: pathrel = os.path.abspath(os.path.join( root, filename))[len(options.source) + 1:] pathabs = os.path.abspath(os.path.join(root, filename)) category = options.category + ' / '.join( pathrel.split(os.sep)[:-1]) if not piwigo.isimage(category + ' / ' + filename): run.add(piwigo.makedirs, [ category, ], kw) run.add(piwigo.upload, [pathabs, category], kw) ana.stop() except Exception as e: ana.stop() raise e run.start() piwigo.logout() if run.error: parser.error(run.strerror) if verb == "sync-down": ana = Analyse('Analyze') ana.start() try: piwigo = Piwigo(url=options.url) piwigo.login(options.user, options.password) # check options.source = os.path.abspath(options.source) if not os.path.isdir(options.source): raise Exception("%s is not directory" % options.source) piwigo.iscategory(options.category) if len(options.category) and options.category[ -1] != '/' and options.category[:-3] != ' / ': options.category = options.category + ' / ' # treatment run = Run(verb, options.thread) kw = purge_kw(options.__dict__, ('user', 'password', 'url', 'source', 'category', 'thread')) # piwigo -> local for category, item in piwigo.plan.iteritems(): if options.category == category[0:len(options.category)]: path = os.path.join( options.source, *category[len(options.category):].split(' / ')) if not os.path.exists(path): os.makedirs(path) for img in piwigo.images(category): pathimg = os.path.join(path, img) if not os.path.exists(pathimg): run.add(piwigo.download, [ "%s / %s" % (category, str(img)), pathimg ], kw) ana.stop() except Exception as e: ana.stop() raise e run.start() piwigo.logout() if run.error: parser.error(run.strerror) except Exception as e: parser.error(e) sys.exit(1)