commit 5cf766ec928deac31035c02890daed631fa67aa1 Author: Sergey Morozov Date: Fri Apr 18 23:43:54 2014 +0400 Moved to Git repo from PST server diff --git a/.htaccess-example b/.htaccess-example new file mode 100644 index 0000000..c860fb1 --- /dev/null +++ b/.htaccess-example @@ -0,0 +1,36 @@ +Options +ExecCGI +AddHandler wsgi-script .py +RewriteEngine On +DirectoryIndex index.py + +RewriteCond %{REQUEST_URI} /\.svn/ +RewriteRule . - [F] + + Order allow,deny + Deny from all + + + Order allow,deny + Deny from all + + + Order allow,deny + Allow from all + + +#AuthLDAPBindDN "" +#AuthLDAPBindPassword "" +#AuthLDAPURL "ldap://:3268/?sAMAccountName?sub" +#AuthType Basic +#AuthName "" +#AuthBasicProvider ldap +#AuthUserFile /dev/null +AuthName "Kerberos Login" +AuthType Kerberos +Krb5Keytab /path/to/krb/keytab +KrbAuthRealm +KrbMethodNegotiate off +KrbSaveCredentials off +KrbVerifyKDC off + +Require valid-user diff --git a/config-example.py b/config-example.py new file mode 100644 index 0000000..d715fa8 --- /dev/null +++ b/config-example.py @@ -0,0 +1,21 @@ +''' +Created on 29.11.2010 + +@author: morozov +''' + +# Database server settings +mysql_server = 'localhost' +mysql_database = 'businesstrips' +mysql_user = 'businesstrips' +mysql_password = 'businessTripsSecret' +mysql_port = 3306 + +# Permissions +allow_delete_any_record = ['user1', 'user2', 'user3'] + +# Default values +default_start_time_hour = '9' +default_start_time_minute = '30' +default_end_time_hour = '18' +default_end_time_minute = '15' diff --git a/images/left.jpg b/images/left.jpg new file mode 100644 index 0000000..ba2bb29 Binary files /dev/null and b/images/left.jpg differ diff --git a/images/printer.jpg b/images/printer.jpg new file mode 100644 index 0000000..d492189 Binary files /dev/null and b/images/printer.jpg differ diff --git a/images/right.jpg b/images/right.jpg new file mode 100644 index 0000000..b8305d3 Binary files /dev/null and b/images/right.jpg differ diff --git a/images/trash.gif b/images/trash.gif new file mode 100644 index 0000000..fb80b7b Binary files /dev/null and b/images/trash.gif differ diff --git a/images/trash.jpg b/images/trash.jpg new file mode 100644 index 0000000..5d28ae6 Binary files /dev/null and b/images/trash.jpg differ diff --git a/images/trash.png b/images/trash.png new file mode 100644 index 0000000..2f674fa Binary files /dev/null and b/images/trash.png differ diff --git a/include/.htaccess b/include/.htaccess new file mode 100644 index 0000000..cb24fd7 --- /dev/null +++ b/include/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all diff --git a/include/database.py b/include/database.py new file mode 100644 index 0000000..862f395 --- /dev/null +++ b/include/database.py @@ -0,0 +1,170 @@ +''' +Created on 29.11.2010 + +@author: morozov +''' + +import sys, MySQLdb, datetime +sys.path.append('.') +import functions +config = functions.readConfig() + +class dbOperations(): + class journalRecord(): + def __init__(self, + key = None, + name = None, + position = None, + department = None, + date = None, + startTime = None, + endTime = None, + description = None, + chief = None, + userName = None): + self.key = key + self.name = name + self.position = position + self.department = department + self.date = date + self.startTime = startTime + self.endTime = endTime + self.description = description + self.chief = chief + self.userName = userName + + def __str__(self): + return('key: \'%s\'\n' + 'name: \'%s\'\n' + 'position: \'%s\'\n' + 'department: \'%s\'\n' + 'date: \'%s\'\n' + 'startTime: \'%s\'\n' + 'endTime: \'%s\'\n' + 'description: \'%s\'\n' + 'chief: \'%s\'\n' + 'userName: \'%s\'\n' % (self.key, + self.name, + self.position, + self.department, + self.date, + self.startTime, + self.endTime, + self.description, + self.chief, + self.userName)) + + def __repr__(self): + return(self.__str__()) + + def __init__(self, dbname, user, password, host='localhost', port=3306): + ''' + Constructor + ''' + + self.db = MySQLdb.connect( + host = host, + user = user, + passwd = password, + db = dbname, + port = int(port), + connect_timeout = 10) + self.cursor = self.db.cursor() + + def setProperty(self, userName, propertyName, propertyValue): + self.delProperty(userName, propertyName) + q = "INSERT INTO `user_settings` (`username`, `setting`, `value`) VALUES ('%s', '%s', '%s')" % (userName, propertyName, propertyValue) + self.cursor.execute(q) + self.db.commit() + + def getProperty(self, userName, propertyName): + q = "SELECT `value` FROM `user_settings` WHERE `username` = '%s' AND `setting` = '%s'" % (userName, propertyName) + self.cursor.execute(q) + result = self.cursor.fetchone() + self.db.commit() + try: + return(result[0]) + except: + return(None) + + def delProperty(self, userName, propertyName): + q = "DELETE FROM `user_settings` WHERE `username` = '%s' AND `setting` = '%s'" % (userName, propertyName) + self.cursor.execute(q) + self.db.commit() + + def journalGetRecord(self, key): + self.cursor.execute("SELECT `key`, `name`, `position`, `department`, `date`, `start_time`, `end_time`, `description`, `chief`, `username` FROM `journal` WHERE `key` = '%s' LIMIT 1" % key) + record = self.cursor.fetchone() + self.db.commit() + try: + result = self.journalRecord(key = record[0], + name = record[1], + position = record[2], + department = record[3], + date = record[4], + startTime = (datetime.datetime.min + record[5]).time(), + endTime = (datetime.datetime.min + record[6]).time(), + description = record[7], + chief = record[8], + userName = record[9]) + except TypeError: + return(None) + else: + return(result) + + def journalGetRecords(self, date): + self.cursor.execute("SELECT `key`, `name`, `position`, `department`, `date`, `start_time`, `end_time`, `description`, `chief`, `username` FROM `journal` WHERE `date` = '%s' ORDER BY `start_time`, `key`" % date) + rows = self.cursor.fetchall() + self.db.commit() + result = [] + for i in xrange(len(rows)): + result.append(self.journalRecord(key = rows[i][0], + name = rows[i][1], + position = rows[i][2], + department = rows[i][3], + date = rows[i][4], + startTime = (datetime.datetime.min + rows[i][5]).time(), + endTime = (datetime.datetime.min + rows[i][6]).time(), + description = rows[i][7], + chief = rows[i][8], + userName = rows[i][9])) + return(result) + + def journalSaveRecord(self, journalRecord): + self.cursor.execute("INSERT INTO `journal` (`name`, `position`, `department`, `date`, `start_time`, `end_time`, `description`, `chief`, `username`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", (journalRecord.name, journalRecord.position, journalRecord.department, journalRecord.date, journalRecord.startTime, journalRecord.endTime, journalRecord.description, journalRecord.chief, journalRecord.userName)) + self.db.commit() + + def journalDeleteRecord(self, userName, key): + if self.journalCheckDeletePermissions(userName, key): + q = "DELETE FROM `journal` WHERE `key` = '%s'" % key + self.cursor.execute(q) + self.db.commit() + else: + pass + + def journalCheckDeletePermissions(self, userName, key): + record = self.journalGetRecord(key) + self.db.commit() + if userName == record.userName or userName in config.allow_delete_any_record: + return(True) + else: + return(False) + + def journalListDays(self, limit = None): + if limit == None: + limit = '' + else: + limit = 'LIMIT %s' % limit + q = "SELECT DISTINCT `date` FROM `journal` ORDER BY `date` DESC %s" % limit + self.cursor.execute(q) + days = self.cursor.fetchall() + self.db.commit() + result = [] + for i in xrange(len(days)): + result.append(days[i][0]) + return(result) + + def close(self): + self.cursor.close() + self.db.close() + pass diff --git a/include/functions.py b/include/functions.py new file mode 100644 index 0000000..360d82b --- /dev/null +++ b/include/functions.py @@ -0,0 +1,14 @@ +''' +Created on 26.11.2010 + +@author: morozov +''' + +import os, sys +includedir = os.path.dirname(__file__) +serverdir = includedir + os.sep + '..' +sys.path.append(serverdir) + +def readConfig(): + import config + return config diff --git a/include/webInterface.py b/include/webInterface.py new file mode 100644 index 0000000..0ee09ff --- /dev/null +++ b/include/webInterface.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +''' +Created on 17.12.2010 + +@author: morozov +''' + +import sys, cgi, datetime +sys.path.append('.') +import functions +from wsgiref.util import application_uri + +config = functions.readConfig() + +class pageParts(object): + ''' + classdocs + ''' + + + def __init__(self, environ, db): + ''' + Constructor + ''' + self.environ = environ + self.userName = environ['REMOTE_USER'] + self.fieldStorage = cgi.FieldStorage(fp = environ['wsgi.input'], environ = environ, keep_blank_values = 1) + self.db = db + self.appUrl = application_uri(environ) + self.requestUri = environ['REQUEST_URI'] + self.errStatus = False + self.errMsg = '' + self.now = datetime.datetime.now() + + if self.fieldStorage.has_key('year') and self.fieldStorage.has_key('month') and self.fieldStorage.has_key('day'): + try: + self.journalDate = datetime.date(year = int(self.fieldStorage.getfirst('year')), month = int(self.fieldStorage.getfirst('month')), day = int(self.fieldStorage.getfirst('day'))) + except ValueError: + self.journalDate = self.now.date() + else: + self.journalDate = self.now.date() + + try: + self.previousDay = self.journalDate - datetime.timedelta(days = 1) + except OverflowError: + self.previousDayError = True + else: + self.previousDayError = False + try: + self.nextDay = self.journalDate + datetime.timedelta(days = 1) + except OverflowError: + self.nextDayError = True + else: + self.nextDayError = False + self.tomorrow = datetime.datetime.now().date() + datetime.timedelta(days = 1) + + if self.fieldStorage.has_key('newName')\ + and self.fieldStorage.has_key('newPosition')\ + and self.fieldStorage.has_key('newDepartment')\ + and self.fieldStorage.has_key('newStartTimeHour')\ + and self.fieldStorage.has_key('newStartTimeMinute')\ + and self.fieldStorage.has_key('newEndTimeHour')\ + and self.fieldStorage.has_key('newEndTimeMinute')\ + and self.fieldStorage.has_key('newDescription')\ + and self.fieldStorage.has_key('newChief'): + try: + newRecord = self.db.journalRecord(name = self.fieldStorage.getfirst('newName'), + position = self.fieldStorage.getfirst('newPosition'), + department = self.fieldStorage.getfirst('newDepartment'), + date = self.journalDate, + startTime = datetime.time(hour = int(self.fieldStorage.getfirst('newStartTimeHour')), + minute = int(self.fieldStorage.getfirst('newStartTimeMinute'))), + endTime = datetime.time(hour = int(self.fieldStorage.getfirst('newEndTimeHour')), + minute = int(self.fieldStorage.getfirst('newEndTimeMinute'))), + description = self.fieldStorage.getfirst('newDescription'), + chief = self.fieldStorage.getfirst('newChief'), + userName = self.userName) + for value in newRecord.name, newRecord.position, newRecord.department, newRecord.description: + if len(value) == 0: + raise ValueError + except ValueError: + self.errStatus = True + self.errMsg = 'Введены неверные данные. Заполняйте форму внимательнее.' + else: + self.db.setProperty(self.userName, 'latestName', newRecord.name) + self.db.setProperty(self.userName, 'latestPosition', newRecord.position) + self.db.setProperty(self.userName, 'latestDepartment', newRecord.department) + self.db.setProperty(self.userName, 'latestChief', newRecord.chief) + self.db.journalSaveRecord(newRecord) + + if self.fieldStorage.has_key('delete'): + try: + self.db.journalDeleteRecord(self.userName, int(self.fieldStorage.getfirst('delete'))) + except: + self.errStatus = True + self.errMsg = 'Ошибка при удалении записи. Возможно, вы пытались удалить несуществующую запись.' + + self.propertyLatestName = self.db.getProperty(self.userName, 'latestName') + if self.propertyLatestName == None: + self.propertyLatestName = '' + self.propertyLatestPosition = self.db.getProperty(self.userName, 'latestPosition') + + if self.propertyLatestPosition == None: + self.propertyLatestPosition = '' + self.propertyLatestDepartment = self.db.getProperty(self.userName, 'latestDepartment') + + if self.propertyLatestDepartment == None: + self.propertyLatestDepartment = '' + self.propertyLatestChief = self.db.getProperty(self.userName, 'latestChief') + + if self.propertyLatestChief == None: + self.propertyLatestChief = '' + + def _getWeekDay(self, date): + days = {0: 'понедельник', + 1: 'вторник', + 2: 'среда', + 3: 'четверг', + 4: 'пятница', + 5: 'суббота', + 6: 'воскресенье'} + return(days[date.weekday()]) + + def _replaceTags(self, str): + str = str.replace('<', '<') + str = str.replace('>', '>') + return str + + def header(self): + output = '\n'\ + '\n'\ + '\n'\ + ' \n'\ + ' Журнал командировок\n'\ + '\n'\ + '\n' + output += '
\n' + output += '

