Пример #1
0
 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)
Пример #2
0
    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
Пример #3
0
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)
Пример #4
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])
Пример #5
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()
Пример #6
0
 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
Пример #7
0
 def setUp(self):
     self.url = "http://mygallery.piwigo.com/"
     self.usertest = 'USERTEST'
     self.passwordtest = 'xxxxxx'
     self.piwigo = Piwigo(self.url)
Пример #8
0
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()
Пример #9
0
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)
Пример #10
0
 def setUp(self):
     self.url = "http://mygallery.piwigo.com/"
     self.usertest = 'USERTEST'
     self.passwordtest = 'xxxxxx'
     self.piwigo = Piwigo(self.url)
Пример #11
0
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()
Пример #12
0
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()
Пример #13
0
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)