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']) |