Все журналы Сегодня Завтра

\n' % (self.tomorrow.day, self.tomorrow.month, self.tomorrow.year) + output += '

Журнал командировок

\n' + output += '
\n' + if self.errStatus: + output += ' \n' + output += ' \n' % self.errMsg + output += '
%s
\n' + return(output) + + def headerPrint(self): + output = '\n'\ + '\n'\ + '\n'\ + ' \n'\ + ' Журнал командировок\n'\ + '\n'\ + '\n'\ + ' \n' + output += '

Журнал командировок

\n' + return(output) + + def journalForDay(self): + records = self.db.journalGetRecords(self.journalDate) + output = ' \n' + output += ' \n' + output += ' \n' + output += '
\n' + output += ' \n' % (self.journalDate.day, self.journalDate.month, self.journalDate.year) + output += ' \n' + output += ' версия для печати\n' % (self.journalDate.day, self.journalDate.month, self.journalDate.year) + output += '

\n' + output += '

Дата:

\n' + output += '
\n' % self.appUrl + output += ' \n' + output += ' \n' + if self.previousDayError == False: + output += ' \n' % (self.appUrl, self.previousDay.day, self.previousDay.month, self.previousDay.year) + else: + output += ' \n' + output += ' \n' + if self.nextDayError == False: + output += ' \n' % (self.appUrl, self.nextDay.day, self.nextDay.month, self.nextDay.year) + else: + output += ' \n' + output += ' \n' + output += '
\n' + output += ' .\n' % str(self.journalDate.day).zfill(2) + output += ' .\n' % str(self.journalDate.month).zfill(2) + output += ' \n' % self.journalDate.year + output += '
\n' + output += ' %s' % self._getWeekDay(self.journalDate) + output += '

