Поиск по блогу

среда, 26 февраля 2014 г.

Справочники по объектам HTML Javascript в IPython Notebook, и немного о %magic и корне сервера.

Здесь мы собрали справки по %%html %%javascript, потом загрузили from IPython.display import Javascript и распечали справку help(Javascript) ... Потом нашли справочники js и вставили их во фреймы, потом нашли корневую папку сервера http://127.0.0.1:8888/ и научились грузить во фреймы локальные файлы... Как и следовало ожидать, магические команды - это вызовы функции javascript(self, line, cell)...
Как здесь работать с javascript. Прежде, чем разбирать примеры, надо научиться использоват help. Есть просо справка, есть "магик" для строк и ячеек, а как получать справку для javascript? Использовать консоль браузера? Как осуществлять доступ к локальным файлам? Как устроен сервер http://127.0.0.1:8888/ и что он еще видит? Как вообще осуществлять работу с локальными файлами через сервер и браузер (создавать и редактировать файлы)?

%%html %%javascript help(Javascript)

In [1]:
%lsmagic
Out[1]:
Available line magics:
%alias  %alias_magic  %autocall  %automagic  %autosave  %bookmark  %cd  %clear  %cls  %colors  %config  %connect_info  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %install_default_config  %install_ext  %install_profiles  %killbgscripts  %less  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %lsmagic  %macro  %magic  %matplotlib  %more  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %profile  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %run  %save  %sc  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%cmd  %%debug  %%file  %%html  %%javascript  %%latex  %%perl  %%powershell  %%prun  %%pypy  %%python  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.
In [4]:
# To get specific information on an object, 
#you can use the magic commands %pdoc, %pdef, %psource and %pfile
%psource %%html
In []:
 @cell_magic
    def html(self, line, cell):
        """Render the cell as a block of HTML"""
        display(HTML(cell))
In [6]:
# To get specific information on an object, 
#you can use the magic commands %pdoc, %pdef, %psource and %pfile
%pdef %%html
 %%html(self, line, cell)
 
In [14]:
# To get specific information on an object, 
#you can use the magic commands %pdoc, %pdef, %psource and %pfile
%pfile %%html
In []:
"""Simple magics for display formats"""
#-----------------------------------------------------------------------------
#  Copyright (c) 2012 The IPython Development Team.
#
#  Distributed under the terms of the Modified BSD License.
#
#  The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------

# Our own packages
from IPython.core.display import display, Javascript, Latex, SVG, HTML
from IPython.core.magic import  (
    Magics, magics_class, cell_magic
)

#-----------------------------------------------------------------------------
# Magic implementation classes
#-----------------------------------------------------------------------------


@magics_class
class DisplayMagics(Magics):
    """Magics for displaying various output types with literals
    
    Defines javascript/latex/svg/html cell magics for writing 
    blocks in those languages, to be rendered in the frontend.
    """
    
    @cell_magic
    def javascript(self, line, cell):
        """Run the cell block of Javascript code"""
        display(Javascript(cell))
        
    
    @cell_magic
    def latex(self, line, cell):
        """Render the cell as a block of latex"""
        display(Latex(cell))

    @cell_magic
    def svg(self, line, cell):
        """Render the cell as an SVG literal"""
        display(SVG(cell))

    @cell_magic
    def html(self, line, cell):
        """Render the cell as a block of HTML"""
        display(HTML(cell))
In [8]:
%%html?
In []:
Type:       Magic function
String Form:<bound method DisplayMagics.html of <IPython.core.magics.display.DisplayMagics object at 0x0000000007EFD978>>
Namespace:  IPython internal
File:       c:\users\kiss\anaconda\lib\site-packages\ipython\core\magics\display.py
Definition: %%html(self, line, cell)
Docstring:  Render the cell as a block of HTML
In [12]:
from IPython.display import HTML
In [13]:
help(HTML)
Help on class HTML in module IPython.core.display:

