|
|
|
import os
|
|
|
|
from whoosh.fields import *
|
|
|
|
from whoosh.index import create_in
|
|
|
|
from whoosh.qparser import QueryParser
|
|
|
|
from models.distribusi_model import Distribusis
|
|
|
|
import flask_apscheduler
|
|
|
|
|
|
|
|
|
|
|
|
SCRIPT_DIR = os.path.dirname(__file__)
|
|
|
|
SEARCH_DATA_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "searchdata"))
|
|
|
|
|
|
|
|
|
|
|
|
def init_search_index(APP):
|
|
|
|
scheduler = flask_apscheduler.APScheduler()
|
|
|
|
scheduler.api_enabled = False
|
|
|
|
scheduler.init_app(APP)
|
|
|
|
scheduler.start()
|
|
|
|
index_distribusis(APP)
|
|
|
|
index_distribusi_files(APP)
|
|
|
|
|
|
|
|
@scheduler.task("interval", id="update", minutes=60)
|
|
|
|
def update_search_index():
|
|
|
|
index_distribusis(APP)
|
|
|
|
index_distribusi_files(APP)
|
|
|
|
|
|
|
|
|
|
|
|
def index_distribusis(APP):
|
|
|
|
schema = Schema(
|
|
|
|
title=TEXT(stored=True), path=ID(stored=True), content=TEXT
|
|
|
|
)
|
|
|
|
ix = create_in(SEARCH_DATA_DIR, schema)
|
|
|
|
writer = ix.writer()
|
|
|
|
distribusis = _visible_distribusis(APP)
|
|
|
|
for distribusi in distribusis:
|
|
|
|
writer.add_document(
|
|
|
|
title=distribusi.distribusiname,
|
|
|
|
path="/a",
|
|
|
|
content=distribusi.description,
|
|
|
|
)
|
|
|
|
writer.commit()
|
|
|
|
|
|
|
|
|
|
|
|
def index_distribusi_files(APP):
|
|
|
|
APP.logger.info("searching distribusi files not implemented yet.")
|
|
|
|
|
|
|
|
|
|
|
|
def _visible_distribusis(APP):
|
|
|
|
with APP.app_context():
|
|
|
|
distribusis = Distribusis.query.filter(
|
|
|
|
Distribusis.visible.isnot(False)
|
|
|
|
).all()
|
|
|
|
return distribusis
|