\n' + output += '
\n' + if len(records) == 0: + output += '

Записи отсутствуют.

' + else: + output += ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n' + for i in xrange(len(records)): + if i % 2 == 1: + bgcolor = ' bgcolor = "#BFD0E0"' + else: + bgcolor = '' + output += ' \n' % bgcolor + if self.db.journalCheckDeletePermissions(self.userName, records[i].key): + deleteField = '' + else: + deleteField = '' + for field in self._replaceTags(records[i].name), self._replaceTags(records[i].position), self._replaceTags(records[i].department), str(records[i].startTime.hour) + ':' + str(records[i].startTime.minute).zfill(2), str(records[i].endTime.hour) + ':' + str(records[i].endTime.minute).zfill(2), self._replaceTags(records[i].description), self._replaceTags(records[i].chief), deleteField: + output += ' \n' % field + output += ' \n' + output += '
Фамилия И.О.ДолжностьОтделВремя началаВремя окончанияЦель и место встречиРуководительУдалить
%s
\n' + return(output) + + def journalForDayPrint(self): + records = self.db.journalGetRecords(self.journalDate) + output = '

Дата: %s.%s.%s (%s)

\n' % (str(self.journalDate.day).zfill(2), str(self.journalDate.month).zfill(2), self.journalDate.year, self._getWeekDay(self.journalDate)) + output += '

