You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(57) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(44) |
Feb
(151) |
Mar
(131) |
Apr
(171) |
May
(125) |
Jun
(43) |
Jul
(26) |
Aug
(19) |
Sep
(10) |
Oct
|
Nov
(4) |
Dec
(28) |
| 2004 |
Jan
(134) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <de...@us...> - 2003-07-25 00:40:37
|
Update of /cvsroot/pymerase/pymerase/pymerase
In directory sc8-pr-cvs1:/tmp/cvs-serv6337/pymerase
Modified Files:
ClassMembers.py
Log Message:
Add support for tracking to see if a class exists to support
a foreign key reference
Index: ClassMembers.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/ClassMembers.py,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** ClassMembers.py 23 Jul 2003 01:51:55 -0000 1.25
--- ClassMembers.py 25 Jul 2003 00:40:34 -0000 1.26
***************
*** 219,222 ****
--- 219,223 ----
self.unique = 0
self.primaryKey = 0
+ self.foreignKey = 0
def setRequired(self, value):
***************
*** 243,250 ****
--- 244,270 ----
def setPrimaryKey(self, value):
+ """Flag this attribute as being a primary key
+ """
self.primaryKey = parseBoolValue(value)
def isPrimaryKey(self):
+ """Does this attribute model an ER Primary key relationship
+ """
return self.primaryKey
+
+ def setForeignKey(self, value):
+ """Flag this attribute as being a foreign key
+ """
+ self.foreignKey = parseBoolValue(value)
+
+ def isForeignKey(self):
+ """Does this attribute model an ER foreign key relationship
+ """
+ return self.foreignKey
+
+ def isKey(self):
+ """Does this attribute model an ER key relationship
+ """
+ return (self.primaryKey or self.foreignKey)
def createAssociation(pymeraseConfig, thisEnd, otherEnd, associationName=None, associationUUID=None):
|
|
From: <de...@us...> - 2003-07-23 01:54:38
|
Update of /cvsroot/pymerase/pymerase/tests
In directory sc8-pr-cvs1:/tmp/cvs-serv27488
Modified Files:
TestSchool.py
Log Message:
Added try:finally: clauses to always make sure the connection to the db
is closed.
Added a test for Bug 774006, the failure converting attributes to associations
Index: TestSchool.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/tests/TestSchool.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** TestSchool.py 19 Jun 2003 22:32:13 -0000 1.9
--- TestSchool.py 23 Jul 2003 01:54:35 -0000 1.10
***************
*** 50,54 ****
! class CreatePyGenexTestCases(unittest.TestCase):
def __init__(self, name):
"""Initialize
--- 50,54 ----
! class CreateSchoolTestCases(unittest.TestCase):
def __init__(self, name):
"""Initialize
***************
*** 150,157 ****
def testPoseidon161CreateUML_underscore_API(self):
! self.testCreateUML_underscore_API("school.xmi")
def testPoseidon141CreateUML_underscore_API(self):
! self.testCreateUML_underscore_API("schoolPoseidon141_.xmi")
def testCreateCapsAPI(self):
--- 150,157 ----
def testPoseidon161CreateUML_underscore_API(self):
! self.testCreateUML_underscore_API("schoolPoseidon161.xmi")
def testPoseidon141CreateUML_underscore_API(self):
! self.testCreateUML_underscore_API("schoolPoseidon141.xmi")
def testCreateCapsAPI(self):
***************
*** 214,305 ****
s = school.DBSession(host, database)
! # define some faculty
! for faculty_values in [('0001', 'Xavier', 'Xal', 'Associate'),
! ('0002', 'Yolanda', 'Yetti', 'Visiting'),
! ('0003', 'Zaphod', 'Zim', 'Full')]:
! f = s.Faculty()
! f.setUid(faculty_values[0])
! f.setGivenName(faculty_values[1])
! f.setFamilyName(faculty_values[2])
! f.setStatus(faculty_values[3])
! f.commit()
!
! # define some houses
! for house_name in ('Blacker', 'Dabney', 'Flemming', 'Lloyd', 'Page',
! 'Ricketts', 'Ruddock'):
! house = s.Houses()
! house.setHouseName(house_name)
! house.commit()
!
! for student_values in [('0004', 'Ann', 'Arbor', 1, 2),
! ('0005', 'Ben', 'Blartfast', 2, 1),
! ('0006', 'Charles', 'Cooper', 3, 3),
! ('0007', 'Daria', 'Darwin', 4, 2),]:
! student = s.Students()
! student.setUid(student_values[0])
! student.setGivenName(student_values[1])
! student.setFamilyName(student_values[2])
! student.setHousesFk(student_values[3])
! # FIXME: set key link to advisor, this is a bad name
! # but does reflect the base class name
! student.setFacultyFk(student_values[4])
! student.commit()
!
! courses_list = [('Bi/CS 164', 'Lecture, discussion, and projects in bioinformatics. Students will create, extend, and integrate bioinformatic software tools. Topics include genome-scale mRNA expression analysis, signal transduction pathway modeling, genome database analysis tools, and modeling morphogenesis from gene expression patterns. Each project will link into a larger Web application framework.'),
! ('Bi 188', 'Introduction to the genetics of humans. Subjects covered include human genome structure, genetic diseases and predispositions, the human genome project, forensic use of human genetic markers, human variability, and human evolution.')
! ]
! for course_value in courses_list:
! course = s.Courses()
! course.setCourseCode(course_value[0])
! course.setDescription(course_value[1])
! course.commit()
! for class_values in [(1,1,'2002-04-01',3.3),
! (2,1,'2002-04-01',3.0),
! ]:
! c = s.Classes()
! # FIXME: need better way to declare what name the primary key should have
! #c.setUidFk(class_values[0])
! c.setStudentsFk(class_values[0])
! c.setCoursesFk(class_values[1])
! c.setTerm(class_values[2])
! c.setGrade(class_values[3])
! c.commit()
! for staff_value in [('0008', 'diane', 'trout', 'code monkey'),
! ('0009', 'kevin', 'cooper', 'lab tech'),
! ('0010', 'jason', 'stewart', 'software consultant'),
! ('0011', 'amanda', 'jones', 'music')]:
! staff = s.Staff()
! staff.setUid(staff_value[0])
! staff.setGivenName(staff_value[1])
! staff.setFamilyName(staff_value[2])
! staff.setJobDescription(staff_value[3])
! staff.commit()
!
! s.close()
def testReadObject(self):
import school
s = school.DBSession(host, database)
! # grab by primary key and make sure it's our first example student
! ann = s.Students(4)
! self.failUnless(ann.getGivenName() == 'Ann')
! self.failUnless(ann.getFamilyName() == 'Arbor')
! self.failUnless(ann.getHousesFk() == 1)
! self.failUnless(ann.getFacultyFk() == 2)
!
! # try to read inherited object via class factory
! zaphod = s.Faculty(3)
! self.failUnless(zaphod.getGivenName() == 'Zaphod')
! self.failUnless(zaphod.getFamilyName() == 'Zim')
! self.failUnless(zaphod.getStatus() == 'Full')
!
! # The initial load of data installs 4 example students
! student_list = s.getAllObjects(school.Students.Students)
! self.failUnless(len(student_list) == 4)
! s.close()
--- 214,344 ----
s = school.DBSession(host, database)
! try:
! # define some faculty
! for faculty_values in [('0001', 'Xavier', 'Xal', 'Associate'),
! ('0002', 'Yolanda', 'Yetti', 'Visiting'),
! ('0003', 'Zaphod', 'Zim', 'Full')]:
! f = s.Faculty()
! f.setUid(faculty_values[0])
! f.setGivenName(faculty_values[1])
! f.setFamilyName(faculty_values[2])
! f.setStatus(faculty_values[3])
! f.commit()
!
! # define some houses
! for house_name in ('Blacker', 'Dabney', 'Flemming', 'Lloyd', 'Page',
! 'Ricketts', 'Ruddock'):
! house = s.Houses()
! house.setHouseName(house_name)
! house.commit()
!
! for student_values in [('0004', 'Ann', 'Arbor', 1, 2),
! ('0005', 'Ben', 'Blartfast', 2, 1),
! ('0006', 'Charles', 'Cooper', 3, 3),
! ('0007', 'Daria', 'Darwin', 4, 2),]:
! student = s.Students()
! student.setUid(student_values[0])
! student.setGivenName(student_values[1])
! student.setFamilyName(student_values[2])
! student.setHousesFk(student_values[3])
! # FIXME: set key link to advisor, this is a bad name
! # but does reflect the base class name
! student.setFacultyFk(student_values[4])
! student.commit()
!
! courses_list = [('Bi/CS 164', 'Lecture, discussion, and projects in bioinformatics. Students will create, extend, and integrate bioinformatic software tools. Topics include genome-scale mRNA expression analysis, signal transduction pathway modeling, genome database analysis tools, and modeling morphogenesis from gene expression patterns. Each project will link into a larger Web application framework.'),
! ('Bi 188', 'Introduction to the genetics of humans. Subjects covered include human genome structure, genetic diseases and predispositions, the human genome project, forensic use of human genetic markers, human variability, and human evolution.')
! ]
! for course_value in courses_list:
! course = s.Courses()
! course.setCourseCode(course_value[0])
! course.setDescription(course_value[1])
! course.commit()
!
! for class_values in [(1,1,'2002-04-01',3.3),
! (2,1,'2002-04-01',3.0),
! ]:
! c = s.Classes()
! # FIXME: need better way to declare what name the primary key should have
! #c.setUidFk(class_values[0])
! c.setStudentsFk(class_values[0])
! c.setCoursesFk(class_values[1])
! c.setTerm(class_values[2])
! c.setGrade(class_values[3])
! c.commit()
!
!
! for staff_value in [('0008', 'diane', 'trout', 'code monkey'),
! ('0009', 'kevin', 'cooper', 'lab tech'),
! ('0010', 'jason', 'stewart', 'software consultant'),
! ('0011', 'amanda', 'jones', 'music')]:
! staff = s.Staff()
! staff.setUid(staff_value[0])
! staff.setGivenName(staff_value[1])
! staff.setFamilyName(staff_value[2])
! staff.setJobDescription(staff_value[3])
! staff.commit()
! finally:
! s.close()
! def testInsertClassAttribute(self):
! """Insert an element into a collection of class type coded as a collection
+ Tests Bug #774006
+ (well sort of, since the failure is that pymerase can't create such
+ an attribute)
+ """
+ import school
+ school.moduleReload()
+ s = school.DBSession(host, database)
! try:
! xavier = s.People(1)
!
! home = s.Address()
! home.setName('Home')
! home.setStreetAddress('123 Anywhere')
! home.setCity('Pasadena')
! home.setRegion('California')
! home.setPostalCode('91125')
!
! # bug 774006 would fail here
! xavier.appendAddresses(home)
! xavier.commit()
!
! xavierLoaded = s.People(1)
! addresses = xavierLoaded.getAddresses()
! self.failUnless(len(addresses) == 1)
! self.failUnless(addresses[0].getStreetAddress() == home.getStreetAddress())
! self.failUnless(addresses[0].getCity() == home.getCity())
! self.failUnless(addresses[0].getRegion() == home.getRegion() )
! self.failUnless(addresses[0].getPostalCode() == home.getPostalCode() )
! finally:
! s.close()
def testReadObject(self):
import school
+ school.moduleReload()
s = school.DBSession(host, database)
! try:
! # grab by primary key and make sure it's our first example student
! ann = s.Students(4)
! self.failUnless(ann.getGivenName() == 'Ann')
! self.failUnless(ann.getFamilyName() == 'Arbor')
! self.failUnless(ann.getHousesFk() == 1)
! self.failUnless(ann.getFacultyFk() == 2)
!
! # try to read inherited object via class factory
! zaphod = s.Faculty(3)
! self.failUnless(zaphod.getGivenName() == 'Zaphod')
! self.failUnless(zaphod.getFamilyName() == 'Zim')
! self.failUnless(zaphod.getStatus() == 'Full')
!
! # The initial load of data installs 4 example students
! student_list = s.getAllObjects(school.Students.Students)
! self.failUnless(len(student_list) == 4, "students = %d" % (len(student_list)))
! finally:
! s.close()
***************
*** 309,322 ****
s = school.DBSession(host, database)
! daria = s.Students(7)
!
! # FIXME: this should read advisor
! advisors = daria.getAdvisor()
!
! self.failUnless(len(advisors) == 1)
! self.failUnless(advisors[0].getUid() == '0002')
! self.failUnless(advisors[0].getGivenName() == 'Yolanda')
! self.failUnless(advisors[0].getFamilyName() == 'Yetti')
! s.close()
--- 348,363 ----
s = school.DBSession(host, database)
! try:
! daria = s.Students(7)
!
! # FIXME: this should read advisor
! advisors = daria.getAdvisor()
!
! self.failUnless(len(advisors) == 1)
! self.failUnless(advisors[0].getUid() == '0002')
! self.failUnless(advisors[0].getGivenName() == 'Yolanda')
! self.failUnless(advisors[0].getFamilyName() == 'Yetti')
! finally:
! s.close()
***************
*** 326,336 ****
s = school.DBSession(host, database)
! houses = getHouses(s)
! darbs = houses['dabney'].getStudents()
!
! self.failUnless(len(darbs) == 1)
! self.failUnless(darbs[0].getGivenName() == "Ben")
! self.failUnless(darbs[0].getFamilyName() == "Blartfast")
! s.close()
--- 367,379 ----
s = school.DBSession(host, database)
! try:
! houses = getHouses(s)
! darbs = houses['dabney'].getStudents()
!
! self.failUnless(len(darbs) == 1, "darbs = %d" % (len(darbs)))
! self.failUnless(darbs[0].getGivenName() == "Ben")
! self.failUnless(darbs[0].getFamilyName() == "Blartfast")
! finally:
! s.close()
***************
*** 342,393 ****
school.moduleReload()
s = school.DBSession(host, database)
-
- houses = getHouses(s)
- faculty = getFaculty(s)
-
- #erin = Students(db_session=s)
- erin = s.Students()
- erin.setUid('0012')
- erin.setGivenName("Erin")
- erin.setFamilyName("Ericsson")
- erin.setHouse(houses['page'])
-
- faculty['yolanda'].appendStudents(erin)
- faculty['yolanda'].commit()
-
- #erin_list = s.getObjectsWhere(s.Students, "\"GivenName\" = 'Erin'")
- givenNameQuery = "%s = 'Erin'" % ( givenNameFieldName )
- erin_list = s.getObjectsWhere(s.Students, givenNameQuery)
- self.failUnless(len(erin_list) == 1)
- erin_loaded = erin_list[0]
! self.failUnless(erin.id() == erin_loaded.id())
! self.failUnless(erin.getGivenName() == erin_loaded.getGivenName())
! self.failUnless(erin.getFamilyName() == erin_loaded.getFamilyName())
! self.failUnless(erin.getHousesFk() == erin_loaded.getHousesFk())
! self.failUnless(erin.getFacultyFk() == erin_loaded.getFacultyFk())
!
! frederick = s.Students()
! frederick.setUid('0013')
! frederick.setGivenName("Frederick")
! frederick.setFamilyName("Fergison")
! frederick.setHouse(houses['ricketts'])
! faculty['zaphod'].appendStudents(frederick)
! faculty['zaphod'].commit()
!
! givenNameQuery = "%s = 'Frederick'" % (givenNameFieldName)
! frederick_list = s.getObjectsWhere(s.Students, givenNameQuery)
! self.failUnless(len(frederick_list) == 1)
! frederick_loaded = frederick_list[0]
!
! self.failUnless(frederick.id() == frederick_loaded.id(),
! "frederick primary key failure %s != %s" % (frederick.id(),
! frederick_loaded.id()))
! self.failUnless(frederick.getGivenName() == frederick_loaded.getGivenName())
! self.failUnless(frederick.getFamilyName()==frederick_loaded.getFamilyName())
! self.failUnless(frederick.getHousesFk() == frederick_loaded.getHousesFk())
! self.failUnless(frederick.getFacultyFk() == frederick_loaded.getFacultyFk())
!
! s.close()
--- 385,437 ----
school.moduleReload()
s = school.DBSession(host, database)
! try:
! houses = getHouses(s)
! faculty = getFaculty(s)
!
! #erin = Students(db_session=s)
! erin = s.Students()
! erin.setUid('0012')
! erin.setGivenName("Erin")
! erin.setFamilyName("Ericsson")
! erin.setHouse(houses['page'])
!
! faculty['yolanda'].appendStudents(erin)
! faculty['yolanda'].commit()
!
! #erin_list = s.getObjectsWhere(s.Students, "\"GivenName\" = 'Erin'")
! givenNameQuery = "%s = 'Erin'" % ( givenNameFieldName )
! erin_list = s.getObjectsWhere(s.Students, givenNameQuery)
! self.failUnless(len(erin_list) == 1, "erin = %d" % (len(erin_list)))
! erin_loaded = erin_list[0]
!
! self.failUnless(erin.id() == erin_loaded.id())
! self.failUnless(erin.getGivenName() == erin_loaded.getGivenName())
! self.failUnless(erin.getFamilyName() == erin_loaded.getFamilyName())
! self.failUnless(erin.getHousesFk() == erin_loaded.getHousesFk())
! self.failUnless(erin.getFacultyFk() == erin_loaded.getFacultyFk())
!
! frederick = s.Students()
! frederick.setUid('0013')
! frederick.setGivenName("Frederick")
! frederick.setFamilyName("Fergison")
! frederick.setHouse(houses['ricketts'])
! faculty['zaphod'].appendStudents(frederick)
! faculty['zaphod'].commit()
!
! givenNameQuery = "%s = 'Frederick'" % (givenNameFieldName)
! frederick_list = s.getObjectsWhere(s.Students, givenNameQuery)
! self.failUnless(len(frederick_list) == 1)
! frederick_loaded = frederick_list[0]
!
! self.failUnless(frederick.id() == frederick_loaded.id(),
! "frederick primary key failure %s != %s" % (frederick.id(),
! frederick_loaded.id()))
! self.failUnless(frederick.getGivenName() == frederick_loaded.getGivenName())
! self.failUnless(frederick.getFamilyName()==frederick_loaded.getFamilyName())
! self.failUnless(frederick.getHousesFk() == frederick_loaded.getHousesFk())
! self.failUnless(frederick.getFacultyFk() == frederick_loaded.getFacultyFk())
! finally:
! s.close()
***************
*** 402,417 ****
s = school.DBSession(host, database)
! houses = getHouses(s)
!
! givenNameQuery = "%s = 'Frederick'" % (givenNameFieldName)
! frederick_list = s.getObjectsWhere(s.Students, givenNameQuery)
! self.failUnless(len(frederick_list) == 1)
! frederick = frederick_list[0]
!
! frederick.setHouse(houses['ricketts'])
! frederick.setHouse(houses['dabney'])
! frederick.commit()
!
! s.close()
def testManyToOneInsert(self):
--- 446,462 ----
s = school.DBSession(host, database)
! try:
! houses = getHouses(s)
!
! givenNameQuery = "%s = 'Frederick'" % (givenNameFieldName)
! frederick_list = s.getObjectsWhere(s.Students, givenNameQuery)
! self.failUnless(len(frederick_list) == 1)
! frederick = frederick_list[0]
!
! frederick.setHouse(houses['ricketts'])
! frederick.setHouse(houses['dabney'])
! frederick.commit()
! finally:
! s.close()
def testManyToOneInsert(self):
***************
*** 419,442 ****
school.moduleReload()
s = school.DBSession(host, database)
-
- charles = s.Students(6)
- daria = s.Students(7)
- bi188 = s.Courses(2)
-
- classes = s.Classes()
- classes.setCourses(bi188)
- classes.setStudents(charles)
- classes.setTerm(DateTime.DateTime(2002,04,01))
- classes.setGrade(3.3)
- classes.commit()
-
- classes = s.Classes()
- classes.setCourses(bi188)
- classes.setStudents(daria)
- classes.setTerm(DateTime.DateTime(2002,04,01))
- classes.setGrade(3.7)
- classes.commit()
! s.close()
--- 464,488 ----
school.moduleReload()
s = school.DBSession(host, database)
! try:
! charles = s.Students(6)
! daria = s.Students(7)
! bi188 = s.Courses(2)
!
! classes = s.Classes()
! classes.setCourses(bi188)
! classes.setStudents(charles)
! classes.setTerm(DateTime.DateTime(2002,04,01))
! classes.setGrade(3.3)
! classes.commit()
!
! classes = s.Classes()
! classes.setCourses(bi188)
! classes.setStudents(daria)
! classes.setTerm(DateTime.DateTime(2002,04,01))
! classes.setGrade(3.7)
! classes.commit()
! finally:
! s.close()
***************
*** 451,475 ****
school.moduleReload()
s = school.DBSession(host, database)
-
- diane = checkEmployees(s, "diane")
- kevin = checkEmployees(s, "kevin")
- jason = checkEmployees(s, "jason")
- amanda = checkEmployees(s, "amanda")
- yolanda = checkEmployees(s, "Yolanda")
! #yolanda.appendManaged(amanda)
! diane.setManager(yolanda)
! kevin.setManager(diane)
! amanda.setManager(yolanda)
!
! diane.commit()
! kevin.commit()
!
! jason.setManager(yolanda)
! jason.commit()
! amanda.commit()
! yolanda.commit()
!
! s.close()
--- 497,522 ----
school.moduleReload()
s = school.DBSession(host, database)
! try:
! diane = checkEmployees(s, "diane")
! kevin = checkEmployees(s, "kevin")
! jason = checkEmployees(s, "jason")
! amanda = checkEmployees(s, "amanda")
! yolanda = checkEmployees(s, "Yolanda")
!
! #yolanda.appendManaged(amanda)
! diane.setManager(yolanda)
! kevin.setManager(diane)
! amanda.setManager(yolanda)
!
! diane.commit()
! kevin.commit()
!
! jason.setManager(yolanda)
! jason.commit()
! amanda.commit()
! yolanda.commit()
! finally:
! s.close()
***************
*** 478,505 ****
school.moduleReload()
s = school.DBSession(host, database)
-
- yolanda_list = getEmployees(s, "Yolanda")
- self.failUnless(len(yolanda_list) == 1, str(yolanda_list))
- yolanda = yolanda_list[0]
- managedList = yolanda.getManaged()
- self.failUnless(len(managedList) == 3)
-
- diane = filter(lambda x: x.getGivenName() == 'diane', managedList)[0]
- managedByDiane = diane.getManaged()
- self.failUnless(len(managedByDiane) == 1)
- kevin = managedByDiane[0]
- self.failUnless(kevin.getGivenName() == 'kevin')
-
- kevinManager = kevin.getManager()[0]
- self.failUnless(kevinManager.getGivenName() == diane.getGivenName())
-
- amanda_list = filter(lambda x: x.getGivenName() == 'amanda', managedList)
- self.failUnless(len(amanda_list) == 1, str(amanda_list))
- amanda = amanda_list[0]
- amandaDirect = getEmployees(s, "amanda")[0]
- self.failUnless(amanda.getGivenName() == amandaDirect.getGivenName())
- self.failUnless(amanda.getFamilyName() == amandaDirect.getFamilyName())
! s.close()
--- 525,553 ----
school.moduleReload()
s = school.DBSession(host, database)
! try:
! yolanda_list = getEmployees(s, "Yolanda")
! self.failUnless(len(yolanda_list) == 1, (map(lambda x: x.getGivenName, yolanda_list)))
! yolanda = yolanda_list[0]
! managedList = yolanda.getManaged()
! self.failUnless(len(managedList) == 3)
!
! diane = filter(lambda x: x.getGivenName() == 'diane', managedList)[0]
! managedByDiane = diane.getManaged()
! self.failUnless(len(managedByDiane) == 1)
! kevin = managedByDiane[0]
! self.failUnless(kevin.getGivenName() == 'kevin')
!
! kevinManager = kevin.getManager()[0]
! self.failUnless(kevinManager.getGivenName() == diane.getGivenName())
!
! amanda_list = filter(lambda x: x.getGivenName() == 'amanda', managedList)
! self.failUnless(len(amanda_list) == 1, str(amanda_list))
! amanda = amanda_list[0]
! amandaDirect = getEmployees(s, "amanda")[0]
! self.failUnless(amanda.getGivenName() == amandaDirect.getGivenName())
! self.failUnless(amanda.getFamilyName() == amandaDirect.getFamilyName())
! finally:
! s.close()
***************
*** 509,533 ****
# run through test twice once for underscore_api and once for CapsAPI
api_tests = [
! CreatePyGenexTestCases("testCreate_underscore_API"),
! CreatePyGenexTestCases("testCreateCapsAPI"),
! CreatePyGenexTestCases("testPoseidon141CreateUML_underscore_API"),
! CreatePyGenexTestCases("testPoseidon161CreateUML_underscore_API"),
# bizarre, if SMW attempts to parse this first
# it causes the XMI readers to fail
! CreatePyGenexTestCases("testSMWCreateUML_underscore_API"),
]
for api in api_tests:
suite.addTest(api)
! suite.addTest(CreatePyGenexTestCases("testCreateDB"))
! suite.addTest(CreatePyGenexTestCases("testSimpleInsert"))
! suite.addTest(CreatePyGenexTestCases("testReadObject"))
! suite.addTest(CreatePyGenexTestCases("testReadOneToOneLink"))
! suite.addTest(CreatePyGenexTestCases("testReadManyToOneLink"))
! suite.addTest(CreatePyGenexTestCases("testReadManyToManyLink"))
! suite.addTest(CreatePyGenexTestCases("testOneToOneInsert"))
! suite.addTest(CreatePyGenexTestCases("testOneToOneUpdate"))
! suite.addTest(CreatePyGenexTestCases("testManyToOneInsert"))
! suite.addTest(CreatePyGenexTestCases("testTreeInsert"))
! suite.addTest(CreatePyGenexTestCases("testTreeRetrieval"))
return suite
--- 557,582 ----
# run through test twice once for underscore_api and once for CapsAPI
api_tests = [
! # CreateSchoolTestCases("testCreate_underscore_API"),
! # CreateSchoolTestCases("testCreateCapsAPI"),
! CreateSchoolTestCases("testPoseidon141CreateUML_underscore_API"),
! CreateSchoolTestCases("testPoseidon161CreateUML_underscore_API"),
# bizarre, if SMW attempts to parse this first
# it causes the XMI readers to fail
! CreateSchoolTestCases("testSMWCreateUML_underscore_API"),
]
for api in api_tests:
suite.addTest(api)
! suite.addTest(CreateSchoolTestCases("testCreateDB"))
! suite.addTest(CreateSchoolTestCases("testSimpleInsert"))
! suite.addTest(CreateSchoolTestCases("testInsertClassAttribute"))
! suite.addTest(CreateSchoolTestCases("testReadObject"))
! suite.addTest(CreateSchoolTestCases("testReadOneToOneLink"))
! suite.addTest(CreateSchoolTestCases("testReadManyToOneLink"))
! suite.addTest(CreateSchoolTestCases("testReadManyToManyLink"))
! suite.addTest(CreateSchoolTestCases("testOneToOneInsert"))
! suite.addTest(CreateSchoolTestCases("testOneToOneUpdate"))
! suite.addTest(CreateSchoolTestCases("testManyToOneInsert"))
! suite.addTest(CreateSchoolTestCases("testTreeInsert"))
! suite.addTest(CreateSchoolTestCases("testTreeRetrieval"))
return suite
|
|
From: <de...@us...> - 2003-07-23 01:53:18
|
Update of /cvsroot/pymerase/pymerase/pymerase/input
In directory sc8-pr-cvs1:/tmp/cvs-serv27307
Modified Files:
parseXMI.py
Log Message:
set UUIDs for features (attributes)
use the name of the attribute for the otherEndName of the association
which replaces it.
Index: parseXMI.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/input/parseXMI.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** parseXMI.py 19 Jun 2003 22:30:39 -0000 1.23
--- parseXMI.py 23 Jul 2003 01:53:09 -0000 1.24
***************
*** 336,340 ****
thisEndType.setAssociationEnd(thisEnd)
! otherEndName = thisEndType.getName(None)
otherEnd = XMIAssociationEnd(pymeraseConfig, otherEndName)
otherEnd.setUUID(otherEndName)
--- 336,340 ----
thisEndType.setAssociationEnd(thisEnd)
! otherEndName = attribute.getName(None)
otherEnd = XMIAssociationEnd(pymeraseConfig, otherEndName)
otherEnd.setUUID(otherEndName)
***************
*** 344,348 ****
otherEndType.setAssociationEnd(otherEnd)
! association = createAssociation(pymeraseConfig, thisEnd, otherEnd)
# modify current attribute to be of FK type?
--- 344,348 ----
otherEndType.setAssociationEnd(otherEnd)
! association = createAssociation(pymeraseConfig, thisEnd, otherEnd, attribute.getName(None))
# modify current attribute to be of FK type?
***************
*** 351,357 ****
attribute.setName(attribute.getName(None) + "_fk")
else:
! warn("Attribute %s of type %s in class %s was not defined in model" % (
attribute.getName(None),
attributeType.getTypeString(),
thisEndType.getName(None)),
RuntimeWarning)
--- 351,358 ----
attribute.setName(attribute.getName(None) + "_fk")
else:
! warn("Attribute %s of type %s and uuid %s in class %s was not defined in model" % (
attribute.getName(None),
attributeType.getTypeString(),
+ attribute.getUUID(),
thisEndType.getName(None)),
RuntimeWarning)
***************
*** 396,401 ****
classFeature = ClassAttribute(self.pymeraseConfig, name)
! attributeType = feature.type
! classFeature.setType(PymeraseType(attributeType.name))
# FIXME: What else to set?
--- 397,405 ----
classFeature = ClassAttribute(self.pymeraseConfig, name)
! featureType = feature.type
! classFeature.setType(PymeraseType(featureType.name))
! classFeature.setUUID( self.getUUID( featureType ))
!
! print featureType.name, self.getUUID(featureType )
# FIXME: What else to set?
***************
*** 534,537 ****
--- 538,544 ----
"""Return the unique id of a UML model element
"""
+ if model_element.__uniqueID__ is None:
+ raise RuntimeError("UUID was none")
+
return model_element.__uniqueID__
|
|
From: <de...@us...> - 2003-07-23 01:51:58
|
Update of /cvsroot/pymerase/pymerase/pymerase
In directory sc8-pr-cvs1:/tmp/cvs-serv27161
Modified Files:
ClassMembers.py
Log Message:
Test to make sure that UUID isn't none.
Index: ClassMembers.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/ClassMembers.py,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** ClassMembers.py 30 May 2003 00:53:06 -0000 1.24
--- ClassMembers.py 23 Jul 2003 01:51:55 -0000 1.25
***************
*** 156,159 ****
--- 156,162 ----
def setUUID(self, uuid):
+ if uuid is None:
+ raise RuntimeError("UUID must not be None")
+
self.uuid = uuid
|
|
From: <de...@us...> - 2003-07-23 01:51:19
|
Update of /cvsroot/pymerase/pymerase/examples/school In directory sc8-pr-cvs1:/tmp/cvs-serv27014 Modified Files: schoolPoseidon141.zargo schoolPoseidon161.zargo Log Message: Updated school to have an example that tests 774006, the conversion of an attribute to an association was failing Index: schoolPoseidon141.zargo =================================================================== RCS file: /cvsroot/pymerase/pymerase/examples/school/schoolPoseidon141.zargo,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsibo7n0 and /tmp/cvsiUQHsQ differ Index: schoolPoseidon161.zargo =================================================================== RCS file: /cvsroot/pymerase/pymerase/examples/school/schoolPoseidon161.zargo,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsBWXzo1 and /tmp/cvsavYavS differ |
|
From: <ki...@us...> - 2003-07-22 20:35:00
|
Update of /cvsroot/pymerase/pymerase/bin
In directory sc8-pr-cvs1:/tmp/cvs-serv928
Modified Files:
pymerasegui.py
Log Message:
Added support for CreateDbTableBrowser
Index: pymerasegui.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/bin/pymerasegui.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** pymerasegui.py 26 Jun 2003 18:18:57 -0000 1.13
--- pymerasegui.py 22 Jul 2003 20:34:57 -0000 1.14
***************
*** 186,189 ****
--- 186,199 ----
self.outputDBAPIEntry.grid(row=2, column=3)
+ #CreateDbTableBrowser
+ self.intCreateDbTableBrowser = IntVar()
+ self.CreateDbTableBrowser = Checkbutton(frame,
+ text="CreateDbTableBrowser",
+ variable=self.intCreateDbTableBrowser,
+ command=self.outputModCheck1)
+ self.CreateDbTableBrowser.grid(row=3, column=2, sticky=W)
+ self.outputDbTableBrowserEntry = Entry(frame)
+ self.outputDbTableBrowserEntry.grid(row=3, column=3)
+
#CreateDBEditor
#self.intCreateDBEditor = IntVar()
***************
*** 212,218 ****
variable=self.intCreatePythonAPI,
command=self.outputModCheck1)
! self.CreatePythonAPI.grid(row=3, column=2, sticky=W)
self.outputPythonAPIEntry = Entry(frame)
! self.outputPythonAPIEntry.grid(row=3, column=3)
#CreateSQL
--- 222,228 ----
variable=self.intCreatePythonAPI,
command=self.outputModCheck1)
! self.CreatePythonAPI.grid(row=4, column=2, sticky=W)
self.outputPythonAPIEntry = Entry(frame)
! self.outputPythonAPIEntry.grid(row=4, column=3)
#CreateSQL
***************
*** 222,228 ****
variable=self.intCreateSQL,
command=self.outputModCheck1)
! self.CreateSQL.grid(row=4, column=2, sticky=W)
self.outputSQLEntry = Entry(frame)
! self.outputSQLEntry.grid(row=4, column=3)
#CreateGraphvizUML
--- 232,238 ----
variable=self.intCreateSQL,
command=self.outputModCheck1)
! self.CreateSQL.grid(row=5, column=2, sticky=W)
self.outputSQLEntry = Entry(frame)
! self.outputSQLEntry.grid(row=5, column=3)
#CreateGraphvizUML
***************
*** 232,238 ****
variable=self.intCreateGraphvizUML,
command=self.outputModCheck1)
! self.CreateGraphvizUML.grid(row=5, column=2, sticky=W)
self.outputGraphvizUMLEntry = Entry(frame)
! self.outputGraphvizUMLEntry.grid(row=5, column=3)
#CreatePyTkWidgets
--- 242,248 ----
variable=self.intCreateGraphvizUML,
command=self.outputModCheck1)
! self.CreateGraphvizUML.grid(row=6, column=2, sticky=W)
self.outputGraphvizUMLEntry = Entry(frame)
! self.outputGraphvizUMLEntry.grid(row=6, column=3)
#CreatePyTkWidgets
***************
*** 242,248 ****
variable=self.intCreatePyTkWidgets,
command=self.outputModCheck1)
! self.CreatePyTkWidgets.grid(row=6, column=2, sticky=W)
self.outputPyTkWidgetsEntry = Entry(frame)
! self.outputPyTkWidgetsEntry.grid(row=6, column=3)
#CreatePyTkDBWidgets
--- 252,258 ----
variable=self.intCreatePyTkWidgets,
command=self.outputModCheck1)
! self.CreatePyTkWidgets.grid(row=7, column=2, sticky=W)
self.outputPyTkWidgetsEntry = Entry(frame)
! self.outputPyTkWidgetsEntry.grid(row=7, column=3)
#CreatePyTkDBWidgets
***************
*** 252,258 ****
variable=self.intCreatePyTkDBWidgets,
command=self.outputModCheck1)
! self.CreatePyTkDBWidgets.grid(row=7, column=2, sticky=W)
self.outputPyTkDBWidgetsEntry = Entry(frame)
! self.outputPyTkDBWidgetsEntry.grid(row=7, column=3)
#CreateReport
--- 262,268 ----
variable=self.intCreatePyTkDBWidgets,
command=self.outputModCheck1)
! self.CreatePyTkDBWidgets.grid(row=8, column=2, sticky=W)
self.outputPyTkDBWidgetsEntry = Entry(frame)
! self.outputPyTkDBWidgetsEntry.grid(row=8, column=3)
#CreateReport
***************
*** 262,268 ****
variable=self.intCreateReport,
command=self.outputModCheck1)
! self.CreateReport.grid(row=8, column=2, sticky=W)
self.outputReportEntry = Entry(frame)
! self.outputReportEntry.grid(row=8, column=3)
#CreateTabDelimitedParser
--- 272,278 ----
variable=self.intCreateReport,
command=self.outputModCheck1)
! self.CreateReport.grid(row=9, column=2, sticky=W)
self.outputReportEntry = Entry(frame)
! self.outputReportEntry.grid(row=9, column=3)
#CreateTabDelimitedParser
***************
*** 272,278 ****
variable=self.intCreateTabDelimitedParser,
command=self.outputModCheck1)
! self.CreateTabDelimitedParser.grid(row=9, column=2, sticky=W)
self.outputTabDelimitedParserEntry = Entry(frame)
! self.outputTabDelimitedParserEntry.grid(row=9, column=3)
#CreateTableXML
--- 282,288 ----
variable=self.intCreateTabDelimitedParser,
command=self.outputModCheck1)
! self.CreateTabDelimitedParser.grid(row=10, column=2, sticky=W)
self.outputTabDelimitedParserEntry = Entry(frame)
! self.outputTabDelimitedParserEntry.grid(row=10, column=3)
#CreateTableXML
***************
*** 282,288 ****
variable=self.intCreateTableXML,
command=self.outputModCheck1)
! self.CreateTableXML.grid(row=10, column=2, sticky=W)
self.outputTableXMLEntry = Entry(frame)
! self.outputTableXMLEntry.grid(row=10, column=3)
#iPymerase
--- 292,298 ----
variable=self.intCreateTableXML,
command=self.outputModCheck1)
! self.CreateTableXML.grid(row=11, column=2, sticky=W)
self.outputTableXMLEntry = Entry(frame)
! self.outputTableXMLEntry.grid(row=11, column=3)
#iPymerase
***************
*** 293,299 ****
justify=LEFT,
command=self.outputModCheck2)
! self.iPymerase.grid(row=11, column=2, sticky=W)
self.outputiPymeraseEntry = Entry(frame)
! self.outputiPymeraseEntry.grid(row=11, column=3)
#Run load settings in initialize mode
--- 303,309 ----
justify=LEFT,
command=self.outputModCheck2)
! self.iPymerase.grid(row=12, column=2, sticky=W)
self.outputiPymeraseEntry = Entry(frame)
! self.outputiPymeraseEntry.grid(row=12, column=3)
#Run load settings in initialize mode
***************
*** 306,309 ****
--- 316,320 ----
if self.intCreateDBAPI.get() == 1 or \
+ self.intCreateDbTableBrowser.get() == 1 or \
self.intCreateCppAPI.get() == 1 or \
self.intCreateSQL.get() == 1 or \
***************
*** 322,325 ****
--- 333,337 ----
#reset other buttons
self.intCreateDBAPI.set(0)
+ self.intCreateDbTableBrowser.set(0)
self.intCreateCppAPI.set(0)
#self.intCreateDBEditor.set(0)
***************
*** 368,371 ****
--- 380,384 ----
if self.intiPymerase.get() == 0 and \
self.intCreateDBAPI.get() == 0 and \
+ self.intCreateDbTableBrowser.get() == 0 and \
self.intCreateCppAPI.get() == 0 and \
self.intCreatePythonAPI.get() == 0 and \
***************
*** 390,393 ****
--- 403,411 ----
ABORT = 1
+ if self.intCreateDbTableBrowser.get() == 1 and \
+ len(self.outputDbTableBrowserEntry.get()) == 0:
+ print 'Must enter an output path for CreateDbTableBrowser.'
+ ABORT = 1
+
if self.intCreateCppAPI.get() == 1 and \
len(self.outputCppAPIEntry.get()) == 0:
***************
*** 466,469 ****
--- 484,492 ----
self.outputDBAPIEntry.get()) )
+ if self.intCreateDbTableBrowser.get() == 1 and \
+ len(self.outputDbTableBrowserEntry.get()) > 0:
+ outputPairList.append( ('CreateDbTableBrowser',
+ self.outputDbTableBrowserEntry.get()) )
+
if self.intCreateCppAPI.get() == 1 and \
len(self.outputCppAPIEntry.get()) > 0:
***************
*** 552,555 ****
--- 575,579 ----
#Output Modules
settings['CreateDBAPI'] = self.intCreateDBAPI.get()
+ settings['CreateDbTableBrowser'] = self.intCreateDbTableBrowser.get()
settings['CreateCppAPI'] = self.intCreateCppAPI.get()
#settings['CreateDBEditor'] = self.intCreateDBEditor.get()
***************
*** 567,570 ****
--- 591,595 ----
#Output Destinations
settings['outputDBAPI'] = self.outputDBAPIEntry.get()
+ settings['outputDbTableBrowser'] = self.outputDbTableBrowserEntry.get()
settings['outputCppAPI'] = self.outputCppAPIEntry.get()
#settings['outputDBEditor'] = self.outputDBEditorEntry.get()
***************
*** 661,664 ****
--- 686,690 ----
#Output Modules
self.intCreateDBAPI.set(settings['CreateDBAPI'])
+ self.intCreateDbTableBrowser.set(settings['CreateDbTableBrowser'])
self.intCreateCppAPI.set(settings['CreateCppAPI'])
#self.intCreateDBEditor.set(settings['CreateDBEditor'])
***************
*** 677,680 ****
--- 703,708 ----
self.outputDBAPIEntry.delete(0, END)
self.outputDBAPIEntry.insert(0, settings['outputDBAPI'])
+ self.outputDbTableBrowserEntry.delete(0, END)
+ self.outputDbTableBrowserEntry.insert(0, settings['outputDbTableBrowser'])
self.outputCppAPIEntry.delete(0, END)
self.outputCppAPIEntry.insert(0, settings['outputCppAPI'])
|
|
From: <ki...@us...> - 2003-07-22 00:54:04
|
Update of /cvsroot/pymerase/pymerase/pymweb/www In directory sc8-pr-cvs1:/tmp/cvs-serv13678 Modified Files: pymweb.html Log Message: added support for CreateDbTableBrowser output module Index: pymweb.html =================================================================== RCS file: /cvsroot/pymerase/pymerase/pymweb/www/pymweb.html,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** pymweb.html 26 Jun 2003 18:19:52 -0000 1.10 --- pymweb.html 22 Jul 2003 00:54:01 -0000 1.11 *************** *** 28,31 **** --- 28,32 ---- <option value="CreateCppAPI" label="CreateCppAPI">CreateCppAPI</option> <option value="CreateDBAPI" label="CreateDBAPI">CreateDBAPI</option> + <option value="CreateDbTableBrowser" label="CreateDbTableBrowser">CreateDbTableBrowser</option> <option value="CreateGraphvizUML" label="CreateGraphvizUML">CreateGraphvizUML</option> <option value="CreatePyTkDBWidgets" label="CreatePyTkDBWidgets">CreatePyTkDBWidgets</option> |
|
From: <ki...@us...> - 2003-07-19 00:34:19
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv29719
Added Files:
CreateDbTableBrowser.py
Log Message:
First version of DbTableBrowser
-Code is a little mesy, but has documentation.
-Will need some cleaning up.
-Functional
--- NEW FILE: CreateDbTableBrowser.py ---
###########################################################################
# #
# C O P Y R I G H T N O T I C E #
# Copyright (c) 2003 by: #
# * California Institute of Technology #
# #
# All Rights Reserved. #
# #
# Permission is hereby granted, free of charge, to any person #
# obtaining a copy of this software and associated documentation files #
# (the "Software"), to deal in the Software without restriction, #
# including without limitation the rights to use, copy, modify, merge, #
# publish, distribute, sublicense, and/or sell copies of the Software, #
# and to permit persons to whom the Software is furnished to do so, #
# subject to the following conditions: #
# #
# The above copyright notice and this permission notice shall be #
# included in all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, #
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF #
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND #
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS #
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN #
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN #
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #
# SOFTWARE. #
###########################################################################
#
# Authors: Brandon King
# Last Modified: $Date: 2003/07/19 00:34:16 $
# Revision: $Revision: 1.1 $
#
"""Creates a cgi script for each Class/Table"""
#Imported System Packages.
import os
import string
import re
from pymerase.ClassMembers import getAllAttributes
from pymerase.ClassMembers import getAllAssociationEnds
from pymerase.util.Warnings import DebugWarning
from pymerase.util.Warnings import InfoWarning
import warnings
from warnings import warn
############################
# Globals
TRANSLATOR_NAME='CreateDbTableBrowser'
def getTemplate():
template = """#!/usr/bin/env python
###########################################################################
# #
# C O P Y R I G H T N O T I C E #
# Copyright (c) 2003 by: #
# * California Institute of Technology #
# #
# All Rights Reserved. #
# #
# Permission is hereby granted, free of charge, to any person #
# obtaining a copy of this software and associated documentation files #
# (the "Software"), to deal in the Software without restriction, #
# including without limitation the rights to use, copy, modify, merge, #
# publish, distribute, sublicense, and/or sell copies of the Software, #
# and to permit persons to whom the Software is furnished to do so, #
# subject to the following conditions: #
# #
# The above copyright notice and this permission notice shall be #
# included in all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, #
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF #
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND #
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS #
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN #
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN #
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #
# SOFTWARE. #
###########################################################################
#
# Generator: Pymerase (CreateDbTableBrowser Output Module)
# Authors: Brandon King
# Last Modified: $Date: 2003/07/19 00:34:16 $
# Revision: $Revision: 1.1 $
#
import cgi
import os
import sys
import pickle
import re
import string
import time
import ConfigParser
import cgitb
cgitb.enable()
from %PACKAGE_NAME% import DBSession
#Automatic update of version by CVS
rev = "$Revision: 1.1 $"
rev = rev.replace('$Revision: ', '')
rev = rev.replace(' $', '')
VERSION = '0.%s' % (rev)
TITLE = '<a href=\"http://pymerase.sf.net/\">Pymerase</a> Generated Custom DB'
#CONFIG FILE PATH
CONFIG_FILE = os.path.abspath('./%PACKAGE_NAME%_%CLASS_NAME%.cfg')
#DEFAULT DIRS
ROOTPATH = '/var/local/%PACKAGE_NAME%'
#PathAliasConveter
# Converts between strings (alias) passed in URL to web browser
# and the actual paths in which the file is located
#PathAliasConverter = {}
#PathAliasConverter[ROOTPATH] = LOC_BROWSER
#PathAliasConverter[TRASHPATH] = LOC_TRASH
#PathAliasConverter[DELETEPATH] = LOC_DELETE
#PathAliasConverter[TEMPDIR] = LOC_TMP
#PathAliasConverter[LOC_BROWSER] = ROOTPATH
#PathAliasConverter[LOC_TRASH] = TRASHPATH
#PathAliasConverter[LOC_DELETE] = DELETEPATH
#PathAliasConverter[LOC_TMP] = TEMPDIR
#Direction of Ordering
ASCENDING = 0
DESCENDING = 1
#SORTING
FLD_LIST = []
#DEFAULT URLS
ROOTURL = '/%PACKAGE_NAME%/'
SCRIPT = '/cgi-bin/%PACKAGE_NAME%%CLASS_NAME%.cgi'
#VIEWS
TABLEVIEW = 'tableView'
RECORDVIEW = 'recordView'
#DEFAULT COLORS
BROWSER_COLOR = '#CCCCFF'
TRASH_COLOR = '#FF0000'
#CONFIG FILE PROCESSING
if os.path.isfile(CONFIG_FILE):
parser = ConfigParser.ConfigParser()
parser.read(CONFIG_FILE)
if parser.has_section('INFO'):
if parser.has_option('INFO', 'TITLE'):
TITLE = parser.get('INFO', 'TITLE')
if parser.has_option('INFO', 'BROWSER_COLOR'):
BROWSER_COLOR = parser.get('INFO', 'BROWSER_COLOR')
#if parser.has_option('INFO', 'TRASH_COLOR'):
# TRASH_COLOR = parser.get('INFO', 'TRASH_COLOR')
if parser.has_section('DIRS'):
if parser.has_option('DIRS', 'ROOTPATH'):
ROOTPATH = parser.get('DIRS', 'ROOTPATH')
if parser.has_option('DIRS', 'TEMPDIR'):
TEMPDIR = parser.get('DIRS', 'TEMPDIR')
if parser.has_section('URLS'):
if parser.has_option('URLS', 'ROOTURL'):
ROOTURL = parser.get('URLS', 'ROOTURL')
if parser.has_option('URLS', 'SCRIPT'):
SCRIPT = parser.get('URLS', 'SCRIPT')
#def search(dataDict, field, query):
# \"\"\"
# search(dataDict, field, query)
# --> 1 if search succesful
# --> 0 if search failed
#
# dataDict - provides meta data about a file
# field - determines which field should be search
# if field == 'all', all fields searched
# query - regular expression search
# \"\"\"
# #FIXME: Try using filter() to speed up!
#
# #setup regular expression, ignore case.
# engine = re.compile(query, re.IGNORECASE)
#
# #check all fields or individual?
# if field != "all":
# result = engine.search(dataDict[field])
# if result is not None:
# return 1
# else:
# return 0
# else:
# for key in dataDict.keys():
# result = engine.search(str(dataDict[key]))
# if result is not None:
# return 1
# return 0
def getField(friendlyName):
for fld in FLD_LIST:
if fld.friendlyName == friendlyName:
return fld.name
return None
def getSortedRecords(sortField, direction, query=None, field=None):
\"\"\"
getSortedRecords(sortField, direction)
--> All files (list), no sorting if sortFiled does not exist
--> sortedFileList
sortField - the field name you want to sort by
direction - ASCENDING or DESCENDING vars
\"\"\"
#get all records from DB
allRecords = getRecords(query, field, sortField, direction)
sortRecList = []
for rec in allRecords:
sortRecList.append(getDataDict(rec))
return sortRecList
def getRecords(query=None, field=None, sortField=None, direction=None):
\"\"\"
Downloads records from database.
\"\"\"
if direction == ASCENDING:
sortDirect = ' ASC'
elif direction == DESCENDING:
sortDirect = ' DESC'
else:
sortDirect = ''
#FIXME: Need to have some way of overriding these values!
dbs = DBSession('localhost', 'arab_oligo', 'king')
if query is not None and field is not None:
if field != 'all':
fldName = getField(field)
if fldName is not None:
if sortField is not None:
objList = dbs.getObjectsWhere(dbs.%CLASS_NAME%, '%s LIKE \\\'%s%s%s\\\' ORDER BY %s%s' % \\
(fldName, '%', query, '%', getField(sortField), sortDirect))
else:
objList = dbs.getObjectsWhere(dbs.%CLASS_NAME%, '%s LIKE \\\'%s%s%s\\\'' % (fldName, '%', query, '%'))
else:
raise ValueError, 'Invalid Field Name (%s)' % (field)
else:
sqlSearch = []
for fld in FLD_LIST:
tmp = '%s LIKE \\\'%s%s%s\\\'' % (fld.name, '%', query, '%')
sqlSearch.append(tmp)
sqlSearch = string.join(sqlSearch, ' OR ')
if sortField is not None:
sqlSearch += ' ORDER BY %s%s' % (getField(sortField), sortDirect)
objList = dbs.getObjectsWhere(dbs.%CLASS_NAME%, '%s' % (sqlSearch))
else:
#objList = dbs.getAllObjects(dbs.%CLASS_NAME%)
tmpObj = dbs.%CLASS_NAME%()
objList = dbs.getObjectsWhere(dbs.%CLASS_NAME%,
'%s BETWEEN %s AND %s ORDER BY %s%s' % \\
(tmpObj.getPrimaryKeyName(), 1, 50, getField(sortField), sortDirect))
return objList
def getDataDict(dbObj):
\"\"\"
getDataDict(filePath)
--> link, dataDict
link - URL to File for downloading
dataDict - meta data about file
\"\"\"
dataDict = {}
for field in dbObj.fields.values():
dataDict[field.friendlyName] = field.value
return dataDict
#def isSafe(fileName):
# \"\"\"
# isSafe(fileName)
# --> 1 if fileName doesn't contain dir chars / or \
# --> 0 if fileName does contain dir chars / or \
# \"\"\"
# if '\\' not in fileName or '/' not in fileName or fileName != 'viewer.cfg':
# return 1
# else:
# return 0
def printTableViewHeader(direction, view, search=None, field=None):
if search is not None and field is not None:
memString = '&direction=%s&view=%s&search=%s&field=%s' % \\
(direction, view, search, field)
else:
memString = '&direction=%s&view=%s' % \\
(direction, view)
print "<table border=\\\"2\\\">"
print " <tr bgcolor=\\\"%s\\\">" % (BROWSER_COLOR)
for fld in FLD_LIST:
print " <td>"
print " <div align=\\\"center\\\">"
print " <a href=\\\"%s?sortField=%s%s\\\"><b>%s</b></a>" % \\
(SCRIPT, fld.friendlyName, memString, fld.friendlyName)
print " </div>"
print " </td>"
print " </tr>"
def printTableViewRecord(dataDict):
print " <tr>"
for fld in FLD_LIST:
print " <td>"
print " %s" % dataDict[fld.friendlyName]
print " </td>"
print " </tr>"
def printTableViewFooter():
print "</table>"
print "<br>"
def printRecord(dataDict, direction, view, search=None, field=None):
if search is not None and field is not None:
memString = '&direction=%s&view=%s&search=%s&field=%s' % \\
(direction, view, search, field)
else:
memString = '&direction=%s&view=%s' % \\
(direction, view)
print "<table border=\\\"2\\\">"
for fld in FLD_LIST:
print " <tr>"
print " <td bgcolor=\\\"%s\\\">" % (BROWSER_COLOR)
print " <div align=\\\"right\\\">"
print " <a href=\\\"%s?sortField=%s%s\\\"><b>%s</b></a>" % \\
(SCRIPT, fld.friendlyName, memString, fld.friendlyName)
print " </div>"
print " </td>"
print " <td>"
print " %s" % (dataDict[fld.friendlyName])
print " </td>"
print " </tr>"
print "</table>"
print "<br>"
########################
# MAIN
if __name__ == '__main__':
form = cgi.FieldStorage()
#Default message
msg = ""
#Process Uploads and retrive message
#if form.has_key('uploading'):
# msg += upload(form)
#save view state
if form.has_key('view'):
view = form['view'].value
else:
view = TABLEVIEW
#check if the user wants ASCENDING or DESCENDING data
if form.has_key('direction'):
direction = int(form['direction'].value)
else:
direction = DESCENDING
#check if user wants to sort the data
if form.has_key('sortField'):
sortField = form['sortField'].value
else:
sortField = 'OligoName'
#print html definition
text = "Content-Type: text/html\\n\\n"
print text
#setup query string for saved states
searchString = ""
directionString = ""
#search state
if form.has_key('search') and form.has_key('field'):
text = "&search=%s&field=%s" % (form['search'].value, form['field'].value)
searchString += text
directionString += text
#direction state
if form.has_key('direction'):
searchString += "&direction=%s" % (direction)
#sorting state
if form.has_key('sortField'):
text = "&sortField=%s" % (sortField)
searchString += text
directionString += text
#view state
if view is not None:
text = '&view=%s' % (view)
directionString += text
########################
# HTML - Header and Menu
header = \"\"\"<html>
<head>
<title>%s</title>
</head>
<body>
<div align="center">
<h1>%s</h1>
Generator Version %s<br><br>
[ <a href=\"\#search\">Search</a> |
<a href=\"%s?view=%s\">View All</a> ]<br>
[ <a href=\"%s?view=tableView%s\">Table View</a> |
<a href=\"%s?view=recordView%s\">Record View</a> ]<br>
[ <a href=\"%s?direction=0%s\">Ascending</a> |
<a href=\"%s?direction=1%s\">Decending<a/> ]<br>
<br>
\"\"\" % (TITLE, TITLE, VERSION, SCRIPT, view, SCRIPT, searchString, SCRIPT, searchString, SCRIPT, directionString, SCRIPT, directionString)
########################
# HTML - Footer
footer = \"\"\"</div>
</body>
</html>
\"\"\"
########################
# HTML - Search Form
#remember users view choice in Search form
if view == RECORDVIEW:
tableViewSelected = ''
recordViewSelected = 'selected'
else:
tableViewSelected = 'selected'
recordViewSelected = ''
#FIXME: UPDATE FIELD OPTIONS FOR CODE GENERATION
searchForm = \"\"\"<form action="%s" method="POST" enctype="multipart/form-data">
<table>
<tr>
<td>
<div align="right"><b>Search:</b></div>
</td>
<td>
<input type="text" name="search" size="30">
</td>
</tr>
<tr>
<td>
<div align="right"><b>Field:</b></div>
</td>
<td>
<select name="field" size="1">
<option value="all" label="all">All</option>
%s
</select>
</td>
</tr>
<tr>
<td>
<div align="right"><b>View:</b></div>
</td>
<td>
<select name="view" size="1">
<option value="tableView" label="tableView" %s>Table View</option>
<option value="recordView" label="recordView" %s>Record View</option>
</select>
</td>
</tr>
<tr>
<td>
<div align="right"></div>
</td>
<td>
<div align="left">
<input type="hidden" name="direction" value="%s">
<input type="hidden" name="sortField" value="%s">
<input name="Submit" value="Submit" type="submit">
<input name="Reset" value="Reset" type="reset">
</div>
</td>
</tr>
</table>
</form>
\"\"\" % (SCRIPT, '%OPTIONS%', tableViewSelected, recordViewSelected, direction, sortField)
########################
# Begin HTML Printing
#print header - Title, version, menus
print header
#show if there is a search
if form.has_key('search'):
msg += '<b>Searching:</b> Query=%s, Field=%s<br><br>' % \\
(form['search'].value, form['field'].value)
#Create FLD_LIST
#if len(recList) >= 1:
dbs = DBSession('localhost', 'arab_oligo', 'king')
rec = dbs.%CLASS_NAME%()
try:
f = open(os.path.abspath('./data/fields.pickle'), 'r')
FLD_LIST = pickle.load(f)
f.close()
except:
FLD_LIST = rec.fields.values()
f = open(os.path.abspath('./data/fields.pickle'), 'w')
pickle.dump(FLD_LIST, f)
f.close()
#get records from database.
if form.has_key('search'):
recList = getSortedRecords(sortField, direction, form['search'].value, form['field'].value)
else:
recList = getSortedRecords(sortField, direction)
if msg != '':
msg += 'Records returned is %s' % (len(recList))
else:
msg = 'Records returned is %s' % (len(recList))
#print messages
if msg != '':
print '<table border=\"2\">'
print ' <tr><td bgcolor="FF0000">'
print ' <h3><div align=\"center\">MESSAGES</div></h3>'
print ' </td></tr>'
print ' <tr><td>'
print msg
print ' </tr></td>'
print '</table>'
print '<br>'
#Update Search Options in Search HTML
for fld in FLD_LIST:
newHtml = "<option value=\\\"%s\\\" label=\\\"%s\\\">%s</option>\\n" % (fld.friendlyName, fld.friendlyName, fld.friendlyName)
newHtml += " %OPTIONS%"
searchForm = re.sub('%OPTIONS%', newHtml, searchForm)
#print tableview header if needed
if view == TABLEVIEW:
if form.has_key('search') and form.has_key('field'):
printTableViewHeader(direction, view,
form['search'].value, form['field'].value)
else:
printTableViewHeader(direction, view)
#process each file
for dataDict in recList:
#dataDict = getDataDict(rec)
if view == RECORDVIEW:
if form.has_key('search') and form.has_key('field'):
printRecord(dataDict, direction, view, form['search'].value, form['field'].value)
else:
printRecord(dataDict, direction, view)
else:
printTableViewRecord(dataDict)
#print table view footer if needed
if view == TABLEVIEW:
printTableViewFooter()
print "<HR width=\\\"90%\\\" size=\\\"1\\\" noshade>"
print "<a name=\\\"search\\\"></a>"
print "<h2>Search</h2>"
#display search form
print searchForm
#print "<HR width=\\\"90%\\\" size=\\\"1\\\" noshade>"
#print "<a name=\\\"upload\\\"></a>"
#print "<h2>Upload</h2>"
#display upload form
#print uploadForm
print footer
"""
return template
def getConfigTemplate():
template = """#%PACKAGE_NAME% %CLASS_NAME% Viewer Default Configuration File
[INFO]
TITLE=%PACKAGE_NAME% %CLASS_NAME%<br>\n<a href=\"http://pymerase.sf.net/\">Pymerase</a> Generated Custom DB
BROWSER_COLOR=#CCCCFF
[DIRS]
ROOTPATH=/var/local/%PACKAGE_NAME%
TEMPDIR=/tmp/%PACKAGE_NAME%
[URLS]
SCRIPT=/cgi-bin/%PACKAGE_NAME%%CLASS_NAME%.cgi
"""
return template
############################
# Writer components
def write(destination, classList):
"""
Create Table Search CGI in destination dirctory.
"""
if os.path.exists(destination) and not os.path.isdir(destination):
raise ValueError, '%s exists and is not a directory.' % (destination)
if not os.path.exists(destination):
os.mkdir(destination)
#Iterate through the tables/classes and process the data
for cls in classList:
code = getTemplate()
cfg = getConfigTemplate()
#Provide class and package names for cgi code
code = re.sub('%CLASS_NAME%', cls.getName(TRANSLATOR_NAME), code)
code = re.sub('%PACKAGE_NAME%', cls.getPackage(), code)
#Provide class and package names for config file
cfg = re.sub('%CLASS_NAME%', cls.getName(TRANSLATOR_NAME), cfg)
cfg = re.sub('%PACKAGE_NAME%', cls.getPackage(), cfg)
#CGI file for Class
classFile = cls.getPackage() + cls.getName(TRANSLATOR_NAME) + '.cgi'
classFilePath = os.path.join(destination, classFile)
#Config file for Class
cfgFile = cls.getPackage() + cls.getName(TRANSLATOR_NAME) + '.cfg'
cfgFilePath = os.path.join(destination, cfgFile)
#Save CGI File
f = open(classFilePath, 'w')
f.write(code)
f.close()
#Save Conf File
f = open(cfgFilePath, 'w')
f.write(cfg)
f.close()
warn("CreateDbTableBrowser Generation Complete... Good Bye.", InfoWarning)
|
|
From: <ki...@us...> - 2003-07-16 21:00:53
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv18546
Modified Files:
CreateSSUML.py
Log Message:
Remove the comma from last attribute in a class.
Index: CreateSSUML.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/output/CreateSSUML.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** CreateSSUML.py 16 Jul 2003 19:17:56 -0000 1.2
--- CreateSSUML.py 16 Jul 2003 21:00:50 -0000 1.3
***************
*** 30,33 ****
--- 30,34 ----
# Authors: Brandon King
# Last Modified: $Date$
+ # Revision: $Revision$
#
***************
*** 68,77 ****
tmp = 0
cur = 0
! for attribute in getAllAttributes(classList, cls, TRANSLATOR_NAME):
tmp = len(attribute.getName(TRANSLATOR_NAME))
if tmp > cur:
cur = tmp
! for assocEnd in getAllAssociationEnds(classList, cls, TRANSLATOR_NAME):
tmp = len(assocEnd.getOppositeEnd().getName(TRANSLATOR_NAME))
if tmp > cur:
--- 69,85 ----
tmp = 0
cur = 0
!
! allAttributes = getAllAttributes(classList, cls, TRANSLATOR_NAME)
! allAssociationEnds = getAllAssociationEnds(classList, cls, TRANSLATOR_NAME)
!
! #Used to remove last comma
! #totalNumAttribs = len(allAssociationEnds) + len(allAttributes)
!
! for attribute in allAttributes:
tmp = len(attribute.getName(TRANSLATOR_NAME))
if tmp > cur:
cur = tmp
! for assocEnd in allAssociationEnds:
tmp = len(assocEnd.getOppositeEnd().getName(TRANSLATOR_NAME))
if tmp > cur:
***************
*** 83,88 ****
# a give class line up with each other.
totalIndent = cur + 3
!
!
#Set Class Title Title
--- 91,95 ----
# a give class line up with each other.
totalIndent = cur + 3
!
#Set Class Title Title
***************
*** 117,121 ****
text.append(" + %s:" % (attribName) + indent + "%s," % (type))
!
#Process each association end
for assocEnd in getAllAssociationEnds(classList, cls, TRANSLATOR_NAME):
--- 124,129 ----
text.append(" + %s:" % (attribName) + indent + "%s," % (type))
!
!
#Process each association end
for assocEnd in getAllAssociationEnds(classList, cls, TRANSLATOR_NAME):
***************
*** 145,150 ****
#Create Association Attribtues
! text.append(" + %s:" % (name) + indent + "%s%s," % (assocEnd.getOppositeEnd().getClassName(TRANSLATOR_NAME),
! sym))
text.append(");")
--- 153,162 ----
#Create Association Attribtues
! text.append(" + %s:" % (name) + indent + "%s%s," \
! % (assocEnd.getOppositeEnd().getClassName(TRANSLATOR_NAME),
! sym))
!
! #Remove last ','... not needed after last attribute
! text[len(text) - 1] = text[len(text) - 1].replace(',', '')
text.append(");")
|
|
From: <ki...@us...> - 2003-07-16 20:33:39
|
Update of /cvsroot/pymerase/pymerase/pymerase/util
In directory sc8-pr-cvs1:/tmp/cvs-serv13812
Modified Files:
PymeraseType.py
Log Message:
Changed Java types... 'serial' type from 'long' to 'int'
Index: PymeraseType.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/util/PymeraseType.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** PymeraseType.py 15 Jul 2003 22:26:33 -0000 1.17
--- PymeraseType.py 16 Jul 2003 20:33:30 -0000 1.18
***************
*** 163,167 ****
def getJavaTypeStr(self):
if re.match("serial", self.type_string):
! return "long"
elif re.match(".*char.*", self.type_string):
return "String"
--- 163,167 ----
def getJavaTypeStr(self):
if re.match("serial", self.type_string):
! return "int"
elif re.match(".*char.*", self.type_string):
return "String"
|
|
From: <ki...@us...> - 2003-07-16 19:17:59
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv30953
Modified Files:
CreateSSUML.py
Log Message:
Forgot closing ;, fixed.
Index: CreateSSUML.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/output/CreateSSUML.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CreateSSUML.py 15 Jul 2003 23:14:46 -0000 1.1
--- CreateSSUML.py 16 Jul 2003 19:17:56 -0000 1.2
***************
*** 148,152 ****
sym))
! text.append(")")
text.append("")
--- 148,152 ----
sym))
! text.append(");")
text.append("")
|
|
From: <ki...@us...> - 2003-07-15 23:14:48
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv29192
Added Files:
CreateSSUML.py
Log Message:
first attempt at a Squash Sigmoid Pseudo UML file format output module
--- NEW FILE: CreateSSUML.py ---
###########################################################################
# #
# C O P Y R I G H T N O T I C E #
# Copyright (c) 2003 by: #
# * California Institute of Technology #
# #
# All Rights Reserved. #
# #
# Permission is hereby granted, free of charge, to any person #
# obtaining a copy of this software and associated documentation files #
# (the "Software"), to deal in the Software without restriction, #
# including without limitation the rights to use, copy, modify, merge, #
# publish, distribute, sublicense, and/or sell copies of the Software, #
# and to permit persons to whom the Software is furnished to do so, #
# subject to the following conditions: #
# #
# The above copyright notice and this permission notice shall be #
# included in all copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, #
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF #
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND #
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS #
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN #
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN #
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #
# SOFTWARE. #
###########################################################################
#
# Authors: Brandon King
# Last Modified: $Date: 2003/07/15 23:14:46 $
#
"""Creates Squash Sigmoid Psuedo UML File Format"""
#Imported System Packages.
import os
import string
from pymerase.ClassMembers import getAllAttributes
from pymerase.ClassMembers import getAllAssociationEnds
from pymerase.output.dbAPI import fkeyTypes
from pymerase.util.Warnings import DebugWarning
from pymerase.util.Warnings import InfoWarning
import warnings
from warnings import warn
############################
# Globals
TRANSLATOR_NAME='CreateSSUML'
############################
# Writer components
def write(destination, classList):
"""
Create Report in destination dirctory.
"""
text = []
#Iterate through the tables/classes and process the data
for cls in classList:
#Handle Indentation for Class (Make it look pretty)
tmp = 0
cur = 0
for attribute in getAllAttributes(classList, cls, TRANSLATOR_NAME):
tmp = len(attribute.getName(TRANSLATOR_NAME))
if tmp > cur:
cur = tmp
for assocEnd in getAllAssociationEnds(classList, cls, TRANSLATOR_NAME):
tmp = len(assocEnd.getOppositeEnd().getName(TRANSLATOR_NAME))
if tmp > cur:
cur = tmp
#totalIdent is the total indentation for 'type' section.
# Used to calculate how much whitespace should go inbetween
# attribute and type information to make all the 'types' for
# a give class line up with each other.
totalIndent = cur + 3
#Set Class Title Title
#text.append("%s" % (cls.getName(TRANSLATOR_NAME)))
className = cls.getName(TRANSLATOR_NAME)
#Get name of class which this class inherits from
baseClassNames = cls.getBaseClassNames(TRANSLATOR_NAME)
#IF inherits from one class
if len(baseClassNames) == 1:
text.append("%s ^ %s" % (className, baseClassNames[0]))
#elif inherits from more than one class --> Not supported
elif len(baseClassNames) > 1:
text.append("%s ^ %s" % (className, baseClassNames[0]))
warn('Class %s inherts from %s classes... Only supports single inheritance. Choosing %s' % \
(className, len(baseClassNames), baseClassNames[0]), InfoWarning)
#No inheritance needed
else:
text.append("%s" % (className))
#Start class def
text.append("(")
#Process each attribute in a given table (class)
for attribute in getAllAttributes(classList, cls, TRANSLATOR_NAME):
attribName = attribute.getName(TRANSLATOR_NAME)
type = attribute.getType().getJavaTypeStr()
#Pretty Indenting Calculation
indentNum = totalIndent - len(attribName)
indent = " " * indentNum
text.append(" + %s:" % (attribName) + indent + "%s," % (type))
#Process each association end
for assocEnd in getAllAssociationEnds(classList, cls, TRANSLATOR_NAME):
mult = assocEnd.getMultiplicity()
sym = ''
#Handle Multiplicity
if mult == fkeyTypes.OneToOne:
sym = ''
elif mult == fkeyTypes.ManyToOne:
sym = '*'
elif mult == fkeyTypes.ManyToMany:
warn('ManyToMany relationships not supported, converting to ManyToOne for %s.%s' \
(className, assocEnd.getOppositeEnd().getName(TRANSLATOR_NAME)), DebugWarning)
sym = '*'
elif mult == fkeyTypes.OneToLots:
warn('ManyToMany relationships not supported, converting to ManyToOne for %s.%s' \
(className, assocEnd.getOppositeEnd().getName(TRANSLATOR_NAME)), DebugWarning)
sym = '*'
name = assocEnd.getOppositeEnd().getName(TRANSLATOR_NAME)
#Make it look pretty... calculate indentation
indentNum = totalIndent - len(name)
indent = " " * indentNum
#Create Association Attribtues
text.append(" + %s:" % (name) + indent + "%s%s," % (assocEnd.getOppositeEnd().getClassName(TRANSLATOR_NAME),
sym))
text.append(")")
text.append("")
text = string.join(text, '\n')
f = open(destination, 'w')
f.write(text)
f.close()
warn("Squash Sigmoid Pseudo UML Generation Complete... Good Bye.", InfoWarning)
|
|
From: <ki...@us...> - 2003-07-15 22:26:38
|
Update of /cvsroot/pymerase/pymerase/pymerase/util
In directory sc8-pr-cvs1:/tmp/cvs-serv21814
Modified Files:
PymeraseType.py
Log Message:
Added Java Types
Index: PymeraseType.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/util/PymeraseType.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** PymeraseType.py 16 Jun 2003 20:39:31 -0000 1.16
--- PymeraseType.py 15 Jul 2003 22:26:33 -0000 1.17
***************
*** 161,164 ****
--- 161,193 ----
return "None"
+ def getJavaTypeStr(self):
+ if re.match("serial", self.type_string):
+ return "long"
+ elif re.match(".*char.*", self.type_string):
+ return "String"
+ elif re.match("text", self.type_string):
+ return "String"
+ elif re.match("name", self.type_string):
+ return "String"
+ elif re.match("int.*", self.type_string):
+ return "int"
+ elif re.match("float", self.type_string):
+ return "float"
+ elif re.match("double.*", self.type_string):
+ return "double"
+ elif re.match("bool", self.type_string):
+ return "boolean"
+ elif re.match("datetime", self.type_string):
+ return "Date"
+ # added to handle XMI java string class
+ elif re.match("[Ss]tring", self.type_string):
+ return "String"
+ elif re.match("Date", self.type_string) or re.match("Time", self.type_string):
+ return "Date"
+ elif re.match("char", self.type_string):
+ return "char"
+ else:
+ return "None"
+
def getCppTypeStr(self):
if re.match("serial", self.type_string):
|
|
From: <ki...@us...> - 2003-07-08 01:39:47
|
Update of /cvsroot/pymerase/htdocs/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv10840
Modified Files:
index.shtml
Log Message:
updated output module docs
Index: index.shtml
===================================================================
RCS file: /cvsroot/pymerase/htdocs/docs/index.shtml,v
retrieving revision 1.33
retrieving revision 1.34
diff -C2 -d -r1.33 -r1.34
*** index.shtml 30 May 2003 03:28:01 -0000 1.33
--- index.shtml 8 Jul 2003 01:39:44 -0000 1.34
***************
*** 39,43 ****
- Documentation about Input Modules<br>
<a href="output">Output Modules</a> [ <a href="output/output_modules.html">html</a> |
! <a href="https://sourceforge.net/project/showfiles.php?group_id=63836&release_id=157673">pdf</a> ] - Documentation about Output Modules<br><br>
</td>
</tr>
--- 39,43 ----
- Documentation about Input Modules<br>
<a href="output">Output Modules</a> [ <a href="output/output_modules.html">html</a> |
! <a href="https://sourceforge.net/project/showfiles.php?group_id=63836&release_id=170163">pdf</a> ] - Documentation about Output Modules<br><br>
</td>
</tr>
|
|
From: <ki...@us...> - 2003-07-08 01:38:13
|
Update of /cvsroot/pymerase/htdocs/docs/output In directory sc8-pr-cvs1:/tmp/cvs-serv10618 Modified Files: output_modules.html Log Message: v0.1.6 release Index: output_modules.html =================================================================== RCS file: /cvsroot/pymerase/htdocs/docs/output/output_modules.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** output_modules.html 7 May 2003 00:51:18 -0000 1.1 --- output_modules.html 8 Jul 2003 01:38:08 -0000 1.2 *************** *** 1,6 **** ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ! "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> ! <meta name="GENERATOR" content="TtH 3.33"> <style type="text/css"> div.p { margin-top: 7pt;}</style> <style type="text/css"><!-- --- 1,6 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ! "http://www.w3.org/TR/html4/loose.dtd"> <html> ! <meta name="GENERATOR" content="TtH 3.40"> <style type="text/css"> div.p { margin-top: 7pt;}</style> <style type="text/css"><!-- *************** *** 14,20 **** ! <title>Pymerase Docs - Output Modules ! </title> ! <h1 align="center"><font color="#0000FF">Pymerase Docs - Output Modules </font> </h1> --- 14,23 ---- ! <title>Pymerase Docs - Output Modules</title> ! ! <div class="p"><!----></div> ! ! <title>Pymerase Docs - Output Modules</title> ! <h1 align="center"><font color="#0000FF">Pymerase Docs - Output Modules </font> </h1> *************** *** 23,27 **** Copyright © 2003 California Institute of Technology </h3> ! <h3 align="center">Version 0.1.5<br />May 6, 2003 </h3> --- 26,30 ---- Copyright © 2003 California Institute of Technology </h3> ! <h3 align="center">Version 0.1.6<br />Jul 7, 2003 </h3> *************** *** 40,46 **** >1.1.2 <font color="#0000FF">Current CVS Checkout</font></a><br /> <a href="#tth_sEc1.1.3" ! >1.1.3 <font color="#0000FF">Output Formats</font></a><br /> <a href="#tth_sEc1.1.4" ! >1.1.4 <font color="#0000FF">System Requirements</font></a><br /> <a href="#tth_sEc2" >2 <font color="#0000FF">CreateDBAPI</font></a><br /> --- 43,51 ---- >1.1.2 <font color="#0000FF">Current CVS Checkout</font></a><br /> <a href="#tth_sEc1.1.3" ! >1.1.3 <font color="#0000FF">Pymerase v0.1.99.0</font></a><br /> <a href="#tth_sEc1.1.4" ! >1.1.4 <font color="#0000FF">Output Formats</font></a><br /> ! <a href="#tth_sEc1.1.5" ! >1.1.5 <font color="#0000FF">System Requirements</font></a><br /> <a href="#tth_sEc2" >2 <font color="#0000FF">CreateDBAPI</font></a><br /> *************** *** 86,90 **** >5.3.2 <font color="#0000FF">PostgreSQL Table Names</font></a><br /> <a href="#tth_sEc6" ! >6 <font color="#0000FF">CreateTableXML</font></a><br /> <a href="#tth_sEc6.1" >6.1 <font color="#0000FF">Description</font></a><br /> --- 91,95 ---- >5.3.2 <font color="#0000FF">PostgreSQL Table Names</font></a><br /> <a href="#tth_sEc6" ! >6 <font color="#0000FF">CreateTabDelimitedParser</font></a><br /> <a href="#tth_sEc6.1" >6.1 <font color="#0000FF">Description</font></a><br /> *************** *** 92,104 **** >6.2 <font color="#0000FF">Usage</font></a><br /> <a href="#tth_sEc7" ! >7 <font color="#0000FF">iPymerase</font></a><br /> <a href="#tth_sEc7.1" >7.1 <font color="#0000FF">Description</font></a><br /> <a href="#tth_sEc7.2" >7.2 <font color="#0000FF">Usage</font></a><br /> ! <a href="#tth_sEc7.3" ! >7.3 <font color="#0000FF">Caveats</font></a><br /> ! <a href="#tth_sEc7.3.1" ! >7.3.1 <font color="#0000FF">pymerasegui.py / pymerase -gui</font></a><br /> --- 97,115 ---- >6.2 <font color="#0000FF">Usage</font></a><br /> <a href="#tth_sEc7" ! >7 <font color="#0000FF">CreateTableXML</font></a><br /> <a href="#tth_sEc7.1" >7.1 <font color="#0000FF">Description</font></a><br /> <a href="#tth_sEc7.2" >7.2 <font color="#0000FF">Usage</font></a><br /> ! <a href="#tth_sEc8" ! >8 <font color="#0000FF">iPymerase</font></a><br /> ! <a href="#tth_sEc8.1" ! >8.1 <font color="#0000FF">Description</font></a><br /> ! <a href="#tth_sEc8.2" ! >8.2 <font color="#0000FF">Usage</font></a><br /> ! <a href="#tth_sEc8.3" ! >8.3 <font color="#0000FF">Caveats</font></a><br /> ! <a href="#tth_sEc8.3.1" ! >8.3.1 <font color="#0000FF">pymerasegui.py / pymerase -gui</font></a><br /> *************** *** 138,141 **** --- 149,153 ---- <table> <tr><td><b>Output Module </td><td align="center"><b>Status </td><td align="center"><b>Prev. Status </td><td><b>Description </td></tr> + <tr><td>CreateCppAPI </td><td align="center">WP </td><td align="center">Planning </td><td>Generation of C++ API </td></tr> <tr><td>CreateDBAPI </td><td align="center">Beta </td><td align="center">Beta </td><td>Python Database API (Currently </td></tr> <tr><td></td><td align="center"></td><td align="center"></td><td>PostgreSQL Support) </td></tr> *************** *** 155,158 **** --- 167,173 ---- <tr><td>CreateSQL </td><td align="center">Beta </td><td align="center">Beta </td><td>Creates SQL statements creating </td></tr> <tr><td></td><td align="center"></td><td align="center"></td><td>a database </td></tr> + <tr><td>CreateTabDelimitedParser </td><td align="center">Alpha </td><td align="center">Planning </td><td>Generates Tab Delimited Text </td></tr> + <tr><td></td><td align="center"></td><td align="center"></td><td>Parser with support for pickling </td></tr> + <tr><td></td><td align="center"></td><td align="center"></td><td>or saving to database. </td></tr> <tr><td>CreateTableXML </td><td align="center">Beta </td><td align="center">Beta </td><td>Generates Table.dtd XML </td></tr> <tr><td></td><td align="center"></td><td align="center"></td><td>files. Provides more information </td></tr> *************** *** 164,168 **** <div class="p"><!----></div> <h4><a name="tth_sEc1.1.3"> ! 1.1.3</a> <font color="#0000FF">Output Formats</font></h4> <div class="p"><!----></div> --- 179,215 ---- <div class="p"><!----></div> <h4><a name="tth_sEc1.1.3"> ! 1.1.3</a> <font color="#0000FF">Pymerase v0.1.99.0</font></h4> ! ! <div class="p"><!----></div> ! ! <table> ! <tr><td><b>Output Module </td><td align="center"><b>Status </td><td align="center"><b>Prev. Status </td><td><b>Description </td></tr> ! <tr><td>CreateDBAPI </td><td align="center">Beta </td><td align="center">Beta </td><td>Python Database API (Currently </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>PostgreSQL Support) </td></tr> ! <tr><td>CreateDBEditor </td><td align="center">Abandoned </td><td align="center">Alpha </td><td>Prototype CGI </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>Scripts for accessing DB </td></tr> ! <tr><td>CreateGraphvizUML </td><td align="center">Beta </td><td align="center">Beta </td><td>Generates dot files for </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>use with Graphviz. </td></tr> ! <tr><td>CreateHtmlForms </td><td align="center">Abandoned </td><td align="center">Alpha </td><td>Prototype Html Forms </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>used with CreateDBEditor. </td></tr> ! <tr><td>CreatePyTkDBWidgets </td><td align="center">Alpha </td><td align="center">Alpha </td><td>Creates Python </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>Tkinter DBAPI Aware Widgets </td></tr> ! <tr><td>CreatePyTkWidgets </td><td align="center">Alpha </td><td align="center">Alpha </td><td>Creates Python </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>Tkinter Widget Lib for GUI Building </td></tr> ! <tr><td>CreatePythonAPI </td><td align="center">WP </td><td align="center">WP </td><td>Python Object Model </td></tr> ! <tr><td>CreateReport </td><td align="center">Beta </td><td align="center">Beta </td><td>Creates a Report text file </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>describing your model. </td></tr> ! <tr><td>CreateSQL </td><td align="center">Beta </td><td align="center">Beta </td><td>Creates SQL statements creating </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>a database </td></tr> ! <tr><td>CreateTableXML </td><td align="center">Beta </td><td align="center">Beta </td><td>Generates Table.dtd XML </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>files. Provides more information </td></tr> ! <tr><td>iPymerase </td><td align="center">Beta </td><td align="center">Beta </td><td>Exposes an ipython interpreter </td></tr> ! <tr><td></td><td align="center"></td><td align="center"></td><td>for exploring Pymerase API. ! </td></tr></b></b></b></b></table> ! ! ! <div class="p"><!----></div> ! <h4><a name="tth_sEc1.1.4"> ! 1.1.4</a> <font color="#0000FF">Output Formats</font></h4> <div class="p"><!----></div> *************** *** 170,173 **** --- 217,221 ---- <table> <tr><td><b>Output Module </td><td><b>Output Format </td></tr> + <tr><td>CreateCppAPI </td><td>Directory (C++ Code) </td></tr> <tr><td>CreateDBAPI </td><td>Directory (Python Package) </td></tr> <tr><td>CreateGraphvizUML </td><td>File (.dot) </td></tr> *************** *** 176,180 **** <tr><td>CreateReport </td><td>File (.txt) </td></tr> <tr><td>CreateSQL </td><td>File (.sql) </td></tr> ! <tr><td>CreateTableXML </td><td>Directory (schema/)</td></tr> <tr><td>iPymerase </td><td>No Output </td></tr></b></b></table> --- 224,229 ---- <tr><td>CreateReport </td><td>File (.txt) </td></tr> <tr><td>CreateSQL </td><td>File (.sql) </td></tr> ! <tr><td>CreateTabDelimitedParser </td><td>File (.py) </td></tr> ! <tr><td>CreateTableXML </td><td>Directory (schema/) </td></tr> <tr><td>iPymerase </td><td>No Output </td></tr></b></b></table> *************** *** 182,187 **** <div class="p"><!----></div> ! <h4><a name="tth_sEc1.1.4"> ! 1.1.4</a> <font color="#0000FF">System Requirements</font></h4> <div class="p"><!----></div> --- 231,236 ---- <div class="p"><!----></div> ! <h4><a name="tth_sEc1.1.5"> ! 1.1.5</a> <font color="#0000FF">System Requirements</font></h4> <div class="p"><!----></div> *************** *** 189,192 **** --- 238,242 ---- <table> <tr><td><b>Output Module </td><td><b>Python Module Req. </td><td><b>Other Requirements </td></tr> + <tr><td>CreateCppAPI </td><td>None </td><td>GCC, Make </td></tr> <tr><td>CreateDBAPI </td><td>Pygresql (pgdb), mxDatetime (mx.DateTime) </td><td>Postgresql </td></tr> <tr><td>CreateGraphvizUML </td><td>None </td><td>Graphviz (dot) </td></tr> *************** *** 196,199 **** --- 246,250 ---- <tr><td>CreateReport </td><td>None </td><td>None </td></tr> <tr><td>CreateSQL </td><td>None </td><td>PostgreSQL </td></tr> + <tr><td>CreateTabDelimitedParser </td><td>CreateDBAPI (Optional) </td><td>None </td></tr> <tr><td>CreateTableXML </td><td>None </td><td>None </td></tr> <tr><td>iPymerase </td><td>None </td><td>ipython *************** *** 347,351 **** <div class="p"><!----></div> <a name="tth_fIg1"> ! </a> <img src="images/xmiSchool.jpg"> <center>Figure 1: CreateGraphvizUML Example Output: xmiSchool Example</center> --- 398,402 ---- <div class="p"><!----></div> <a name="tth_fIg1"> ! </a> <a href="images/xmiSchool.eps">Figure</a> <center>Figure 1: CreateGraphvizUML Example Output: xmiSchool Example</center> *************** *** 461,468 **** <div class="p"><!----></div> <h2><a name="tth_sEc6"> ! 6</a> <font color="#0000FF">CreateTableXML</font></h2> <h3><a name="tth_sEc6.1"> 6.1</a> <font color="#0000FF">Description</font></h3> CreateTableXML generates XML files of your model which can then be read back into Pymerase using the parseGenexSchemaXML input --- 512,597 ---- <div class="p"><!----></div> <h2><a name="tth_sEc6"> ! 6</a> <font color="#0000FF">CreateTabDelimitedParser</font></h2> <h3><a name="tth_sEc6.1"> 6.1</a> <font color="#0000FF">Description</font></h3> + Note that the description below is for the alpha version of the + CreateTabDelimitedParser output module. New and improved features are + likely to be added in the near future. + + <div class="p"><!----></div> + This output module generates a tab delimited text file parser. To + generate the parser correctly you need to define a single 'Class' in + UML, or a single 'Table' using table.dtd XML. The first attribute in + the class/table will be column 0 (first column). The second attribute + in the class/table will be column 1 (second column) and so on and so + forth. + + <div class="p"><!----></div> + The Parser file itself contains the following: + + <div class="p"><!----></div> + + <table> + <tr><td><b>*Parser </td><td>Tab Delimited Text Parser </td></tr> + <tr><td><b>*Record </td><td>Stores One Line of Parsed Text </td></tr> + <tr><td><b>*Master </td><td>Base Container Class of *Records </td></tr> + <tr><td><b>*PickleMaster </td><td>Inherits from *Master </td></tr> + <tr><td></td><td>Enables class to pickle itself to disk </td></tr> + <tr><td><b>*DbMaster </td><td>Inherits from *Master </td></tr> + <tr><td></td><td>Enables class to save to DB via DBAPI + </td></tr></b></b></b></b></b></table> + + + <div class="p"><!----></div> + The *Master class provides a save() function which doesn't do much by + itself. The purpose to this class is to be a base class for a custom + Master class which has a custom save command. Two super classes have + been provide for use. *PickleMaster which uses Python's 'pickle', to + save itself to disc. *DbMaster, on the other hand, will save to + database which can be generated by 'CreateSQL' output module. And then + accessed by the DBAPI generated by the 'CreateDBAPI' output module. + + <div class="p"><!----></div> + <h3><a name="tth_sEc6.2"> + 6.2</a> <font color="#0000FF">Usage</font></h3> + + <div class="p"><!----></div> + To use the use the parser to save your tab delimited text file to a + database after you created the database (CreateSQL) and generated the + DBAPI (CreateDBAPI), your import the generated parser module and type + the following python code. + + <div class="p"><!----></div> + + <pre> + #Note that * are replaced by more meaningful names when the parser + # is generated. + + #Choose a Master container class and pass it to the parser + parser = *Parser(*DbMaster) + + #Pass the file name of the tab delimited text to the parser + parsedData = parser.parse(fileName) + + #Tell the parsed data to save itself to the database. + parsedData.save('localhost', 'myDatabase', 'myUser', 'myPassword') + + </pre> + + <div class="p"><!----></div> + Hopefully that helps, but if are confused or have any questions, feel + free to send a message to one of the Pymerase mailing lists. Also note + that the generated tab delimited text parser contains documention on + how to use it. + + <div class="p"><!----></div> + + <div class="p"><!----></div> + <h2><a name="tth_sEc7"> + 7</a> <font color="#0000FF">CreateTableXML</font></h2> + + <h3><a name="tth_sEc7.1"> + 7.1</a> <font color="#0000FF">Description</font></h3> CreateTableXML generates XML files of your model which can then be read back into Pymerase using the parseGenexSchemaXML input *************** *** 471,476 **** <div class="p"><!----></div> ! <h3><a name="tth_sEc6.2"> ! 6.2</a> <font color="#0000FF">Usage</font></h3> All you have to do is tell Pymerase what directory you want your XML files to end up in and then your done. Edit away, and then feed it --- 600,605 ---- <div class="p"><!----></div> ! <h3><a name="tth_sEc7.2"> ! 7.2</a> <font color="#0000FF">Usage</font></h3> All you have to do is tell Pymerase what directory you want your XML files to end up in and then your done. Edit away, and then feed it *************** *** 482,490 **** <div class="p"><!----></div> ! <h2><a name="tth_sEc7"> ! 7</a> <font color="#0000FF">iPymerase</font></h2> ! <h3><a name="tth_sEc7.1"> ! 7.1</a> <font color="#0000FF">Description</font></h3> iPymerase is meant as an Output Module developement tool. It will drop you into an ipython interactive interpreter and allow you to explore --- 611,619 ---- <div class="p"><!----></div> ! <h2><a name="tth_sEc8"> ! 8</a> <font color="#0000FF">iPymerase</font></h2> ! <h3><a name="tth_sEc8.1"> ! 8.1</a> <font color="#0000FF">Description</font></h3> iPymerase is meant as an Output Module developement tool. It will drop you into an ipython interactive interpreter and allow you to explore *************** *** 494,499 **** <div class="p"><!----></div> ! <h3><a name="tth_sEc7.2"> ! 7.2</a> <font color="#0000FF">Usage</font></h3> Just run pymerase using anything other than the Pymweb interface to Pymerase and launch the iPymerase output module. You will see the --- 623,628 ---- <div class="p"><!----></div> ! <h3><a name="tth_sEc8.2"> ! 8.2</a> <font color="#0000FF">Usage</font></h3> Just run pymerase using anything other than the Pymweb interface to Pymerase and launch the iPymerase output module. You will see the *************** *** 523,531 **** <div class="p"><!----></div> ! <h3><a name="tth_sEc7.3"> ! 7.3</a> <font color="#0000FF">Caveats</font></h3> ! <h4><a name="tth_sEc7.3.1"> ! 7.3.1</a> <font color="#0000FF">pymerasegui.py / pymerase -gui</font></h4> If you run iPymerase from the Pymerase GUI, then you will have to make sure you exit the ipython interpreter when your done, otherwise the --- 652,660 ---- <div class="p"><!----></div> ! <h3><a name="tth_sEc8.3"> ! 8.3</a> <font color="#0000FF">Caveats</font></h3> ! <h4><a name="tth_sEc8.3.1"> ! 8.3.1</a> <font color="#0000FF">pymerasegui.py / pymerase -gui</font></h4> If you run iPymerase from the Pymerase GUI, then you will have to make sure you exit the ipython interpreter when your done, otherwise the *************** *** 538,541 **** by <a href="http://hutchinson.belmont.ma.us/tth/"> T<sub><font size="-1">T</font></sub>H</a>, ! version 3.33.<br />On 6 May 2003, 17:47.</small> </html> --- 667,670 ---- by <a href="http://hutchinson.belmont.ma.us/tth/"> T<sub><font size="-1">T</font></sub>H</a>, ! version 3.40.<br />On 7 Jul 2003, 18:24.</small> </html> |
|
From: <ki...@us...> - 2003-07-08 01:08:59
|
Update of /cvsroot/pymerase/Docs/output In directory sc8-pr-cvs1:/tmp/cvs-serv7349 Modified Files: ChangeLog Log Message: updates Index: ChangeLog =================================================================== RCS file: /cvsroot/pymerase/Docs/output/ChangeLog,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ChangeLog 7 May 2003 23:41:18 -0000 1.1 --- ChangeLog 8 Jul 2003 01:08:57 -0000 1.2 *************** *** 1,2 **** --- 1,6 ---- + 2003-07-07: + Update for release of v0.1.99.0 + Updated with new output module + 2003-05-06: Initial Release |
|
From: <ki...@us...> - 2003-07-08 01:01:56
|
Update of /cvsroot/pymerase/Docs/output
In directory sc8-pr-cvs1:/tmp/cvs-serv6542
Modified Files:
output_modules.tex
Log Message:
Added updated information about releases of code and new output modules.
Index: output_modules.tex
===================================================================
RCS file: /cvsroot/pymerase/Docs/output/output_modules.tex,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** output_modules.tex 7 May 2003 00:34:45 -0000 1.5
--- output_modules.tex 8 Jul 2003 01:01:54 -0000 1.6
***************
*** 29,33 ****
\author{Brandon King \\
Copyright \copyright ~2003 California Institute of Technology}
! \date{Version 0.1.5\\\today}
\maketitle
\thispagestyle{empty}
--- 29,33 ----
\author{Brandon King \\
Copyright \copyright ~2003 California Institute of Technology}
! \date{Version 0.1.6\\\today}
\maketitle
\thispagestyle{empty}
***************
*** 60,63 ****
--- 60,95 ----
\bf Output Module & \bf Status & \bf Prev. Status &
\bf Description \\
+ CreateCppAPI & WP & Planning & Generation of C++ API \\
+ CreateDBAPI & Beta & Beta & Python Database API (Currently \\
+ & & & PostgreSQL Support) \\
+ CreateDBEditor & Abandoned & Alpha & Prototype CGI \\
+ & & & Scripts for accessing DB \\
+ CreateGraphvizUML & Beta & Beta & Generates dot files for \\
+ & & & use with Graphviz. \\
+ CreateHtmlForms & Abandoned & Alpha & Prototype Html Forms \\
+ & & & used with CreateDBEditor. \\
+ CreatePyTkDBWidgets & Alpha & Alpha & Creates Python \\
+ & & & Tkinter DBAPI Aware Widgets \\
+ CreatePyTkWidgets & Alpha & Alpha & Creates Python \\
+ & & & Tkinter Widget Lib for GUI Building \\
+ CreatePythonAPI & WP & WP & Python Object Model \\
+ CreateReport & Beta & Beta & Creates a Report text file \\
+ & & & describing your model. \\
+ CreateSQL & Beta & Beta & Creates SQL statements creating \\
+ & & & a database \\
+ CreateTabDelimitedParser & Alpha & Planning & Generates Tab Delimited Text \\
+ & & & Parser with support for pickling \\
+ & & & or saving to database. \\
+ CreateTableXML & Beta & Beta & Generates Table.dtd XML \\
+ & & & files. Provides more information \\
+ iPymerase & Beta & Beta & Exposes an ipython interpreter \\
+ & & & for exploring Pymerase API.
+ \end{tabular}
+
+ \subsubsection{\cb Pymerase v0.1.99.0}
+
+ \begin{tabular}{lccl}
+ \bf Output Module & \bf Status & \bf Prev. Status &
+ \bf Description \\
CreateDBAPI & Beta & Beta & Python Database API (Currently \\
& & & PostgreSQL Support) \\
***************
*** 87,90 ****
--- 119,123 ----
\begin{tabular}{ll}
\bf Output Module & \bf Output Format \\
+ CreateCppAPI & Directory (C++ Code) \\
CreateDBAPI & Directory (Python Package) \\
CreateGraphvizUML & File (.dot) \\
***************
*** 93,97 ****
CreateReport & File (.txt) \\
CreateSQL & File (.sql) \\
! CreateTableXML & Directory (schema/)\\
iPymerase & No Output
\end{tabular}
--- 126,131 ----
CreateReport & File (.txt) \\
CreateSQL & File (.sql) \\
! CreateTabDelimitedParser & File (.py) \\
! CreateTableXML & Directory (schema/) \\
iPymerase & No Output
\end{tabular}
***************
*** 101,104 ****
--- 135,139 ----
\begin{tabular}{lll}
\bf Output Module & \bf Python Module Req. & \bf Other Requirements \\
+ CreateCppAPI & None & GCC, Make \\
CreateDBAPI & Pygresql (pgdb), mxDatetime (mx.DateTime) & Postgresql \\
CreateGraphvizUML & None & Graphviz (dot) \\
***************
*** 109,112 ****
--- 144,148 ----
CreateReport & None & None \\
CreateSQL & None & PostgreSQL \\
+ CreateTabDelimitedParser & CreateDBAPI (Optional) & None \\
CreateTableXML & None & None \\
iPymerase & None & ipython
***************
*** 121,124 ****
--- 157,162 ----
\newpage
\input{modules/CreateSQL.tex}
+ \newpage
+ \input{modules/CreateTabDelimitedParser.tex}
\newpage
\input{modules/CreateTableXML.tex}
|
|
From: <ki...@us...> - 2003-07-08 01:01:06
|
Update of /cvsroot/pymerase/Docs/output In directory sc8-pr-cvs1:/tmp/cvs-serv6449 Modified Files: Makefile Log Message: add another output module Index: Makefile =================================================================== RCS file: /cvsroot/pymerase/Docs/output/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Makefile 7 May 2003 00:33:52 -0000 1.6 --- Makefile 8 Jul 2003 01:01:03 -0000 1.7 *************** *** 1,3 **** ! output_modules.pdf: output_modules.tex modules/CreateGraphvizUML.tex modules/CreateDBAPI.tex modules/CreateSQL.tex modules/iPymerase.tex modules/CreateReport.tex modules/CreateTableXML.tex latex output_modules.tex latex output_modules.tex --- 1,3 ---- ! output_modules.pdf: output_modules.tex modules/CreateGraphvizUML.tex modules/CreateDBAPI.tex modules/CreateSQL.tex modules/iPymerase.tex modules/CreateReport.tex modules/CreateTableXML.tex modules/CreateTabDelimitedParser.tex latex output_modules.tex latex output_modules.tex |
|
From: <ki...@us...> - 2003-07-08 01:00:28
|
Update of /cvsroot/pymerase/Docs/output/modules
In directory sc8-pr-cvs1:/tmp/cvs-serv6285
Added Files:
CreateTabDelimitedParser.tex
Log Message:
added documentation for CreateTabDelimitedParser output module.
--- NEW FILE: CreateTabDelimitedParser.tex ---
% Pymerase Docs - CreateSQL
% Copyright (c) California Institute of Technology
%
% Authors: Brandon King
% $Revision: 1.1 $
% Modified $Date: 2003/07/08 01:00:25 $
\section{\cb CreateTabDelimitedParser}
\subsection{\cb Description}
Note that the description below is for the alpha version of the
CreateTabDelimitedParser output module. New and improved features are
likely to be added in the near future.
This output module generates a tab delimited text file parser. To
generate the parser correctly you need to define a single 'Class' in
UML, or a single 'Table' using table.dtd XML. The first attribute in
the class/table will be column 0 (first column). The second attribute
in the class/table will be column 1 (second column) and so on and so
forth.
The Parser file itself contains the following:
\begin{tabular}{ll}
\bf *Parser & Tab Delimited Text Parser \\
\bf *Record & Stores One Line of Parsed Text \\
\bf *Master & Base Container Class of *Records \\
\bf *PickleMaster & Inherits from *Master \\
& Enables class to pickle itself to disk \\
\bf *DbMaster & Inherits from *Master \\
& Enables class to save to DB via DBAPI
\end{tabular}
The *Master class provides a save() function which doesn't do much by
itself. The purpose to this class is to be a base class for a custom
Master class which has a custom save command. Two super classes have
been provide for use. *PickleMaster which uses Python's 'pickle', to
save itself to disc. *DbMaster, on the other hand, will save to
database which can be generated by 'CreateSQL' output module. And then
accessed by the DBAPI generated by the 'CreateDBAPI' output module.
\subsection{\cb Usage}
To use the use the parser to save your tab delimited text file to a
database after you created the database (CreateSQL) and generated the
DBAPI (CreateDBAPI), your import the generated parser module and type
the following python code.
\begin{verbatim}
#Note that * are replaced by more meaningful names when the parser
# is generated.
#Choose a Master container class and pass it to the parser
parser = *Parser(*DbMaster)
#Pass the file name of the tab delimited text to the parser
parsedData = parser.parse(fileName)
#Tell the parsed data to save itself to the database.
parsedData.save('localhost', 'myDatabase', 'myUser', 'myPassword')
\end{verbatim}
Hopefully that helps, but if are confused or have any questions, feel
free to send a message to one of the Pymerase mailing lists. Also note
that the generated tab delimited text parser contains documention on
how to use it.
|
|
From: <ki...@us...> - 2003-07-08 00:49:48
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv5255
Modified Files:
CreateTabDelimitedParser.py
Log Message:
forgot closing '%'
Index: CreateTabDelimitedParser.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/output/CreateTabDelimitedParser.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** CreateTabDelimitedParser.py 26 Jun 2003 18:21:04 -0000 1.2
--- CreateTabDelimitedParser.py 8 Jul 2003 00:49:41 -0000 1.3
***************
*** 186,190 ****
\"\"\"
Description:
! %CLASSNAMEParser handles the parsing of a %CLASSNAME% tab
delimited file. Pass a class that overrides the save
function from %CLASSNAME%Master class to add more
--- 186,190 ----
\"\"\"
Description:
! %CLASSNAME%Parser handles the parsing of a %CLASSNAME% tab
delimited file. Pass a class that overrides the save
function from %CLASSNAME%Master class to add more
|
|
From: <ki...@us...> - 2003-07-02 23:34:46
|
Update of /cvsroot/pymerase/pymerase/pymerase/output/dbAPI
In directory sc8-pr-cvs1:/tmp/cvs-serv31725
Modified Files:
init.py
Log Message:
Fix for bug# 764994
CGI scripts would die when run, fixed.
Index: init.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/output/dbAPI/init.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** init.py 5 Apr 2003 00:27:01 -0000 1.6
--- init.py 2 Jul 2003 23:34:43 -0000 1.7
***************
*** 45,49 ****
"""
default_dsn = "localhost"
! default_user = os.getlogin()
default_database = None
default_password=None
--- 45,52 ----
"""
default_dsn = "localhost"
! try:
! default_user = os.getlogin()
! except:
! default_user = None
default_database = None
default_password=None
|
|
From: <ki...@us...> - 2003-06-30 18:46:42
|
Update of /cvsroot/pymerase/htdocs/download
In directory sc8-pr-cvs1:/tmp/cvs-serv16141
Modified Files:
index.shtml
Log Message:
added pymerase release
Index: index.shtml
===================================================================
RCS file: /cvsroot/pymerase/htdocs/download/index.shtml,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** index.shtml 5 Mar 2003 00:49:27 -0000 1.6
--- index.shtml 30 Jun 2003 18:46:39 -0000 1.7
***************
*** 22,28 ****
</tr>
<tr>
! <td width="100%" bgcolor="#6C8AFF">None at this point in time... See
! CVS section for instruction to download code.<br>
! </td>
</tr>
<tr>
--- 22,107 ----
</tr>
<tr>
! <td width="100%" bgcolor="#6C8AFF">
! <table border="0" width="90%">
! <tr>
! <td>
! <b>Pymerase v0.1.99.0</b>
! </td>
! <td>
! <b>File Name</b>
! </td>
! </tr>
! <tr>
! <td>
! Debian Package - Pymerase
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158843">
! python2.2-pymerase_0.1.99.0-5_all.deb</a>
! </td>
! </tr>
! <tr>
! <td>
! Debian Package - Examples
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158843">
! pymerase-examples_0.1.99.0-5_all.deb</a>
! </td>
! </tr>
! <tr>
! <td>
! Win32
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158843">
! pymerase-0.1.99.0.win32.exe</a>
! </td>
! </tr>
! <tr>
! <td>
! Source
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158843">
! pymerase-0.1.99.0.src.tgz</a>
! </td>
! </tr>
! <tr>
! <td>
! <b>SMW<b>
! </td>
! <td>
! </td>
! </tr>
! <tr>
! <td>
! Debian Package - SMW
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158848">
! smw_0.51-3_all.deb</a>
! </td>
! </tr>
! <tr>
! <td>
! Original Source
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158848">
! smw_0.51.orig.tar.gz</a>
! </td>
! </tr>
! <tr>
! <td>
! Source Patch/Diff
! </td>
! <td>
! <a href="http://sourceforge.net/project/showfiles.php?group_id=63836&release_id=158848">
! smw_0.51-3.diff.gz</a>
! </td>
! </tr>
! </table>
! </td>
</tr>
<tr>
|
|
From: <ki...@us...> - 2003-06-26 18:21:08
|
Update of /cvsroot/pymerase/pymerase/pymerase/output
In directory sc8-pr-cvs1:/tmp/cvs-serv27298
Modified Files:
CreateTabDelimitedParser.py
Log Message:
changed print statement to a warning.
Index: CreateTabDelimitedParser.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/pymerase/output/CreateTabDelimitedParser.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CreateTabDelimitedParser.py 25 Jun 2003 19:46:36 -0000 1.1
--- CreateTabDelimitedParser.py 26 Jun 2003 18:21:04 -0000 1.2
***************
*** 362,366 ****
else:
#Process
! print 'Processing %s' % (attribute.getName(TRANSLATOR_NAME))
#Create Record INIT Variables
--- 362,366 ----
else:
#Process
! warn('Processing %s' % (attribute.getName(TRANSLATOR_NAME)), DebugWarning)
#Create Record INIT Variables
|
|
From: <ki...@us...> - 2003-06-26 18:19:57
|
Update of /cvsroot/pymerase/pymerase/pymweb/www In directory sc8-pr-cvs1:/tmp/cvs-serv27070 Modified Files: pymweb.html Log Message: Added CreateTabDelimitedParser output module to list of Output Modules. Index: pymweb.html =================================================================== RCS file: /cvsroot/pymerase/pymerase/pymweb/www/pymweb.html,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** pymweb.html 14 Jun 2003 01:38:10 -0000 1.9 --- pymweb.html 26 Jun 2003 18:19:52 -0000 1.10 *************** *** 33,36 **** --- 33,37 ---- <option value="CreateReport" label="CreateReport">CreateReport</option> <option value="CreateSQL" label="CreateSQL">CreateSQL</option> + <option value="CreateTabDelimitedParser" label="CreateTabDelimitedParser">CreateTabDelimitedParser</option> <option value="CreateTableXML" label="CreateTableXML">CreateTableXML</option> </select></td> |
|
From: <ki...@us...> - 2003-06-26 18:19:00
|
Update of /cvsroot/pymerase/pymerase/bin
In directory sc8-pr-cvs1:/tmp/cvs-serv26919
Modified Files:
pymerasegui.py
Log Message:
Added support for CreateTabDelimitedParser Output module
Index: pymerasegui.py
===================================================================
RCS file: /cvsroot/pymerase/pymerase/bin/pymerasegui.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** pymerasegui.py 14 Jun 2003 01:35:13 -0000 1.12
--- pymerasegui.py 26 Jun 2003 18:18:57 -0000 1.13
***************
*** 266,269 ****
--- 266,279 ----
self.outputReportEntry.grid(row=8, column=3)
+ #CreateTabDelimitedParser
+ self.intCreateTabDelimitedParser = IntVar()
+ self.CreateTabDelimitedParser = Checkbutton(frame,
+ text="CreateTabDelimitedParser",
+ variable=self.intCreateTabDelimitedParser,
+ command=self.outputModCheck1)
+ self.CreateTabDelimitedParser.grid(row=9, column=2, sticky=W)
+ self.outputTabDelimitedParserEntry = Entry(frame)
+ self.outputTabDelimitedParserEntry.grid(row=9, column=3)
+
#CreateTableXML
self.intCreateTableXML = IntVar()
***************
*** 272,278 ****
variable=self.intCreateTableXML,
command=self.outputModCheck1)
! self.CreateTableXML.grid(row=9, column=2, sticky=W)
self.outputTableXMLEntry = Entry(frame)
! self.outputTableXMLEntry.grid(row=9, column=3)
#iPymerase
--- 282,288 ----
variable=self.intCreateTableXML,
command=self.outputModCheck1)
! self.CreateTableXML.grid(row=10, column=2, sticky=W)
self.outputTableXMLEntry = Entry(frame)
! self.outputTableXMLEntry.grid(row=10, column=3)
#iPymerase
***************
*** 283,289 ****
justify=LEFT,
command=self.outputModCheck2)
! self.iPymerase.grid(row=10, column=2, sticky=W)
self.outputiPymeraseEntry = Entry(frame)
! self.outputiPymeraseEntry.grid(row=10, column=3)
#Run load settings in initialize mode
--- 293,299 ----
justify=LEFT,
command=self.outputModCheck2)
! self.iPymerase.grid(row=11, column=2, sticky=W)
self.outputiPymeraseEntry = Entry(frame)
! self.outputiPymeraseEntry.grid(row=11, column=3)
#Run load settings in initialize mode
***************
*** 300,303 ****
--- 310,314 ----
self.intCreateGraphvizUML.get() == 1 or \
self.intCreateReport.get() == 1 or \
+ self.intCreateTabDelimitedParser.get() == 1 or \
self.intCreateTableXML.get() == 1 or \
self.intCreatePyTkWidgets.get() == 1 or \
***************
*** 319,322 ****
--- 330,334 ----
self.intCreatePyTkDBWidgets.set(0)
self.intCreateReport.set(0)
+ self.intCreateTabDelimitedParser.set(0)
self.intCreateTableXML.set(0)
self.intCreatePythonAPI.set(0)
***************
*** 359,362 ****
--- 371,375 ----
self.intCreatePythonAPI.get() == 0 and \
self.intCreateReport.get() == 0 and \
+ self.intCreateTabDelimitedParser.get() == 0 and \
self.intCreateTableXML.get() == 0 and \
self.intCreateGraphvizUML.get() == 0 and \
***************
*** 422,425 ****
--- 435,443 ----
ABORT = 1
+ if self.intCreateTabDelimitedParser.get() == 1 and \
+ len(self.outputTabDelimitedParserEntry.get()) == 0:
+ print 'Must enter an output path for CreateTabDelimitedParser.'
+ ABORT = 1
+
if self.intCreateTableXML.get() == 1 and \
len(self.outputTableXMLEntry.get()) == 0:
***************
*** 493,496 ****
--- 511,519 ----
self.outputReportEntry.get()) )
+ if self.intCreateTabDelimitedParser.get() == 1 and \
+ len(self.outputTabDelimitedParserEntry.get()) > 0:
+ outputPairList.append( ('CreateTabDelimitedParser',
+ self.outputTabDelimitedParserEntry.get()) )
+
if self.intCreateTableXML.get() == 1 and \
len(self.outputTableXMLEntry.get()) > 0:
***************
*** 538,541 ****
--- 561,565 ----
settings['CreatePyTkDBWidgets'] = self.intCreatePyTkDBWidgets.get()
settings['CreateReport'] = self.intCreateReport.get()
+ settings['CreateTabDelimitedParser'] = self.intCreateTabDelimitedParser.get()
settings['CreateTableXML'] = self.intCreateTableXML.get()
settings['iPymerase'] = self.intiPymerase.get()
***************
*** 552,555 ****
--- 576,580 ----
settings['outputPyTkDBWidgets'] = self.outputPyTkDBWidgetsEntry.get()
settings['outputReport'] = self.outputReportEntry.get()
+ settings['outputTabDelimitedParser'] = self.outputTabDelimitedParserEntry.get()
settings['outputTableXML'] = self.outputTableXMLEntry.get()
settings['outputiPymerase'] = self.outputiPymeraseEntry.get()
***************
*** 645,648 ****
--- 670,674 ----
self.intCreatePyTkDBWidgets.set(settings['CreatePyTkDBWidgets'])
self.intCreateReport.set(settings['CreateReport'])
+ self.intCreateTabDelimitedParser.set(settings['CreateTabDelimitedParser'])
self.intCreateTableXML.set(settings['CreateTableXML'])
self.intiPymerase.set(settings['iPymerase'])
***************
*** 669,672 ****
--- 695,700 ----
self.outputReportEntry.delete(0, END)
self.outputReportEntry.insert(0, settings['outputReport'])
+ self.outputTabDelimitedParserEntry.delete(0, END)
+ self.outputTabDelimitedParserEntry.insert(0, settings['outputTabDelimitedParser'])
self.outputTableXMLEntry.delete(0, END)
self.outputTableXMLEntry.insert(0, settings['outputTableXML'])
|