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 += ' %s |
\n' % self.errMsg
+ output += '
\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' % (self.journalDate.day, self.journalDate.month, self.journalDate.year)
+ output += ' | \n'
+ output += ' \n'
+ output += ' версия для печати\n' % (self.journalDate.day, self.journalDate.month, self.journalDate.year)
+ output += ' | \n'
+ output += '
\n'
+ 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 += ' %s | \n' % field
+ output += '
\n'
+ output += '
\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 += ' %s | \n' % field
+ output += '
\n'
+ output += '
\n'
+ return(output)
+
+ def addRecord(self):
+ output = ' Добавить запись:
\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 += ' %s.%s.%s | %s |
\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 += '
\n'
+ output += ' \n'
+ return(output)
+
+ def footer(self):
+ output = '
© 2010 Сергей Морозов, ОАО «Промышленно - строительное товарищество»
\n'
+ output += '\n'
+ return(output)
+
+ def footerPrint(self):
+ output = ' \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])