Отчёт сгенерирован: %s.%s.%s %s:%s

\n' % (str(self.now.day).zfill(2), str(self.now.month).zfill(2), self.now.year, self.now.hour, str(self.now.minute).zfill(2)) + if len(records) == 0: + output += '

Записи отсутствуют.

\n' + else: + output += ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n' + for i in xrange(len(records)): + output += ' \n' + for field in self._replaceTags(records[i].name), self._replaceTags(records[i].position), self._replaceTags(records[i].department), str(records[i].startTime.hour) + ':' + str(records[i].startTime.minute).zfill(2), str(records[i].endTime.hour) + ':' + str(records[i].endTime.minute).zfill(2), self._replaceTags(records[i].description), self._replaceTags(records[i].chief): + output += ' \n' % field + output += ' \n' + output += '
Фамилия И.О.ДолжностьОтделВремя началаВремя окончанияЦель и место встречиРуководитель
%s
\n' + return(output) + + def addRecord(self): + output = '

Добавить запись:

\n'\ + '
\n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + '
Фамилия И.О.ДолжностьОтделВремя началаВремя окончанияЦель и место встречиРуководитель
\n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + '
Часы:
Минуты:
\n'\ + '
\n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + ' \n'\ + '
Часы:
Минуты:
\n'\ + '
\n'\ + '

