#!/usr/bin/env python
import os
import datetime
import re
basedir = os.getcwd()
heididir = open('heididir').read()
largetablesize = '800x600'
smallsize = '200x150'
parts = 'include_header,include_main_column,include_side_column,include_nav_end'.split(',')
partdict = {}
for part in parts:
partdict.update({part:open(part+'.html').read()})
def bashsafe(cmd):
cmd = cmd.replace(' ','\ ')
cmd = cmd.replace('(','\(')
cmd = cmd.replace(')','\)')
cmd = cmd.replace("'","\'")
return cmd
def ensurepathexists(path):
if not os.path.exists(path):
os.system('mkdir -p %s'%bashsafe(path))
def weblink(folder):
return folder.replace(' ','%20')
def prettydate(date):
#return date.strftime('%A, %B %e %Y')
return date.strftime('%a, %B %e, %y')
def allfolders(path):
listing = os.listdir(path)
folders = filter(lambda x:os.path.isdir(os.path.join(path,x)),listing)
return folders
test = """
title 1
http 1
desc 1
title 2
http 2
desc 2
title 3
http 3
title 4
http 4
desc 4"""
def readlinks(text):
linkre = re.compile('[\n\r]*(.+)[\n\r]{1,2}(.+)[\n\r]{1,2}(.*)[\n\r]*')
links = []
while 1:
myre = linkre.search(text)
if myre:
links.append(myre.groups())
text = text[myre.end():]
else:
break
links.sort(lambda x,y:cmp(x[0],y[0]))
return links
def readvideos(text):
return readlinks(text)
#generate main, only need function to make include_side_column
datere = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})[ -]+(.*)')
def findtextold(path):
files = os.listdir(path)
textfiles = filter(lambda x:x[-4:].lower()=='.txt',files)
if textfiles:
return open(os.path.join(path,textfiles[0])).read()
else:
return ''
def findtext(path):
return formattext_general(findtextold(path))
def findalltext(path):
files = os.listdir(path)
textfiles = filter(lambda x:x[-4:].lower()=='.txt',files)
text = ''
if textfiles:
for file in textfiles:
text += open(os.path.join(path,file)).read()
else:
return ''
return text
def formattext_detectlinks(text):
i=0
linkre = re.compile('(http://[\S]*)')
if 0:
while 1:
result = linkre.search(text,i)
if result:
a,b = result.start(),result.end()
text = text.replace(text[a:b],'%s'%(text[a:b],text[a:b]))
i=b+(b-a)+len('')
print len(text)
else:
break
return text
def formattext_contact(text):
text = text.replace('\n','
')
return text
def formattext_classes(text):
text = text.replace('\n','
')
return text
def formattext_general(text):
text = text.replace('\n','
')
text = text.replace('\x92',"'")
text = formattext_detectlinks(text)
return text
def findtextfile(path):
files = os.listdir(path)
textfiles = filter(lambda x:x[-4:].lower()=='.txt',files)
if textfiles:
return os.path.join(path,textfiles[0])
def readformattextfile(path):
fo = open(path)
text = fo.read()
text = formattext_general(text)
return text
def filterimages(files):
images = filter(lambda x:x[-4:].lower() in ['.jpg','.png','.gif'],files)
images.sort()
return images
def tablefy(list_of_things,cols=2):
n = 1
toreturn = '\n
| %s | \n'%thing if n % cols == 0: toreturn += '
"""%(base,folder)
html += """\n"""%(base,folder,'small',image)
if showtitle:
html += """
%s
"""%folder
html += """
%s"""%text
return html
def goodforgallery(images):
if len(images) == 1 and images[0].lower().find('flyer') != -1 or images[0].lower().find('main') != -1:
return False
else:
return True
def combinegallery(base1,base2,showtitle=False):
html = ''
folders = []
base1folders = allfolders(os.path.join(heididir,base1))
base2folders = allfolders(os.path.join(heididir,base2))
for f in base1folders:
folders.append([base1,f])
for f in base2folders:
folders.append([base2,f])
folders.sort(lambda x,y:-cmp(x[1],y[1]))
for base,folder in folders:
#get first image for preview
images = filterimages(os.listdir(os.path.join(heididir,base,folder)))
text = findtext(os.path.join(heididir,base,folder))
if images and goodforgallery(images): #and also not just a stupid flyer...
image = images[0]
html += """
"""%(base,folder)
html += """\n"""%(base,folder,'small',image)
#if showtitle:
html += """
%s
"""%folder
#html += """
%s"""%text
return html
def subgallery(base,dir,textafter=False):
html = ''
files = os.listdir(os.path.join(heididir,base,dir))
text = findtext(os.path.join(heididir,base,dir))
#look for main image, so as not to resize it
mainimage = filter(lambda x:x.lower().find('main image')!=-1,files)
if mainimage:
files.remove(mainimage[0])
html += """""" %(base,dir,mainimage[0])
if base == 'eventsp':
text = formattext_general(text)
if not textafter:
html += """
%s
""" % text
files = filterimages(files)
loi = []
for file in files:
mystr = ''
mystr += """\n""" %(base,dir,file)
mystr += """\n""" %(base,dir,'small',file)
loi.append(mystr)
html += tablefy(loi)
if textafter:
html += """
%s
""" % text return html class Page: def __init__(self,nav='',sub=None): self.fullsidebar = False self.nav = nav self.sub = sub def make_header(self): return partdict['include_header'] def make_nav_end(self): return partdict['include_nav_end'] def make_main_column(self): html = """\n\n""" if self.nav == '': html += """
These scripts generate all the pages from some data and images on a samba share. pages.py (create pages) updateimages.py (make sure thumbnails and images are resized)
This is so that my Mom (who got me to make this site) can update the website without having to use any html or special program. She just puts images and some dummy text file into the appropriate events or video or photoshoot folder. """ else: html += """
(Click on a member for more photos)""" html += gallery(self.nav,True) elif self.nav == 'gallery': html += """
(Click on a picture for more photos)""" html += combinegallery(self.nav,'events') else: html += """
(Click on a picture for more photos)""" html += gallery(self.nav) #if gallery, also get pictures from events! elif self.nav == 'videos': textfile = findtextfile(os.path.join(heididir,self.nav)) text = open(textfile).read() links = readvideos(text) for title,http,desc in links: html += """
%s
%s"""%(http,title,desc)
#now also read videos from events
elif self.nav == 'classes':
html += formattext_general(findalltext(os.path.join(heididir,self.nav)))
elif self.nav == 'contact':
html += findtext(os.path.join(heididir,self.nav))
elif self.nav == 'links':
textfile = findtextfile(os.path.join(heididir,self.nav))
text = open(textfile).read()
links = readlinks(text)
links.sort(lambda x,y:cmp(x[0],y[0]))
for title,http,desc in links:
html += """
%s
%s"""%(http,title,desc)
html += """
""" return html def make_all(self): return self.make_header() + self.make_main_column() + self.make_side_column() + self.make_nav_end() navs = ',gallery,videos,members,classes,contact,links,events,about'.split(',') navdict = {'gallery':allfolders(os.path.join(heididir,'gallery')),\ 'members':allfolders(os.path.join(heididir,'members')),\ 'events':allfolders(os.path.join(heididir,'events'))} for nav in navs: page = Page(nav,None) ensurepathexists(os.path.join(basedir,nav)) fo = open(os.path.join(basedir,nav,'index.html'),'w') fo.write(page.make_all()) fo.close() if navdict.has_key(nav): for sub in navdict[nav]: page = Page(nav,sub) ensurepathexists(os.path.join(basedir,nav,sub)) fo = open(os.path.join(basedir,nav,sub,'index.html'),'w') fo.write(page.make_all()) fo.close() print 'made pages'