Bottle/Problém/verze pluginu

Problém nastane, když verze pluginu neodpovídá verzi bottle.

  • Stáhl jsem si jednosouborovou verzi bottle.py příkazem
$ wget http://bottlepy.org/bottle.py

Při spuštění se hlásí jako Bottle v0.13-dev server. Přitom jsem si na hlavní stránce nepovšimnul upozornění Warning: This is a preview for Bottle-0.13-dev, which is not released yet.

  • Všechno funguje dobře až do chvíle, kdy chci použít plugin bottle-sqlite. Ten nainstaluji přes PIP:
sudo pip3 install bottle-sqlite
  • Pak dostávám strašné hlášky, nevím co si s tím mám počít:
Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Traceback (most recent call last):
  File "/home/petr/Data/py/bottle/bottle.py", line 923, in _handle
    return route.call(**args)
  File "/home/petr/Data/py/bottle/bottle.py", line 248, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/home/petr/Data/py/bottle/bottle.py", line 545, in call
    return self._make_callback()
  File "/home/petr/Data/py/bottle/bottle.py", line 572, in _make_callback
    callback = plugin.apply(callback, self)
  File "/usr/local/lib/python3.4/dist-packages/bottle_sqlite.py", line 66, in apply
    conf = context['config'].get('sqlite') or {}
TypeError: 'Route' object is not subscriptable
127.0.0.1 - - [02/Oct/2015 17:07:40] "GET / HTTP/1.1" 500 1672
^C
  • Co s tím, že "'Route' object is not subscriptable"? Nejdříve hledám chybu ve svém kódu, pak vygoogluji TypeError: 'Route' object is not subscriptable. Moc tomu nerozumím, jediné co chápu, že může být nějaký problém s verzemi. Napadne mě, že problém vzniknul tak, že Bottle jsem stahoval přímo z domácí stránky, zatímco plugin bottle-sqlite přes PIP. Udělám tedy to, že zkusím Bottle nainstalovat také přes PIP:
  sudo pip3 install bottle
Downloading/unpacking bottle
  Downloading bottle-0.12.8.tar.gz (69kB): 69kB downloaded
  Running setup.py (path:/tmp/pip_build_root/bottle/setup.py) egg_info for package bottle
    
Installing collected packages: bottle
  Running setup.py install for bottle
    changing mode of build/scripts-3.4/bottle.py from 644 to 755
    
    changing mode of /usr/local/bin/bottle.py to 755
Successfully installed bottle
  • Vidím, že nyní se mi instaluje verze 12.8. Dám tedy pryč soubor bottle.py z pracovního adresáře (aby se mi nespouštěl namísto toho nainstalovaného) a ejhle, vše běží, jak má!

Ještě se podívám:

cat /usr/local/lib/python3.4/dist-packages/bottle_sqlite.py | grep __version__
__version__ = '0.1.2'
  • Kupodivu ale nikde v tom pluginu se nepíše, pro jakou verzi bottle je určený :-(