import io, os, sys, types
from IPython.nbformat import current
from IPython.core.interactiveshell import InteractiveShell
def find_notebook(fullname, path=None):
"""find a notebook, given its fully qualified name and an optional path
This turns "foo.bar" into "foo/bar.ipynb"
and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar
does not exist.
"""
name = fullname.rsplit('.', 1)[-1]
if not path:
path = ['']
for d in path:
nb_path = os.path.join(d, name + ".ipynb")
if os.path.isfile(nb_path):
return nb_path
# let import Notebook_Name find "Notebook Name.ipynb"
nb_path = nb_path.replace("_", " ")
if os.path.isfile(nb_path):
return nb_path
class NotebookLoader(object):
"""Module Loader for IPython Notebooks"""
def __init__(self, path=None):
self.shell = InteractiveShell.instance()
self.path = path
def load_module(self, fullname):
"""import a notebook as a module"""
path = find_notebook(fullname, self.path)
print ("importing IPython notebook from %s" % path)
# load the notebook object
with io.open(path, 'r', encoding='utf-8') as f:
nb = current.read(f, 'json')
# create the module and add it to sys.modules
# if name in sys.modules:
# return sys.modules[name]
mod = types.ModuleType(fullname)
mod.__file__ = path
mod.__loader__ = self
sys.modules[fullname] = mod
# extra work to ensure that magics that would affect the user_ns
# actually affect the notebook module's ns
save_user_ns = self.shell.user_ns
self.shell.user_ns = mod.__dict__
try:
for cell in nb.worksheets[0].cells:
if cell.cell_type == 'code' and cell.language == 'python':
# transform the input to executable Python
code = self.shell.input_transformer_manager.transform_cell(cell.input)
# run the code in themodule
exec(code, mod.__dict__)
finally:
self.shell.user_ns = save_user_ns
return mod
class NotebookFinder(object):
"""Module finder that locates IPython Notebooks"""
def __init__(self):
self.loaders = {}
def find_module(self, fullname, path=None):
nb_path = find_notebook(fullname, path)
if not nb_path:
return
key = path
if path:
# lists aren't hashable
key = os.path.sep.join(path)
if key not in self.loaders:
self.loaders[key] = NotebookLoader(path)
return self.loaders[key]
sys.meta_path.append(NotebookFinder())
os.listdir(os.getcwd())
['.git', '.gitignore', '.ipynb_checkpoints', '12 tables.ipynb', '20131030 Jason Martinez A Response to \x93Falling with Helium\x94.ipynb', '20131104 Japan life tables.ipynb', '20131211_KevinHomework.ipynb', '20131227_GenerateRepositoryReadme.ipynb', '20131227_KevinTestNumpy.ipynb', '20140120_SandAvalanches.ipynb', '20140124_AmeliOrthodontiste.ipynb', 'A synthetic guitar sound.ipynb', 'accords de guitare.ipynb', 'Ameli - post et get.ipynb', 'Books 2013.ipynb', 'Comparaison gammes.ipynb', 'Death probabilities.ipynb', 'Demokratie.ipynb', 'Extracting information from a MusicXML file.ipynb', 'Extracting the notes from the melody of MusicXML file.ipynb', 'files', 'Fitzhugh-Nagumo .ipynb', 'Guitar sound frequency analysis.ipynb', 'Kanjidic2 & JMDict.ipynb', 'Musical frequencies.ipynb', 'notebooks_links.md', 'Parsing ameli-direct.ipynb', 'README.md', 'Spelling corrector.ipynb', 'Sudoku solver.ipynb', 'V\xe9lib pricing.ipynb', 'WiiBoard data analysis.ipynb', 'xkcd - Dating Pools.ipynb']
import Parsing_ameli_direct
--------------------------------------------------------------------------- HTTPError Traceback (most recent call last) <ipython-input-7-83d7c48621c6> in <module>() ----> 1 import Parsing_ameli_direct <ipython-input-1-1663dfd0cb9b> in load_module(self, fullname) 59 code = self.shell.input_transformer_manager.transform_cell(cell.input) 60 # run the code in themodule ---> 61 exec(code, mod.__dict__) 62 finally: 63 self.shell.user_ns = save_user_ns C:\Users\FL232714\Documents\GitHub\posts\Parsing ameli direct.ipynb in <module>() C:\Python27\lib\urllib2.pyc in open(self, fullurl, data, timeout) 408 for processor in self.process_response.get(protocol, []): 409 meth = getattr(processor, meth_name) --> 410 response = meth(req, response) 411 412 return response C:\Python27\lib\urllib2.pyc in http_response(self, request, response) 521 if not (200 <= code < 300): 522 response = self.parent.error( --> 523 'http', request, response, code, msg, hdrs) 524 525 return response C:\Python27\lib\urllib2.pyc in error(self, proto, *args) 446 if http_err: 447 args = (dict, 'default', 'http_error_default') + orig_args --> 448 return self._call_chain(*args) 449 450 # XXX probably also want an abstract factory that knows when it makes C:\Python27\lib\urllib2.pyc in _call_chain(self, chain, kind, meth_name, *args) 380 func = getattr(handler, meth_name) 381 --> 382 result = func(*args) 383 if result is not None: 384 return result C:\Python27\lib\urllib2.pyc in http_error_default(self, req, fp, code, msg, hdrs) 529 class HTTPDefaultErrorHandler(BaseHandler): 530 def http_error_default(self, req, fp, code, msg, hdrs): --> 531 raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 532 533 class HTTPRedirectHandler(BaseHandler): HTTPError: HTTP Error 403: Forbidden
importing IPython notebook from Parsing ameli direct.ipynb