mirror of
https://github.com/bluxmit/alnoda-workspaces.git
synced 2024-04-29 19:52:19 +12:00
55 lines
1.8 KiB
Python
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)
|
|
)
|