- обязательные поля

\n'\ + '

\n'\ + '
\n' + + return(output) + + def allDays(self): + allDays = self.db.journalListDays() + output = '

Все журналы:

\n' + output += '

' + if len(allDays) == 0: + output += '

Записи отсутствуют.

\n' + else: + output += ' \n' + for i in xrange(len(allDays)): + output += ' \n' % (allDays[i].day, allDays[i].month, allDays[i].year, str(allDays[i].day).zfill(2), str(allDays[i].month).zfill(2), allDays[i].year, self._getWeekDay(allDays[i])) + output += '
%s.%s.%s%s
\n' + output += '

\n' + return(output) + + def footer(self): + output = '

© 2010 Сергей Морозов, ОАО «Промышленно - строительное товарищество»

\n' + output += '\n' + return(output) + + def footerPrint(self): + output = '

\n'\ + '

\n'\ + ' \n'\ + '
\n'\ + '

\n' + output += '\n' + return(output) diff --git a/index.py b/index.py new file mode 100644 index 0000000..33a6d53 --- /dev/null +++ b/index.py @@ -0,0 +1,28 @@ +''' +Created on 29.11.2010 + +@author: morozov +''' +import os, sys, cgitb +serverdir = os.path.dirname(__file__) +sys.path.append(serverdir + os.sep + 'include') +import functions +import database +import webInterface +cgitb.enable() +config = functions.readConfig() + +def application(environ, start_response): + db = database.dbOperations(dbname = config.mysql_database, user = config.mysql_user, password = config.mysql_password, host = config.mysql_server, port = int(config.mysql_port)) + pageParts = webInterface.pageParts(environ, db) + output = pageParts.header() + output += pageParts.journalForDay() + output += pageParts.addRecord() + output += pageParts.footer() + db.close() + + status = '200 OK' + response_headers = [('Content-type', 'text/html'), + ('Content-Length', str(len(output)))] + start_response(status, response_headers) + return([output]) diff --git a/print.py b/print.py new file mode 100644 index 0000000..f6a14a1 --- /dev/null +++ b/print.py @@ -0,0 +1,28 @@ +''' +Created on 20.12.2010 + +@author: morozov +''' + +import os, sys, cgitb +serverdir = os.path.dirname(__file__) +sys.path.append(serverdir + os.sep + 'include') +import functions +import database +import webInterface +cgitb.enable() +config = functions.readConfig() + +def application(environ, start_response): + db = database.dbOperations(dbname = config.mysql_database, user = config.mysql_user, password = config.mysql_password, host = config.mysql_server, port = int(config.mysql_port)) + pageParts = webInterface.pageParts(environ, db) + output = pageParts.headerPrint() + output += pageParts.journalForDayPrint() + output += pageParts.footerPrint() + db.close() + + status = '200 OK' + response_headers = [('Content-type', 'text/html'), + ('Content-Length', str(len(output)))] + start_response(status, response_headers) + return([output]) diff --git a/tools/.htaccess b/tools/.htaccess new file mode 100644 index 0000000..cb24fd7 --- /dev/null +++ b/tools/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all diff --git a/tools/dbinit.py b/tools/dbinit.py new file mode 100755 index 0000000..b305ce6 --- /dev/null +++ b/tools/dbinit.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +''' +Created on 15.09.2010 + +@author: Sergey Morozov +''' + +import MySQLdb, os, sys +toolsdir = os.path.dirname(__file__) +if toolsdir == '': + toolsdir = '.' +serverdir = toolsdir + os.sep + '..' +sys.path.append(serverdir + os.sep + 'include') +import functions +config = functions.readConfig() + +if __name__ == '__main__': + db = MySQLdb.connect( + host = config.mysql_server, + user = config.mysql_user, + passwd = config.mysql_password, + db = config.mysql_database, + port = int(config.mysql_port) + ) + cursor = db.cursor() + q = "CREATE TABLE IF NOT EXISTS `journal` ("\ + "`key` bigint(20) NOT NULL AUTO_INCREMENT,"\ + "`name` varchar(128) NOT NULL,"\ + "`position` varchar(128) NOT NULL,"\ + "`department` varchar(128) NOT NULL,"\ + "`date` date NOT NULL,"\ + "`start_time` time NOT NULL,"\ + "`end_time` time NOT NULL,"\ + "`description` text NOT NULL,"\ + "`chief` varchar(128) DEFAULT NULL,"\ + "`username` varchar(128) NOT NULL,"\ + "PRIMARY KEY (`key`)"\ + ") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1" + cursor.execute(q) + db.commit() + q = "CREATE TABLE IF NOT EXISTS `user_settings` ("\ + "`key` bigint(20) NOT NULL AUTO_INCREMENT,"\ + "`username` varchar(128) NOT NULL,"\ + "`setting` varchar(128) NOT NULL,"\ + "`value` text,"\ + "PRIMARY KEY (`key`)"\ + ") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1" + cursor.execute(q) + db.commit() + cursor.close() + db.close() diff --git a/tools/shell.py b/tools/shell.py new file mode 100755 index 0000000..c87c77e --- /dev/null +++ b/tools/shell.py @@ -0,0 +1,23 @@ +#!/usr/bin/python -i +''' +Created on 16.12.2010 + +@author: morozov +''' + +if __name__ == '__main__': + import os, sys, datetime + toolsdir = os.path.dirname(__file__) + if toolsdir == '': + toolsdir = '.' + serverdir = toolsdir + os.sep + '..' + sys.path.append(serverdir + os.sep + 'include') + import functions + import database + config = functions.readConfig() + try: + db = database.dbOperations(dbname = config.mysql_database, user = config.mysql_user, password = config.mysql_password, host = config.mysql_server, port = int(config.mysql_port)) + except: + print('Error!') + else: + print('Created instance (named \'db\') of \'dbOperations\' class.') diff --git a/view-all.py b/view-all.py new file mode 100644 index 0000000..96db43b --- /dev/null +++ b/view-all.py @@ -0,0 +1,28 @@ +''' +Created on 20.12.2010 + +@author: morozov +''' +import os, sys, cgitb, datetime +from wsgiref.util import application_uri +serverdir = os.path.dirname(__file__) +sys.path.append(serverdir + os.sep + 'include') +import functions +import database +import webInterface +cgitb.enable() +config = functions.readConfig() + +def application(environ, start_response): + db = database.dbOperations(dbname = config.mysql_database, user = config.mysql_user, password = config.mysql_password, host = config.mysql_server, port = int(config.mysql_port)) + pageParts = webInterface.pageParts(environ, db) + output = pageParts.header() + output += pageParts.allDays() + output += pageParts.footer() + db.close() + + status = '200 OK' + response_headers = [('Content-type', 'text/html'), + ('Content-Length', str(len(output)))] + start_response(status, response_headers) + return([output])