52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
"""
|
|
Utility Functions for handling files and paths
|
|
"""
|
|
import os
|
|
import re
|
|
from os.path import isfile, abspath
|
|
|
|
from collections import namedtuple
|
|
LinkElement=namedtuple("LinkElement", ["title", "url","desc"])
|
|
|
|
def pjoin2 (pth):
|
|
if (not type(pth) is list):
|
|
raise AttributeError("path should be a list")
|
|
pth=filter(lambda s: len(s.strip())>0, pth)
|
|
if len(pth)==0:
|
|
raise AttributeError("List for pjoin2 can't be empty")
|
|
return u'/'.join(pth) or u''
|
|
|
|
def pjoin (rt,pth):
|
|
return pjoin2([rt,pth])
|
|
|
|
def list_dir(mypath,ext=None, not_ext=None):
|
|
return (f for f in os.listdir(mypath)
|
|
if os.path.isfile(os.path.join(mypath, f))
|
|
and ((re.match('.*%s$' % not_ext, f) is None) or (not_ext is None))
|
|
and ((re.match('.*%s$' % ext, f) is not None) or (ext is None))
|
|
)
|
|
|
|
def path_depth(path):
|
|
if path =="":
|
|
return 0
|
|
p_split=path.split('/')
|
|
cc=len(p_split)
|
|
if p_split[-1]=='index' or p_split[-1]=='index.json' :
|
|
cc=cc-1
|
|
return cc
|
|
|
|
def page_to_link(pages, url_for_method):
|
|
"page to url"
|
|
for p in pages:
|
|
yield LinkElement(title=p.meta.get("title",p.path),
|
|
url=url_for_method(name=p.path),
|
|
desc='/'.join(p.path.split('/')[-2:-1])
|
|
)
|
|
def file_to_link(files, url_for_method):
|
|
"file to url"
|
|
for p in files:
|
|
yield LinkElement(title=p,
|
|
url=url_for_method(name=p),
|
|
desc=""
|
|
)
|