class HTML(DisplayObject)
 |  Method resolution order:
 |      HTML
 |      DisplayObject
 |      __builtin__.object
 |  
 |  Methods defined here:
 |  
 |  __html__(self)
 |      This method exists to inform other HTML-using modules (e.g. Markupsafe,
 |      htmltag, etc) that this object is HTML and does not need things like
 |      special characters (<>&) escaped.
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from DisplayObject:
 |  
 |  __init__(self, data=None, url=None, filename=None)
 |      Create a display object given raw data.
 |      
 |      When this object is returned by an expression or passed to the
 |      display function, it will result in the data being displayed
 |      in the frontend. The MIME type of the data should match the
 |      subclasses used, so the Png subclass should be used for 'image/png'
 |      data. If the data is a URL, the data will first be downloaded
 |      and then displayed. If
 |      
 |      Parameters
 |      ----------
 |      data : unicode, str or bytes
 |          The raw data or a URL or file to load the data from
 |      url : unicode
 |          A URL to download the data from.
 |      filename : unicode
 |          Path to a local file to load the data from.
 |  
 |  reload(self)
 |      Reload the raw data from file or URL.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from DisplayObject:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)


In [17]:
# To get specific information on an object, 
#you can use the magic commands %pdoc, %pdef, %psource and %pfile
%psource %%javascript
In []:
@cell_magic
    def javascript(self, line, cell):
        """Run the cell block of Javascript code"""
        display(Javascript(cell))
In [19]:
from IPython.display import Javascript
help(Javascript)
Help on class Javascript in module IPython.core.display:

class Javascript(DisplayObject)
 |  Method resolution order:
 |      Javascript
 |      DisplayObject
 |      __builtin__.object
 |  
 |  Methods defined here:
 |  
 |  __init__(self, data=None, url=None, filename=None, lib=None, css=None)
 |      Create a Javascript display object given raw data.
 |      
 |      When this object is returned by an expression or passed to the
 |      display function, it will result in the data being displayed
 |      in the frontend. If the data is a URL, the data will first be
 |      downloaded and then displayed.
 |      
 |      In the Notebook, the containing element will be available as `element`,
 |      and jQuery will be available.  The output area starts hidden, so if
 |      the js appends content to `element` that should be visible, then
 |      it must call `container.show()` to unhide the area.
 |      
 |      Parameters
 |      ----------
 |      data : unicode, str or bytes
 |          The Javascript source code or a URL to download it from.
 |      url : unicode
 |          A URL to download the data from.
 |      filename : unicode
 |          Path to a local file to load the data from.
 |      lib : list or str
 |          A sequence of Javascript library URLs to load asynchronously before
 |          running the source code. The full URLs of the libraries should
 |          be given. A single Javascript library URL can also be given as a
 |          string.
 |      css: : list or str
 |          A sequence of css files to load before running the source code.
 |          The full URLs of the css files should be given. A single css URL
 |          can also be given as a string.
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from DisplayObject:
 |  
 |  reload(self)
 |      Reload the raw data from file or URL.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from DisplayObject:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)


Справка javascript в Интернете

При работе в консоли подсказки появляются после точки... Но хелпера нет. Зачем "утяжелять" браузуер? Гугление в Яндексе "javascript tutorial" напомнило мне про два сайта:
Строчки кода внизу работают, если разблокировать в браузере всплывающие окна:
In [20]:
from IPython.display import display
In [21]:
js = """
window.audiencePopup = window.open(
'http://pythonr.blogspot.ru/','audienceWindow');
"""
In [22]:
jj=Javascript(js)
In [26]:
display(jj)
<IPython.core.display.Javascript at 0x825dd68>
И вот эта конструкция работает, хотя есть сомнения, что это за jQuery One of your first steps will be to use D3 to create a new DOM element
In [1]:
%%javascript
$('head')
<IPython.core.display.Javascript at 0x8114f60>

Возможности консоли javascript браузера chrome

Оказывается, точки останова можно поставить не только на строчки кода, но и сделатть их условными, или реагирующими на изменение элементов DOM, на события, на AJAX запросы...

Как работает сервер

