alnoda-workspaces/workspaces/notebook-old-workspace/nbviewer/nbviewer/index.py
2022-05-30 07:24:06 +00:00

55 lines
1.8 KiB
Python

# -----------------------------------------------------------------------------
# Copyright (C) Jupyter Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
# -----------------------------------------------------------------------------
"""
Classes for Indexing Notebooks
"""
import uuid
from tornado.log import app_log
class Indexer(object):
def index_notebook(self, notebook_url, notebook_contents):
raise NotImplementedError("index_notebook not implemented")
class NoSearch(Indexer):
def __init__(self):
pass
def index_notebook(self, notebook_url, notebook_contents, *args, **kwargs):
app_log.debug('Totally not indexing "{}"'.format(notebook_url))
class ElasticSearch(Indexer):
def __init__(self, host="127.0.0.1", port=9200):
from elasticsearch import Elasticsearch
self.elasticsearch = Elasticsearch([{"host": host, "port": port}])
def index_notebook(self, notebook_url, notebook_contents, public=False):
notebook_url = notebook_url.encode("utf-8")
notebook_id = uuid.uuid5(uuid.NAMESPACE_URL, notebook_url)
# Notebooks API Model
# https://github.com/ipython/ipython/wiki/IPEP-16%3A-Notebook-multi-directory-dashboard-and-URL-mapping#notebooks-api
body = {"content": notebook_contents, "public": public}
resp = self.elasticsearch.index(
index="notebooks", doc_type="ipynb", body=body, id=notebook_id.hex
)
if resp["created"]:
app_log.info(
"Created new indexed notebook={}, public={}".format(
notebook_url, public
)
)
else:
app_log.info(
"Indexing old notebook={}, public={}".format(notebook_url, public)
)