diff --git a/README.md b/README.md index d02b705..5155b3b 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ I however just want to put my markdown files in a directory and get a working wi - [x] Full-text search - [x] Show first few lines of each match (preview) - [ ] Better CSS -- [ ] Navigation - - [ ] More advanced namespaces +- [x] Navigation + - [x] More advanced namespaces - [x] Header - [ ] Random article - [ ] Search bar in header diff --git a/src/app.py b/src/app.py index ecfe801..0ac5b02 100644 --- a/src/app.py +++ b/src/app.py @@ -43,6 +43,13 @@ def entry(fullurl): content = cont.gen_stand_string(fullurl) return render_template('entry.html', title=TITLE, style=STYLE, content=content), 200 +@app.route('/namespace/', defaults={'fullurl': ''}) +@app.route('/namespace/') +def namespace(fullurl=''): + content = cont.gen_arch_string(fullurl) + if content == None: + return render_template('error.html', title=TITLE, errorcode='404', style=STYLE), 404 + return render_template('entry.html', title=TITLE, style=STYLE, content=content), 200 if __name__ == '__main__': app.run(host='0.0.0.0') diff --git a/src/content.py b/src/content.py index 5fbd163..4e952d9 100644 --- a/src/content.py +++ b/src/content.py @@ -14,10 +14,21 @@ WEBSITE = config.WEBSITE def gen_stand_string(path_ex): + """ + Creates a html-string for a file. + If the file is markdown it will convert it. + This functions ensures upscaling for future formats. + + Parameters: + path_ex: path to a file. + + Returns: + string: html-formatted string string equivalent to the file + """ filename = os.path.join(ENTRY_DIR, path_ex) result = '' if path.exists(filename): - title = open(filename,encoding='utf-8').readline().rstrip('\n') + title = open(filename,encoding='utf-8').readline().rstrip('\n').lstrip('#').lstrip(' ') text = open(filename,encoding='utf-8').readlines()[1:] filename_no_end = filename.split('.', 1)[0] result += '

' + title + '

\n' @@ -27,6 +38,16 @@ def gen_stand_string(path_ex): def gen_md_content(path_ex, depth): + """ + Convert a markdown file to a html string. + + Parameters: + path_ex (string): path to the markdown file + depth (int): starting depth for markdown headings + + Returns: + string: html-formatted string string equivalent to the markdown file + """ result = '' if path.exists(path_ex): filename = path_ex.split('.', 1) @@ -44,7 +65,57 @@ def gen_md_content(path_ex, depth): return result +def gen_arch_string(path_ex): + """ + Creates and returns an index string of every file in the path_ex. + + Parameter: + path_ex: path to the dir to show + + Returns: + string: html-formatted archive-string + """ + full_path = os.path.join(ENTRY_DIR, path_ex) + if path.exists(full_path): + name_list = os.listdir(full_path) + full_list = [os.path.join(full_path, i) for i in name_list] + contents = sorted(full_list, key=os.path.getctime) + content_string = '' + last_month = '' + for file in reversed(contents): + filename = pathlib.PurePath(file) + if os.path.isfile(filename): + title = open(filename).readline().rstrip('\n').lstrip('#').lstrip(' ') + entry_or_namespace = 'entry' + elif os.path.isdir(filename): + title = filename.name + entry_or_namespace = 'namespace' + else: + continue + filename = filename.name + if filename[0] != '.' and filename.__contains__('.'): + filename = filename.split('.', 1)[0] + content_string += '
  • ' + content_string += title + ' [' + content_string += '' + 'standalone' + '' + content_string += ']
    ' + content_string += '
  • \n' + content_string += '\n' + return content_string + + + def gen_query_res_string(query_str): + """ + Return the results of a query. + + Parameters: + query_str (string): term to search + + Returns: + string: html-formated search result + """ src_results = search.search(query_str) res_string = '' res_string += '\n' @@ -61,15 +132,29 @@ def gen_query_res_string(query_str): def create_preview(path): + """ + Create a preview of a given article and return it. + + Parameters: + path (string): path to the article + + Returns: + string: html-formated preview + """ file = open(path, 'r',encoding='utf-8') first_lines = file.readlines() preview = '' preview_length = 3 for i, line in enumerate(first_lines): + if i == 0: + continue if i > preview_length: break if not line.isspace(): - preview += line + '
    ' + preview += markdown.markdown(line) + '
    ' else: preview_length += 1 + preview += '...
    ' return preview + +print(gen_arch_string('system-software')) diff --git a/src/search.py b/src/search.py index 56ab814..7114537 100644 --- a/src/search.py +++ b/src/search.py @@ -14,11 +14,12 @@ ENTRY_DIR = config.ENTRY_DIR def createSearchableData(root): - ''' + """ + Schema definition: title(name of file), path(as ID), content(indexed but not stored), textdata (stored text content) source: https://appliedmachinelearning.blog/2018/07/31/developing-a-fast-indexing-and-full-text-search-engine-with-whoosh-a-pure-pythhon-library/ - ''' + """ schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT) if not os.path.exists(INDEX_DIR): @@ -37,6 +38,16 @@ def createSearchableData(root): def search_times(query_str, topN): + """ + Search for a given term and returns a specific amount of results. + + Parameters: + query_str (string): term to search for + topN (int): number of results to return + + Returns: + string: html-formatted string including the hits of the search + """ ix = open_dir(INDEX_DIR) results = [] with ix.searcher(weighting=scoring.BM25F) as s: @@ -49,6 +60,15 @@ def search_times(query_str, topN): def search(query_str): + """ + Search for a given term and show the predefined amount of results. + + Parameters: + query_str (string): term to search for + + Returns: + string: html-formatted string including the hits of the search + """ return search_times(query_str, DEF_TOPN) diff --git a/src/templates/entry.html b/src/templates/entry.html index f839581..1bec91c 100644 --- a/src/templates/entry.html +++ b/src/templates/entry.html @@ -3,7 +3,7 @@
    {% autoescape off %} - {{ content }} + {{ content }} {% endautoescape %}
    diff --git a/src/templates/search.html b/src/templates/search.html index 0076692..1dac893 100644 --- a/src/templates/search.html +++ b/src/templates/search.html @@ -9,7 +9,7 @@
    {% autoescape off %} - {{ content }} + {{ content }} {% endautoescape %}
    diff --git a/src/templates/template.html b/src/templates/template.html index 7943759..6cd4734 100644 --- a/src/templates/template.html +++ b/src/templates/template.html @@ -14,6 +14,7 @@