Сначала находим и читаем документацию Running a notebook server
Потом пытаемся найти доступ к настройкам из консоли, но случайно (методом тыка) создаем новую книгу http://127.0.0.1:8889/: это папка C:\Users\kiss\Documents\IPython Notebooks\web\oboobs\FILENOTEBOOKMANAGER.NOTEBOOK_DIR /
In [3]:
!ipython notebook -help
usage: ipython-script.py [-h] [--control IPKERNELAPP.CONTROL_PORT]
                         [--stdin IPKERNELAPP.STDIN_PORT]
                         [--ip NOTEBOOKAPP.IP] [--pylab [IPKERNELAPP.PYLAB]]
                         [--cache-size ZMQINTERACTIVESHELL.CACHE_SIZE]
                         [--port-retries NOTEBOOKAPP.PORT_RETRIES]
                         [--hb IPKERNELAPP.HB_PORT]
                         [--colors ZMQINTERACTIVESHELL.COLORS]
                         [--iopub IPKERNELAPP.IOPUB_PORT]
                         [--port NOTEBOOKAPP.PORT]
                         [--profile-dir PROFILEDIR.LOCATION]
                         [--certfile NOTEBOOKAPP.CERTFILE]
                         [--autocall ZMQINTERACTIVESHELL.AUTOCALL]
                         [--notebook-dir FILENOTEBOOKMANAGER.NOTEBOOK_DIR]
                         [--config BASEIPYTHONAPPLICATION.EXTRA_CONFIG_FILE]
                         [--profile BASEIPYTHONAPPLICATION.PROFILE]
                         [--shell IPKERNELAPP.SHELL_PORT]
                         [--parent IPKERNELAPP.PARENT_HANDLE]
                         [--matplotlib [IPKERNELAPP.MATPLOTLIB]]
                         [--user SESSION.USERNAME]
                         [--interrupt IPKERNELAPP.INTERRUPT]
                         [--logfile ZMQINTERACTIVESHELL.LOGFILE]
                         [-c IPKERNELAPP.CODE_TO_RUN]
                         [--ident SESSION.SESSION]
                         [--ipython-dir BASEIPYTHONAPPLICATION.IPYTHON_DIR]
                         [--gui IPKERNELAPP.GUI]
                         [--logappend ZMQINTERACTIVESHELL.LOGAPPEND]
                         [-m IPKERNELAPP.MODULE_TO_RUN]
                         [--log-level APPLICATION.LOG_LEVEL]
                         [--ext IPKERNELAPP.EXTRA_EXTENSION]
                         [--keyfile NOTEBOOKAPP.KEYFILE]
                         [--transport KERNELMANAGER.TRANSPORT]
                         [--browser NOTEBOOKAPP.BROWSER] [--no-autoindent]
                         [--pprint] [--secure] [--autoindent] [--no-mathjax]
                         [--no-secure] [--script] [--deep-reload]
                         [--color-info] [--init] [--no-browser] [--pydb]
                         [--no-color-info] [--no-stderr] [--automagic]
                         [--no-stdout] [--no-automagic] [--nosep] [--quiet]
                         [--no-deep-reload] [--no-script] [--no-pdb] [--debug]
                         [--pdb] [--no-pprint]
ipython-script.py: error: argument -h/--help: ignored explicit argument u'elp'

In [*]:
!ipython notebook --notebook-dir FILENOTEBOOKMANAGER.NOTEBOOK_DIR
И вспоминаем, что у нас в папке oboobs была папка .ipynb_checkpoints, а вней все .ipnb файлы из книги. Наверное, это и есть корень сервера?
In []:
# Создаем в .ipynb_checkpoints папку files
C:\Users\kiss\Documents\IPython Notebooks\web\oboobs\.ipynb_checkpoints\files
# и помещаем туда подвернувшийся
__tmp9364_1.html
# потом пробуем <iframe src=http://127.0.0.1:8888/files/__tmp9364_1.html width=100% height=350></iframe>
# все работает !!! - корень сервера .ipynb_checkpoints
#
# Работает и относительная ссылка <iframe src=files/__tmp9364_1.html width=100% height=350></iframe>
# А вот ссылка на файл в родительской директории oboobs
# не работает <iframe src="../result_1.txt" width=100% height=350></iframe>
Пробуем проверить еще вариант с запуском через:
In [1]:
from IPython.display import HTML
In [3]:
HTML('<iframe src="http://127.0.0.1:8888/files/__tmp9364_1.html" width=100% height=350></iframe>')
Итак, при локальной загрузке с http://127.0.0.1:8888/ все работает, а для блога два полсдених (локальных) фрейма грузится не будут, потому надо не забыть просто стереть соответствующие блоки html кода... В дальнейшем надо бы описать модель работы сервера Running a notebook server.


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий