Register Guidelines E-Books Search Today's Posts Mark Forums Read

Go Back   MobileRead Forums > E-Book Software > Calibre

Notices

Reply
 
Thread Tools Search this Thread
Old 09-23-2010, 01:40 PM   #1
DarkAbsynthe
Member
DarkAbsynthe began at the beginning.
 
Posts: 11
Karma: 10
Join Date: Sep 2010
Device: Kindle
Error developing new plug-in

I found a python developer and asked him for help with building a new plug-in. He's put something together that looks good to me ( I'm a developer, but not with python ).

First, I load the plug-in through the command line. ( I've tried loading the plug-in ziped or not ziped. ) When I try and test the new plug-in, I get the following error.

Code:
C:\Program Files\Calibre2>calibre-debug --add-simple-plugin="C:\Program Files\Calibre2\gr_plugin.py"
Plugin added: Goodreads (1, 0, 0)

C:\Program Files\Calibre2>calibre-debug -g Starting up...
Started up in 4.42100000381
Exception in thread Thread-13:
Traceback (most recent call last):
  File "threading.py", line 525, in __bootstrap_inner
  File "site-packages\calibre\gui2\dialogs\fetch_metadata.py", line 38, in run
  File "site-packages\calibre\ebooks\metadata\fetch.py", line 312, in search
  File "site-packages\calibre\ebooks\metadata\fetch.py", line 269, in __enter__
  File "site-packages\calibre\customize\__init__.py", line 123, in __enter__
  File "site-packages\calibre\utils\zipfile.py", line 734, in __init__
  File "site-packages\calibre\utils\zipfile.py", line 755, in _GetContents
  File "site-packages\calibre\utils\zipfile.py", line 765, in _RealGetContents
  File "site-packages\calibre\utils\zipfile.py", line 204, in _EndRecData
AttributeError: 'tuple' object has no attribute 'seek'
The first statement is me loading the plug-in, the second is kicked out when I invoke the plug-in from within Calibre.

Anyone have any idea what we're doing wrong? The plug-in has nothing to do with zipping.
DarkAbsynthe is offline   Reply With Quote
Old 09-23-2010, 02:35 PM   #2
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 26,320
Karma: 5382313
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
It looks like a bug, what type of plugin is this? Metadata download?
kovidgoyal is offline   Reply With Quote
Old 09-23-2010, 02:38 PM   #3
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 26,320
Karma: 5382313
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Also what version of calibre are you using?
kovidgoyal is offline   Reply With Quote
Old 09-23-2010, 08:57 PM   #4
DarkAbsynthe
Member
DarkAbsynthe began at the beginning.
 
Posts: 11
Karma: 10
Join Date: Sep 2010
Device: Kindle
Yes, downloading metadata. And I'm using 7.18.
DarkAbsynthe is offline   Reply With Quote
Old 09-23-2010, 09:27 PM   #5
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 26,320
Karma: 5382313
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Can you post the python file of the plugin?
kovidgoyal is offline   Reply With Quote
Old 09-24-2010, 09:44 AM   #6
DarkAbsynthe
Member
DarkAbsynthe began at the beginning.
 
Posts: 11
Karma: 10
Join Date: Sep 2010
Device: Kindle
This was kindly written by Giacomo Lacava.

Code:
__license__   = 'GPL v3'
__copyright__ = '2010, Giacomo Lacava <g.lacava@gmail.com>'

DEV_KEY = "xxxxxxxxxxxxxxxxx"

GR_API_SEARCH = "http://www.goodreads.com/search/search?" + "format=xml&key=%(key)s&q=%(param)s&page=%(page)i"
GR_API_BOOK_SHOW = "http://www.goodreads.com/book/show/%(id)s?key=%(key)s"

import time
from urllib import quote_plus
from lxml import etree

from calibre import browser
from calibre.customize import Plugin
from calibre.ebooks.metadata.fetch import MetadataSource
from calibre.ebooks.metadata import MetaInformation

class GrSource(MetadataSource):
    
    author = 'Giacomo Lacava'
    metadata_type = 'basic'
    name = 'Goodreads'
    description = _('Downloads metadata from Goodreads')
    version             = (1, 0, 0)
    supported_platforms = ['windows', 'osx', 'linux'] 
        
    def __init__(self,*params):
        super(MetadataSource,self).__init__(params)
        
    def fetch(self):
        
        
        param = ""
        if self.isbn is not None: #isbn excludes any other parameter
            param = self.isbn
        else:
            for attr in [self.title,self.book_author]:
                if attr is not None:                             
                    # strip stuff that GR doesn't (or may not) like
                    for char in "()[]~@?/\\`&*!£$%*+={}#><":
                        attr = attr.encode("utf8").replace(char,"")
                    param = "+".join([quote_plus(attr),param])
        
        if param is not None:
            page = 1
            results_num = 0
            self.results = []
            while True: # run until we got all results
                
                url = GR_API_SEARCH % {"key":DEV_KEY, 
                    "param": param,
                    "page": page
                    }
                print "calling " + url
                br = browser()
                response_xml = br.open(url).read()
                root = etree.fromstring(response_xml)
                time.sleep(1) # to avoid throttling from GR
                    
                for book in root.findall(".//work"):
                    title = book.find("./best_book/title").text
                    authors = [ author.find("./name").text for author in book.findall("./best_book/author")]
                        
                    print "got " + title + " by " + "/".join(authors)
                    mi = MetaInformation(title,authors)
                    
                    # what we should do now is to get descriptions etc
                    # no point threading it because of GR throttling requests
                    bookurl = GR_API_BOOK_SHOW % { "key":DEV_KEY,
                        "id": book.find("./best_book/id").text }
                    print "Calling " + bookurl
                    book_xml = br.open(bookurl).read()
                    xmlroot = etree.fromstring(book_xml)
                    time.sleep(1) # to avoid throttling from GR
                    
                    ## things we can add here:
                    # 'author_sort', 'title_sort', 'comments', 'category',
                    # 'publisher', 'series', 'series_index', 'rating',
                    # 'isbn', 'tags', 'cover_data', 'application_id', 'guide',
                    # 'manifest', 'spine', 'toc', 'cover', 'language',
                    # 'book_producer', 'timestamp', 'lccn', 'lcc', 'ddc',
                    # 'pubdate', 'rights', 'publication_type', 'uuid'

                    mi.comments = xmlroot.find(".//book/description").text
                    mi.publisher = xmlroot.find(".//book/publisher").text
                    mi.isbn = xmlroot.find(".//book/isbn13").text
                    if mi.isbn is None: ## let's try with isbn10 then
                        xmlroot.find(".//book/isbn").text
                    
                    cover_url = xmlroot.find(".//book/image_url").text
                    # er, shall I download this cover...? and save it how ...?
                    
                    print mi
                    self.results.append(mi)
                
                results_num += int(root.find(".//results-end").text)
                total_results = int(root.find(".//total-results").text)
                print "fetched %i of %i results" % (results_num, total_results)
                
                # if enough results, get out of loop
                if results_num >= total_results: 
                    break
                else:
                    # otherwise, fetch next page
                    page += 1
DarkAbsynthe is offline   Reply With Quote
Old 09-24-2010, 03:01 PM   #7
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 26,320
Karma: 5382313
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
Looks like your plugins cache has gotten corrupted somehow.

Go to preferences->advanced->misc and click open config directory. In there will be a file customize.py. Quit calibre and delete it. Then re-add the plugin and you should be OK.
kovidgoyal is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Very disappointed with the way the tech is developing. harryE123 General Discussions 164 10-01-2010 08:05 PM
Developing for the iPad? phmadore General Discussions 7 04-09-2010 06:48 PM
I need help for developing Smellyday Kindle Developer's Corner 1 11-28-2009 12:12 PM
iLiad iLiad Developing Conventions? rudysplif iRex Developer's Corner 2 12-04-2007 11:52 AM
iLiad Developing Apps Open Window iRex Developer's Corner 10 02-13-2007 12:49 PM


All times are GMT -4. The time now is 02:13 PM.


MobileRead.com is a privately owned, operated and funded community.