schooltool.lyceum.journal-2.6.3/ 0000755 0001750 0001750 00000000000 12322066433 020006 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/base.cfg 0000644 0001750 0001750 00000003202 12277532123 021401 0 ustar menesis menesis 0000000 0000000 [buildout]
extends = http://ftp.schooltool.org/schooltool/2.6/versions.cfg
versions = versions
newest = false
find-links =
http://ftp.schooltool.org/schooltool/2.6/
http://ftp.schooltool.org/schooltool/2.6/dev/
parts = package test supervisor celery scripts ctags omelette
[package]
recipe = zc.recipe.egg:eggs
unzip = true
# set eggs to package name in buildout.cfg
eggs =
[scripts]
recipe = zc.recipe.egg:scripts
unzip = true
eggs =
${package:eggs}
ZODB3
schooltool
schooltool.devtools
scripts = # ZODB3:
runzeo
zeopack
# schooltool.devtools:
i18nextract
runfdoctests
# schooltool:
make-schooltool-instance
start-schooltool-instance
schooltool-server
interpreter = python
[supervisor]
recipe = zc.recipe.egg:scripts
unzip = true
eggs = supervisor
scripts = supervisord
supervisorctl
pidproxy
# Useful script if you want to toy with supervisor settings
#echo_supervisord_conf
initialization =
import os
if os.path.exists('instance'): os.chdir('instance')
[celery]
recipe = zc.recipe.egg:scripts
unzip = true
eggs = ${package:eggs}
celery
redis
scripts = # celery:
#celerybeat
celeryd
celeryev
celeryctl
#camqadm
#celeryd-multi
[test]
recipe = schooltool.devtools:testrunner
eggs = ${package:eggs}
defaults = ['--tests-pattern', '^f?s?tests$', '-v', '--auto-color']
[ctags]
recipe = z3c.recipe.tag:tags
eggs = ${test:eggs}
[omelette]
recipe = collective.recipe.omelette
eggs = ${test:eggs}
ignores = roman zope.ucol site
schooltool.lyceum.journal-2.6.3/buildout.cfg 0000644 0001750 0001750 00000001075 12322066432 022320 0 ustar menesis menesis 0000000 0000000 [buildout]
extends = base.cfg
develop = .
[versions]
# Unset versions of packages you want to develop
schooltool.lyceum.journal =
[package]
eggs = schooltool.lyceum.journal
[test]
eggs = schooltool.lyceum.journal [test]
# To run selenium tests:
# - Download standalone selenium server from
# http://code.google.com/p/selenium/downloads/list
# - Start the server: "java -jar selenium-server-standalone-2.7.0.jar"
# - Uncomment the lines below:
#
#selenium.default = html_unit
#selenium.html_unit.web_driver = remote
#selenium.html_unit.capabilities = HTMLUNITWITHJS
schooltool.lyceum.journal-2.6.3/develop.cfg 0000644 0001750 0001750 00000000176 12270520456 022133 0 ustar menesis menesis 0000000 0000000 [buildout]
extends = deploy.cfg
parts += coverage
[coverage]
recipe = zc.recipe.egg:scripts
unzip = true
eggs = z3c.coverage
schooltool.lyceum.journal-2.6.3/src/ 0000755 0001750 0001750 00000000000 12322066433 020575 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/ 0000755 0001750 0001750 00000000000 12322066433 027422 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/SOURCES.txt 0000644 0001750 0001750 00000022735 12322066433 031317 0 ustar menesis menesis 0000000 0000000 CHANGES.txt
GPL.txt
MANIFEST.in
Makefile
README.txt
base.cfg
bootstrap.py
buildout.cfg
deploy.cfg
develop.cfg
setup.py
version.txt.in
src/schooltool/__init__.py
src/schooltool.lyceum.journal.egg-info/PKG-INFO
src/schooltool.lyceum.journal.egg-info/SOURCES.txt
src/schooltool.lyceum.journal.egg-info/dependency_links.txt
src/schooltool.lyceum.journal.egg-info/entry_points.txt
src/schooltool.lyceum.journal.egg-info/namespace_packages.txt
src/schooltool.lyceum.journal.egg-info/not-zip-safe
src/schooltool.lyceum.journal.egg-info/requires.txt
src/schooltool.lyceum.journal.egg-info/top_level.txt
src/schooltool/lyceum/__init__.py
src/schooltool/lyceum/journal/__init__.py
src/schooltool/lyceum/journal/configure.zcml
src/schooltool/lyceum/journal/interfaces.py
src/schooltool/lyceum/journal/journal.py
src/schooltool/lyceum/journal/meta.zcml
src/schooltool/lyceum/journal/plugin.zcml
src/schooltool/lyceum/journal/security.zcml
src/schooltool/lyceum/journal/term.py
src/schooltool/lyceum/journal/translations.zcml
src/schooltool/lyceum/journal/browser/__init__.py
src/schooltool/lyceum/journal/browser/attendance.py
src/schooltool/lyceum/journal/browser/configure.zcml
src/schooltool/lyceum/journal/browser/flourish.zcml
src/schooltool/lyceum/journal/browser/interfaces.py
src/schooltool/lyceum/journal/browser/journal.py
src/schooltool/lyceum/journal/browser/student.py
src/schooltool/lyceum/journal/browser/table.py
src/schooltool/lyceum/journal/browser/resources/f_journal.css
src/schooltool/lyceum/journal/browser/resources/journal.css
src/schooltool/lyceum/journal/browser/resources/journal_non_ie.css
src/schooltool/lyceum/journal/browser/templates/attendance.pt
src/schooltool/lyceum/journal/browser/templates/f_attendance_ss_add.pt
src/schooltool/lyceum/journal/browser/templates/f_attendance_ss_view.pt
src/schooltool/lyceum/journal/browser/templates/f_journal.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_absence_legend.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_absence_table.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_filldown_dialog.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_grade_table.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_grades_legend.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_history.pt
src/schooltool/lyceum/journal/browser/templates/f_journal_tertiary_nav.pt
src/schooltool/lyceum/journal/browser/templates/f_myjournal.pt
src/schooltool/lyceum/journal/browser/templates/f_school_absence_table.pt
src/schooltool/lyceum/journal/browser/templates/f_school_attendance.pt
src/schooltool/lyceum/journal/browser/templates/f_school_current_term.pt
src/schooltool/lyceum/journal/browser/templates/f_school_group_picker.pt
src/schooltool/lyceum/journal/browser/templates/f_school_instructor_picker.pt
src/schooltool/lyceum/journal/browser/templates/gradebook_tab_viewlet.pt
src/schooltool/lyceum/journal/browser/templates/journal.pt
src/schooltool/lyceum/journal/browser/templates/journal_js.pt
src/schooltool/lyceum/journal/browser/templates/journal_tab_viewlet.pt
src/schooltool/lyceum/journal/browser/templates/no_periods_journal.pt
src/schooltool/lyceum/journal/browser/templates/no_timetable_journal.pt
src/schooltool/lyceum/journal/browser/templates/section_journal_viewlet.pt
src/schooltool/lyceum/journal/browser/templates/student_journal.pt
src/schooltool/lyceum/journal/browser/templates/teacher_journal.pt
src/schooltool/lyceum/journal/browser/tests/__init__.py
src/schooltool/lyceum/journal/browser/tests/test_journal.py
src/schooltool/lyceum/journal/browser/tests/test_table.py
src/schooltool/lyceum/journal/ftests/__init__.py
src/schooltool/lyceum/journal/ftests/adjacent-sections.txt
src/schooltool/lyceum/journal/ftests/ajax.txt
src/schooltool/lyceum/journal/ftests/attendance.txt
src/schooltool/lyceum/journal/ftests/consecutive_periods.txt
src/schooltool/lyceum/journal/ftests/ftesting.zcml
src/schooltool/lyceum/journal/ftests/journal.txt
src/schooltool/lyceum/journal/ftests/lesson-comments.txt
src/schooltool/lyceum/journal/ftests/test_all.py
src/schooltool/lyceum/journal/generations/__init__.py
src/schooltool/lyceum/journal/generations/evolve1.py
src/schooltool/lyceum/journal/generations/evolve2.py
src/schooltool/lyceum/journal/generations/evolve3.py
src/schooltool/lyceum/journal/generations/evolve4.py
src/schooltool/lyceum/journal/generations/install.py
src/schooltool/lyceum/journal/generations/tests/__init__.py
src/schooltool/lyceum/journal/generations/tests/test_evolve1.py
src/schooltool/lyceum/journal/locales/__init__.py
src/schooltool/lyceum/journal/locales/ar.po
src/schooltool/lyceum/journal/locales/ca.po
src/schooltool/lyceum/journal/locales/cs.po
src/schooltool/lyceum/journal/locales/da.po
src/schooltool/lyceum/journal/locales/de.po
src/schooltool/lyceum/journal/locales/el.po
src/schooltool/lyceum/journal/locales/en_CA.po
src/schooltool/lyceum/journal/locales/en_GB.po
src/schooltool/lyceum/journal/locales/en_NG.po
src/schooltool/lyceum/journal/locales/es.po
src/schooltool/lyceum/journal/locales/es_AR.po
src/schooltool/lyceum/journal/locales/es_SV.po
src/schooltool/lyceum/journal/locales/fi.po
src/schooltool/lyceum/journal/locales/fr.po
src/schooltool/lyceum/journal/locales/id.po
src/schooltool/lyceum/journal/locales/it.po
src/schooltool/lyceum/journal/locales/km.po
src/schooltool/lyceum/journal/locales/lt.po
src/schooltool/lyceum/journal/locales/ms.po
src/schooltool/lyceum/journal/locales/nb.po
src/schooltool/lyceum/journal/locales/nl.po
src/schooltool/lyceum/journal/locales/pl.po
src/schooltool/lyceum/journal/locales/pt.po
src/schooltool/lyceum/journal/locales/pt_BR.po
src/schooltool/lyceum/journal/locales/ro.po
src/schooltool/lyceum/journal/locales/ru.po
src/schooltool/lyceum/journal/locales/schooltool.lyceum.journal.pot
src/schooltool/lyceum/journal/locales/si.po
src/schooltool/lyceum/journal/locales/sk.po
src/schooltool/lyceum/journal/locales/sr.po
src/schooltool/lyceum/journal/locales/sv.po
src/schooltool/lyceum/journal/locales/th.po
src/schooltool/lyceum/journal/locales/tr.po
src/schooltool/lyceum/journal/locales/uk.po
src/schooltool/lyceum/journal/locales/vi.po
src/schooltool/lyceum/journal/locales/zh_CN.po
src/schooltool/lyceum/journal/locales/ar/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/ca/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/cs/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/da/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/de/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/el/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/en_CA/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/en_GB/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/en_NG/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/es/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/es_AR/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/es_SV/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/fi/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/fr/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/id/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/it/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/km/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/lt/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/ms/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/nb/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/nl/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/pl/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/pt/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/pt_BR/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/ro/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/ru/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/si/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/sk/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/sr/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/sv/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/th/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/tr/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/uk/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/vi/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/locales/zh_CN/LC_MESSAGES/schooltool.lyceum.journal.mo
src/schooltool/lyceum/journal/stests/__init__.py
src/schooltool/lyceum/journal/stests/default_section.txt
src/schooltool/lyceum/journal/stests/journal_security.txt
src/schooltool/lyceum/journal/stests/journal_tab.txt
src/schooltool/lyceum/journal/stests/myjournal.txt
src/schooltool/lyceum/journal/stests/myjournal_sections.xls
src/schooltool/lyceum/journal/stests/sidebar_groups_order.txt
src/schooltool/lyceum/journal/stests/stesting.zcml
src/schooltool/lyceum/journal/stests/test_selenium.py
src/schooltool/lyceum/journal/tests/__init__.py
src/schooltool/lyceum/journal/tests/test_journal.py schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/top_level.txt 0000644 0001750 0001750 00000000013 12322066433 032146 0 ustar menesis menesis 0000000 0000000 schooltool
schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/entry_points.txt 0000644 0001750 0001750 00000000106 12322066433 032715 0 ustar menesis menesis 0000000 0000000
[z3c.autoinclude.plugin]
target = schooltool
schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/PKG-INFO 0000644 0001750 0001750 00000023177 12322066433 030531 0 ustar menesis menesis 0000000 0000000 Metadata-Version: 1.1
Name: schooltool.lyceum.journal
Version: 2.6.3
Summary: Attendance and class participation plugin for SchoolTool
Home-page: http://www.schooltool.org
Author: SchoolTool Developers
Author-email: schooltool-developers@lists.launchpad.net
License: GPL
Description: SchoolTool Lyceum Journal is part of the standard distribution of SchoolTool.
=======
CHANGES
=======
2.6.3 (2014-04-12)
------------------
- Latest translations from Launchpad
2.6.2 (2014-02-15)
------------------
- Allow uppercase values in attendance score system (https://launchpad.net/bugs/1253663)
- Update translations
2.6.1 (2013-11-24)
------------------
- Display homeroom attendance hint in all periods (https://launchpad.net/bugs/1247853)
- Journal tab should display a section in the active school year when first
opened (https://launchpad.net/bugs/1243781)
- Fix periods disappearing in exotic time zones (https://launchpad.net/bugs/1239468)
2.6.0 (2013-10-10)
------------------
- Respect name sorting setting to order columns, allow sorting by either name.
- Initialize score systems container before adding new ones.
- Order the scores in the '10 points' in descending order.
- Translate score system titles and options.
- Journal attendance / grade months should respect the configured time zone (https://launchpad.net/bugs/1233995)
- Update translations, remove unsupported ones.
2.5.3 (2013-09-13)
------------------
- Fix Journal tab clerk attendance view (https://launchpad.net/bugs/1216942)
- Spell 'score systems' as two words.
- Update Dutch translation.
2.5.2 (2013-08-23)
------------------
- Fix student's journal tab and view.
- Used jQuery UI autocomplete widget for discrete score systems
- Update GPL license and file headers from gnu.org (https://launchpad.net/bugs/1211145)
- Update Portuguese translation.
2.5.1 (2013-08-02)
------------------
- Split journal into three modes: attendance, scores, and homeroom.
- Schoolwide attendance view
- Homeroom attendance grades overlayed in journal attendance gradebook (where available)
- Rewrite journal storage based on score systems.
- Customizable journal score systems
- Excused status, enter ``ae`` or ``te`` in the journal.
- Score history
- Only clerks and instructors can edit journals by default.
2.5.0 (2013-07-03)
------------------
- Background XLS export
2.4.1 (2013-07-03)
------------------
- Update translations
2.4.0 (2013-04-04)
------------------
- Fix journals when section out-of-term-bounds schedules overlap (https://launchpad.net/bugs/1104190)
- Journals now display all scheduled dates for selected section
- Tab redirects to a section only if current user can access it (https://launchpad.net/bugs/1155226)
- Added Thai translation
2.3.1 (2013-02-19)
------------------
- Update translations
2.3.0 (2012-10-19)
------------------
- Fix exception in student journal when grade is not a number (https://launchpad.net/bugs/1065474)
2.2.1 (2012-10-08)
------------------
- Journal for students (https://launchpad.net/bugs/882663)
- Update Dutch translation
2.2.0 (2012-08-08)
------------------
- Refactored month navigation to match new-style gradebook
- Fill down empty cells in column (https://launchpad.net/bugs/932131)
- Hide sidebar button
- Update translations
2.1.0 (2012-04-18)
------------------
- Journal XLS export (https://launchpad.net/bugs/961854)
- Clicking on a student in the Journal does not go to the student (https://launchpad.net/bugs/661243)
- Fix displaying journal if section is scheduled for some other term, but not the
viewed one (https://launchpad.net/bugs/976712)
- Update translations
2.0.3 (2012-03-20)
------------------
- Tab hiding (https://launchpad.net/bugs/938810)
- Update translations
2.0.1 (2011-12-22)
------------------
- Fixed css for cells in section journal
- Update translations
2.0.0 (2011-11-22)
------------------
- Allow administrators see the journal, add a setting to allow them enter attendance
(https://launchpad.net/bugs/892362)
1.9.3 (2011-11-18)
------------------
- Fix saving attendance/grades for months other than first (https://launchpad.net/bugs/879425)
- Fix displaying journal for sections that are not scheduled (https://launchpad.net/bugs/868421)
- Link to journal from section views
1.9.2 (2011-10-28)
------------------
- Fix upgrading from versions earlier than 1.9 (https://launchpad.net/bugs/859708)
- Minimize amount of permission checks for performance reasons (https://launchpad.net/bugs/879402)
- Section stays the same when switching between Gradebook and Journal (https://launchpad.net/bugs/661240)
- Selenium testing support
- Update translations
1.9.1 (2011-10-06)
------------------
- Fully translatable
- Update translations
1.9.0 (2011-09-25)
------------------
New skin for SchoolTool 1.9 (flourish) and many other changes.
0.8.1 (2011-09-25)
------------------
- Fixed syntax error in journal.js
0.8.0 (2011-09-23)
------------------
- Removed term grading views and data.
0.7.2 (2011-04-18)
------------------
- Add meta.zcml to support making this plugin optional.
- Update translations.
0.7.1 (2010-10-20)
------------------
- Update translations
0.7.0 (2010-07-13)
------------------
This is a development release that requires SchoolTool 1.5.0
- Section journal removes consecutive periods if timetable is so configured.
0.6.0 (2010-05-26)
------------------
This release goes with SchoolTool 1.4.0
- Link to Schedule instead of Timetables when there are no periods.
(https://launchpad.net/bugs/389563)
- Update translations
0.5.3 (2010-04-27)
------------------
- Fix crash with non-ascii usernames (https://launchpad.net/bugs/495872)
- Rename journal tab to "Attendance" for students (https://launchpad.net/bugs/557450)
- Update translations (mn, fi, bg), fix or delete wrong translations.
0.5.2 (2010-04-09)
------------------
- Add security descriptions (https://launchpad.net/bugs/513476)
- Update translations
0.5.1 (2010-02-05)
------------------
- Reduce dependencies
- Fix to work with zc.table >= 0.7.0
- Update translations
0.5.0 (2010-01-06)
------------------
- Port to zope versions available in karmic https://launchpad.net/bugs/498803
- Update translations
0.4.1 (2009-12-29)
------------------
- Add period number to day of month headings, https://launchpad.net/bugs/485614
- Add Tardies column to section journal, https://launchpad.net/bugs/409997
- Support for automatic plugin inclusion (using schooltool-1.2.1 or later)
- Update and fix translations
0.4.0 (2009-11-04)
------------------
This release is compatible with and requires SchoolTool 1.2.0.
- Show period in section journal view, https://launchpad.net/bugs/409959
0.3.4 (2009-05-26)
------------------
- Add a view with links to timetables if no periods in timetables of section
are selected, https://launchpad.net/bugs/375797
0.3.2 (2009-04-20)
------------------
This release goes with SchoolTool 1.0.0.
- Removed lesson descriptions from the journal views (https://launchpad.net/bugs/356653)
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Zope
Classifier: Topic :: Education
schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/requires.txt 0000644 0001750 0001750 00000000626 12322066433 032026 0 ustar menesis menesis 0000000 0000000 schooltool>=2.6
schooltool.gradebook>=2.6
python-dateutil
pytz
setuptools
zc.table
ZODB3
zope.browserpage>=3.10.1
zope.cachedescriptors
zope.component
zope.container
zope.exceptions
zope.formlib>=4
zope.i18n
zope.i18nmessageid
zope.interface
zope.intid
zope.location
zope.publisher
zope.security
zope.traversing
zope.viewlet
[test]
zope.app.testing
zope.testing
zope.ucol
schooltool.devtools>=0.6
selenium schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/dependency_links.txt 0000644 0001750 0001750 00000000001 12322066433 033470 0 ustar menesis menesis 0000000 0000000
schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/namespace_packages.txt 0000644 0001750 0001750 00000000035 12322066433 033753 0 ustar menesis menesis 0000000 0000000 schooltool
schooltool.lyceum
schooltool.lyceum.journal-2.6.3/src/schooltool.lyceum.journal.egg-info/not-zip-safe 0000644 0001750 0001750 00000000001 12270520477 031655 0 ustar menesis menesis 0000000 0000000
schooltool.lyceum.journal-2.6.3/src/schooltool/ 0000755 0001750 0001750 00000000000 12322066433 022762 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool/__init__.py 0000644 0001750 0001750 00000000070 12270520456 025072 0 ustar menesis menesis 0000000 0000000 __import__('pkg_resources').declare_namespace(__name__)
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/ 0000755 0001750 0001750 00000000000 12322066433 024260 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/__init__.py 0000644 0001750 0001750 00000000070 12270520456 026370 0 ustar menesis menesis 0000000 0000000 __import__('pkg_resources').declare_namespace(__name__)
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/ 0000755 0001750 0001750 00000000000 12322066433 025732 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/journal.py 0000644 0001750 0001750 00000064406 12270520456 027772 0 ustar menesis menesis 0000000 0000000 #
# SchoolTool - common information systems platform for school administration
# Copyright (c) 2007 Shuttleworth Foundation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
"""
Lyceum journal content classes.
"""
from decimal import Decimal
from persistent import Persistent
import zope.schema
import zope.schema.interfaces
import zope.schema.vocabulary
import z3c.form.widget
from zope.annotation.interfaces import IAnnotations
from zope.security.proxy import removeSecurityProxy
from zope.intid.interfaces import IIntIds
from zope.container.btree import BTreeContainer
from zope.container.interfaces import INameChooser
from zope.cachedescriptors.property import Lazy
from zope.component import getUtility
from zope.component import adapter
from zope.component import adapts
from zope.component import queryMultiAdapter
from zope.interface import implementer
from zope.interface import implements
from zope.interface import Interface
from zope.keyreference.interfaces import IKeyReference
from zope.location.interfaces import ILocation
from schooltool.app.app import InitBase, StartUpBase
from schooltool.app.interfaces import ISchoolToolApplication
from schooltool.app.interfaces import ISchoolToolCalendar
from schooltool.course.interfaces import ILearner
from schooltool.course.interfaces import IInstructor
from schooltool.course.interfaces import ISection
from schooltool.export.export import XLSReportTask
from schooltool.person.interfaces import IPerson
from schooltool.requirement.interfaces import ICustomScoreSystem
from schooltool.requirement.interfaces import IEvaluations
from schooltool.requirement.evaluation import Evaluation
from schooltool.requirement.scoresystem import AbstractScoreSystem
from schooltool.requirement.scoresystem import GlobalRangedValuesScoreSystem
from schooltool.requirement.scoresystem import CustomScoreSystem
from schooltool.requirement.scoresystem import ScoreSystemAppStartup
from schooltool.requirement.scoresystem import ScoreValidationError, UNSCORED
from schooltool.requirement.interfaces import IScoreSystemContainer
from schooltool.securitypolicy.crowds import ConfigurableCrowd
from schooltool.securitypolicy.crowds import ClerksCrowd
from schooltool.lyceum.journal.interfaces import IJournalScoreSystemPreferences
from schooltool.lyceum.journal.interfaces import IAttendanceScoreSystem
from schooltool.lyceum.journal.interfaces import IPersistentAttendanceScoreSystem
from schooltool.lyceum.journal.interfaces import IEvaluateRequirement
from schooltool.lyceum.journal.interfaces import ISectionJournal
from schooltool.lyceum.journal.interfaces import ISectionJournalData
from schooltool.lyceum.journal.interfaces import IAvailableScoreSystems
from schooltool.lyceum.journal import LyceumMessage as _
# BBB
ABSENT = 'n' #n means absent in lithuanian
TARDY = 'p' #p means tardy in lithuanian
CURRENT_SECTION_TAUGHT_KEY = 'schooltool.gradebook.currentsectiontaught'
CURRENT_JOURNAL_MODE_KEY = 'schooltool.gradebook.currentjournalmode'
class AttendanceScoreSystem(AbstractScoreSystem):
implements(IAttendanceScoreSystem)
scores = ()
tag_absent = ()
tag_tardy = ()
tag_excused = ()
def __init__(self, title, description=None, **kw):
super(AttendanceScoreSystem, self).__init__(title, description=description)
self.initDefaults(**kw)
def initDefaults(self, **kw):
if 'scores' not in kw:
self.scores = (('a', _('Absent')),
('t', _('Tardy')),
('ae', _('Absent (excused)')),
('te', _('Tardy (excused)')))
self.tag_absent = 'a', 'ae',
self.tag_tardy = 't', 'te',
self.tag_excused = 'ae', 'te',
else:
self.scores = kw['scores']
for attr in ('tag_absent', 'tag_tardy', 'tag_excused'):
setattr(self, attr, tuple(kw.get(attr, ())))
def isValidScore(self, score):
"""See interfaces.IScoreSystem"""
if score is UNSCORED:
return True
if not isinstance(score, (str, unicode)):
return False
for s in self.scoresDict.keys():
if s.lower() == score.lower():
return True
return False
def fromUnicode(self, rawScore):
"""See interfaces.IScoreSystem"""
if not rawScore:
return UNSCORED
for score in self.scoresDict.keys():
if score.lower() == rawScore.lower():
return score
raise ScoreValidationError(rawScore)
def isTardy(self, score):
if not score:
return False
return score.value in self.tag_tardy
def isAbsent(self, score):
if not score:
return False
return score.value in self.tag_absent
def isExcused(self, score):
if not score:
return False
return score.value in self.tag_excused
@Lazy
def scoresDict(self):
return dict(self.scores)
class PersistentAttendanceScoreSystem(AttendanceScoreSystem, Persistent):
implements(IPersistentAttendanceScoreSystem)
hidden = False
class GlobalAbsenceScoreSystem(AttendanceScoreSystem):
def __init__(self, name, *args, **kw):
super(GlobalAbsenceScoreSystem, self).__init__(*args, **kw)
self.__name__ = name
def __reduce__(self):
return self.__name__
class GlobalJournalRangedValuesScoreSystem(GlobalRangedValuesScoreSystem):
pass
# The score system used in the old journal
TenPointScoreSystem = GlobalJournalRangedValuesScoreSystem(
'TenPointScoreSystem',
_('10 Points'),
min=Decimal(1), max=Decimal(10))
# Attendance score system
AbsenceScoreSystem = GlobalAbsenceScoreSystem(
'AbsenceScoreSystem',
_('Absences'),
scores=(('a', _('Absent')),
('n', _('Absent')),
('t', _('Tardy')),
('p', _('Tardy')),
('ae', _('Absent (excused)')),
('te', _('Tardy (excused)')),
),
tag_absent=('a', 'n', 'ae'),
tag_tardy=('t', 'p', 'te'),
tag_excused=('ae', 'te'),
)
def getInstructorSections(person):
return list(IInstructor(person).sections())
def getCurrentSectionTaught(person):
ann = IAnnotations(removeSecurityProxy(person))
if CURRENT_SECTION_TAUGHT_KEY not in ann:
ann[CURRENT_SECTION_TAUGHT_KEY] = None
else:
section = ann[CURRENT_SECTION_TAUGHT_KEY]
if section not in getInstructorSections(person):
return None
try:
getSectionJournalData(section)
except:
ann[CURRENT_SECTION_TAUGHT_KEY] = None
return ann[CURRENT_SECTION_TAUGHT_KEY]
def setCurrentSectionTaught(person, section):
ann = IAnnotations(removeSecurityProxy(person))
if section in getInstructorSections(person):
ann[CURRENT_SECTION_TAUGHT_KEY] = removeSecurityProxy(section)
def getCurrentJournalMode(person):
ann = IAnnotations(removeSecurityProxy(person))
if CURRENT_JOURNAL_MODE_KEY not in ann:
ann[CURRENT_JOURNAL_MODE_KEY] = None
return ann.get(CURRENT_JOURNAL_MODE_KEY, None)
def setCurrentJournalMode(person, mode):
ann = IAnnotations(removeSecurityProxy(person))
ann[CURRENT_JOURNAL_MODE_KEY] = mode
class LyceumJournalContainer(BTreeContainer):
"""A container for all the journals in the system."""
@adapter(ISectionJournalData)
@implementer(ISection)
def getSectionForSectionJournalData(jd):
int_ids = getUtility(IIntIds)
return int_ids.getObject(int(jd.__name__))
@adapter(ISectionJournal)
@implementer(ISection)
def getSectionForSectionJournal(sj):
return sj.section
class EvaluateGeneric(object):
implements(IEvaluateRequirement)
def __init__(self, target):
self.context = target
def evaluate(self, person, requirement, grade, evaluator=None, score_system=None):
if score_system is None:
score_system = requirement.score_system
score = score_system.fromUnicode(grade)
evaluations = removeSecurityProxy(IEvaluations(person))
if requirement in evaluations:
current = evaluations[requirement]
if (current.value == score and
current.evaluator == evaluator):
return
else:
if score is UNSCORED:
return
eval = Evaluation(requirement, score_system, score, evaluator=evaluator)
evaluations.addEvaluation(eval)
def getEvaluation(self, person, requirement, default=None):
evaluations = removeSecurityProxy(IEvaluations(person))
score = evaluations.get(requirement)
if score is None:
return default
return score
class MeetingRequirement(tuple):
implements(IKeyReference)
key_type_id = 'schooltool.lyceum.journal.journal.MeetingRequirement'
requirement_type = None
score_system = None
def __new__(cls, meeting, score_system=None):
params = cls.getMeetingParams(meeting)
inst = tuple.__new__(cls, params)
if score_system is not None:
inst.score_system = score_system
return inst
@classmethod
def getMeetingParams(cls, meeting):
date = meeting.dtstart.date()
meeting_id = meeting.meeting_id
if meeting_id is None:
meeting_id = meeting.unique_id
try:
calendar = meeting.__parent__
target = calendar.__parent__
target_ref = IKeyReference(target)
except TypeError:
target_ref = None
return (cls.requirement_type, date, meeting_id, target_ref)
def __cmp__(self, other):
if self.key_type_id == other.key_type_id:
return cmp(tuple(self), tuple(other))
return cmp(self.key_type_id, other.key_type_id)
@property
def date(self):
return self[1]
@property
def meeting_id(self):
return self[2]
@property
def target(self):
"""Return the grading target (for example, section)"""
if self[3] is None:
return None
return self[3]()
def __call__(self):
return self
class SchoolMeetingRequirement(MeetingRequirement):
implements(IKeyReference)
key_type_id = 'schooltool.lyceum.journal.journal.SchoolMeetingRequirement'
@classmethod
def getMeetingParams(cls, meeting):
date = meeting.dtstart.date()
target_ref = IKeyReference(ISchoolToolApplication(None))
return (cls.requirement_type, date, None, target_ref)
class GradeRequirement(MeetingRequirement):
requirement_type = 'grade'
score_system = TenPointScoreSystem
class AttendanceRequirement(MeetingRequirement):
requirement_type = 'attendance'
score_system = AbsenceScoreSystem
class HomeroomRequirement(SchoolMeetingRequirement):
requirement_type = 'homeroom'
score_system = AbsenceScoreSystem
class SectionJournalData(Persistent):
"""A journal for a section."""
implements(ISectionJournalData, ILocation)
def __init__(self):
self.__parent__ = None
self.__name__ = None
@property
def section(self):
return ISection(self)
def getKeys(self, person, meeting):
key = (person.__name__, meeting.dtstart.date())
entry_id = meeting.meeting_id
if entry_id is None:
entry_id = meeting.unique_id
return (key, entry_id)
def evaluate(self, person, requirement, grade, evaluator=None, score_system=None):
if score_system is None:
score_system = requirement.score_system
score = score_system.fromUnicode(grade)
evaluations = removeSecurityProxy(IEvaluations(person))
if requirement in evaluations:
current = evaluations[requirement]
if (current.value == score and
current.evaluator == evaluator):
return
else:
if score is UNSCORED:
return
eval = Evaluation(requirement, score_system, score, evaluator=evaluator)
evaluations.addEvaluation(eval)
def getEvaluation(self, person, requirement, default=None):
evaluations = removeSecurityProxy(IEvaluations(person))
score = evaluations.get(requirement)
if score is None:
return default
return score
def setGrade(self, person, meeting, grade, evaluator=None):
requirement = GradeRequirement(removeSecurityProxy(meeting))
self.evaluate(person, requirement, grade, evaluator=evaluator)
def getGrade(self, person, meeting, default=None):
requirement = GradeRequirement(removeSecurityProxy(meeting))
score = self.getEvaluation(person, requirement, default=default)
if score is not default:
return score.value
return default
def setAbsence(self, person, meeting, explained=True, evaluator=None, value=ABSENT):
requirement = AttendanceRequirement(removeSecurityProxy(meeting))
# XXX: how to mark explained absences? With score comments OFC
# so we need score comments now.
self.evaluate(person, requirement, value, evaluator=evaluator)
def getAbsence(self, person, meeting, default=''):
requirement = AttendanceRequirement(removeSecurityProxy(meeting))
score = self.getEvaluation(person, requirement, default=default)
if score is default:
return default
return score.value
def isAbsent(self, person, meeting):
requirement = AttendanceRequirement(removeSecurityProxy(meeting))
score = self.getEvaluation(person, requirement, default=None)
if score is None:
return False
return score.scoreSystem.isAbsent(score)
def isTardy(self, person, meeting):
requirement = AttendanceRequirement(removeSecurityProxy(meeting))
score = self.getEvaluation(person, requirement, default=None)
if score is None:
return False
return score.scoreSystem.isTardy(score)
def descriptionKey(self, meeting):
date = meeting.dtstart.date()
entry_id = meeting.meeting_id
if entry_id is None:
entry_id = meeting.unique_id
return (date, entry_id)
def recordedMeetings(self, person):
result = []
unique_meetings = set()
calendar = ISchoolToolCalendar(self.section)
sorted_events = sorted(calendar, key=lambda e: e.dtstart)
evaluations = removeSecurityProxy(IEvaluations(person))
for event in sorted_events:
requirement = GradeRequirement(removeSecurityProxy(event))
if (requirement in evaluations and
event.meeting_id not in unique_meetings):
result.append(event)
unique_meetings.add(event.meeting_id)
return result
def gradedMeetings(self, person, requirement_factory=GradeRequirement):
result = []
unique_meetings = set()
calendar = ISchoolToolCalendar(self.section)
sorted_events = sorted(calendar, key=lambda e: e.dtstart)
evaluations = removeSecurityProxy(IEvaluations(person))
for event in sorted_events:
requirement = requirement_factory(removeSecurityProxy(event))
score = evaluations.get(requirement)
if (requirement in evaluations and
event.meeting_id not in unique_meetings):
result.append((event, score))
unique_meetings.add(event.meeting_id)
return result
def absentMeetings(self, person):
return self.gradedMeetings(
person, requirement_factory=AttendanceRequirement)
class SectionJournal(object):
"""Adapter that adapts a section to it's journal.
Journal of a section might include grades from related sections as
well.
"""
implements(ISectionJournal)
adapts(ISection)
def __init__(self, context):
self.__parent__ = context
self.section = context
self.__name__ = "journal"
def setGrade(self, person, meeting, grade, evaluator=None):
calendar = meeting.__parent__
owner = calendar.__parent__
section_journal_data = ISectionJournalData(owner)
section_journal_data.setGrade(person, meeting, grade,
evaluator=evaluator)
def getGrade(self, person, meeting, default=None):
calendar = meeting.__parent__
owner = calendar.__parent__
section_journal_data = ISectionJournalData(owner)
return section_journal_data.getGrade(person, meeting, default)
def setAbsence(self, person, meeting, explained=True, evaluator=None, value=ABSENT):
calendar = meeting.__parent__
owner = calendar.__parent__
section_journal_data = ISectionJournalData(owner)
section_journal_data.setAbsence(person, meeting, explained=explained,
evaluator=evaluator, value=value)
def getAbsence(self, person, meeting, default=''):
calendar = meeting.__parent__
owner = calendar.__parent__
section_journal_data = ISectionJournalData(owner)
return section_journal_data.getAbsence(person, meeting, default)
def isAbsent(self, person, meeting):
calendar = meeting.__parent__
owner = calendar.__parent__
section_journal_data = ISectionJournalData(owner)
return section_journal_data.isAbsent(person, meeting)
def isTardy(self, person, meeting):
calendar = meeting.__parent__
owner = calendar.__parent__
section_journal_data = ISectionJournalData(owner)
return section_journal_data.isTardy(person, meeting)
@Lazy
def members(self):
return [member for member in self.section.members
if IPerson.providedBy(member)]
@Lazy
def meetings(self):
"""Ordered list of all meetings for this section with
consecutive periods removed if the timetable is so configured."""
events = []
unique_meetings = set()
calendar = ISchoolToolCalendar(removeSecurityProxy(self.section))
sorted_events = sorted(calendar, key=lambda e: e.dtstart)
for event in sorted_events:
if event.meeting_id not in unique_meetings:
events.append(event)
unique_meetings.add(event.meeting_id)
return sorted(events)
def recordedMeetings(self, person):
"""Ordered list of all recorded meetings for this person.
For this section.
"""
sd = ISectionJournalData(removeSecurityProxy(self.section))
meetings = sd.recordedMeetings(person)
return sorted(meetings)
def gradedMeetings(self, person, requirement_factory=GradeRequirement):
meetings = []
sd = ISectionJournalData(removeSecurityProxy(self.section))
meetings = sd.gradedMeetings(person, requirement_factory)
return sorted(meetings)
def absentMeetings(self, person):
return self.gradedMeetings(person, requirement_factory=AttendanceRequirement)
def hasMeeting(self, person, meeting):
calendar = meeting.__parent__
owner = calendar.__parent__
return owner in ILearner(person).sections()
def findMeeting(self, meeting_id):
calendar = ISchoolToolCalendar(removeSecurityProxy(self.section))
meeting = calendar.find(meeting_id)
return meeting
def getSectionJournalData(section):
"""Get the journal for the section."""
app = ISchoolToolApplication(None)
jc = app['schooltool.lyceum.journal']
int_ids = getUtility(IIntIds)
section_id = str(int_ids.getId(section))
journal = jc.get(section_id, None)
if journal is None:
jc[section_id] = journal = SectionJournalData()
return journal
def getEventSectionJournal(event):
"""Get the section journal for a ScheduleCalendarEvent."""
calendar = event.__parent__
section = calendar.__parent__
return ISectionJournal(section)
class JournalInit(InitBase):
def __call__(self):
self.app['schooltool.lyceum.journal'] = LyceumJournalContainer()
class JournalAppStartup(StartUpBase):
def __call__(self):
if 'schooltool.lyceum.journal' not in self.app:
self.app['schooltool.lyceum.journal'] = LyceumJournalContainer()
class JournalEditorsCrowd(ConfigurableCrowd):
setting_key = 'administration_can_grade_journal'
def contains(self, principal):
"""Return the value of the related setting (True or False)."""
return (ClerksCrowd(self.context).contains(principal) and
super(JournalEditorsCrowd, self).contains(principal))
class JournalXLSReportTask(XLSReportTask):
@property
def context(self):
section = XLSReportTask.context.fget(self)
journal = ISectionJournal(section)
return journal
@context.setter
def context(self, value):
section = ISection(value)
XLSReportTask.context.fset(self, section)
@adapter(MeetingRequirement)
@implementer(IEvaluateRequirement)
def getEvaluateRequirementForMeetingRequirement(requirement):
return IEvaluateRequirement(requirement.target)
@adapter(ISection)
@implementer(IEvaluateRequirement)
def getEvaluateRequirementForSection(section):
return ISectionJournalData(section)
class ScoreSystemPreferences(Persistent):
implements(IJournalScoreSystemPreferences)
grading_scoresystem = None
attendance_scoresystem = None
@adapter(Interface)
@implementer(IJournalScoreSystemPreferences)
def getScoreSystemPreferences(jd):
app = ISchoolToolApplication(None)
ssp = app['schooltool.lyceum.journal-ss-prefs']
return ssp
class JournalScoreSystemsStartup(ScoreSystemAppStartup):
after = ('schooltool.requirement.scoresystem', )
def updateGradingSS(self, prefs):
ssc = IScoreSystemContainer(self.app)
if prefs.grading_scoresystem is not None:
ten = ssc.get('ten_points')
if isinstance(ten, CustomScoreSystem) and ten.scores[0][0] == u'1':
# Values need to be in descending order
ten.scores = list(reversed(ten.scores))
return
tenPointScoreSystem = CustomScoreSystem(
_('10 Points'),
scores=[(unicode(i), u'', Decimal(i), Decimal((i-1)*10))
for i in reversed(range(1, 11))],
bestScore='10',
minPassingScore='4')
chooser = INameChooser(ssc)
name = chooser.chooseName('ten_points', tenPointScoreSystem)
ssc[name] = tenPointScoreSystem
prefs.grading_scoresystem = tenPointScoreSystem
def updateAttendanceSS(self, prefs):
if prefs.attendance_scoresystem is not None:
return
ssc = IScoreSystemContainer(self.app)
attendanceScoreSystem = None
for ss in ssc.values():
if (IAttendanceScoreSystem.providedBy(ss) and
not ss.hidden):
attendanceScoreSystem = ss
break
if attendanceScoreSystem is None:
attendanceScoreSystem = PersistentAttendanceScoreSystem(_('Attendance'))
chooser = INameChooser(ssc)
name = chooser.chooseName(attendanceScoreSystem.title, attendanceScoreSystem)
ssc[name] = attendanceScoreSystem
prefs.attendance_scoresystem = attendanceScoreSystem
def updatePreferences(self, prefs):
self.updateGradingSS(prefs)
self.updateAttendanceSS(prefs)
def __call__(self):
super(JournalScoreSystemsStartup, self).__call__()
if 'schooltool.lyceum.journal-ss-prefs' not in self.app:
prefs = ScoreSystemPreferences()
self.app['schooltool.lyceum.journal-ss-prefs'] = prefs
else:
prefs = self.app['schooltool.lyceum.journal-ss-prefs']
self.updatePreferences(prefs)
@adapter(Interface)
@implementer(IAvailableScoreSystems)
def getJournalGradingScoreSystems(context):
app = ISchoolToolApplication(None)
ssc = IScoreSystemContainer(app)
result = [
ss for ss in ssc.values()
if (ICustomScoreSystem.providedBy(ss) and
not ss.hidden)]
return result
@adapter(Interface)
@implementer(IAvailableScoreSystems)
def getJournalAttendanceScoreSystems(context):
app = ISchoolToolApplication(None)
ssc = IScoreSystemContainer(app)
result = [
ss for ss in ssc.values()
if (IPersistentAttendanceScoreSystem.providedBy(ss) and
not ss.hidden)]
return result
class JournalGradingScoreSystemChoices(zope.schema.vocabulary.SimpleVocabulary):
implements(zope.schema.interfaces.IContextSourceBinder)
def __init__(self, context):
self.context = context
terms = self.createTerms()
zope.schema.vocabulary.SimpleVocabulary.__init__(self, terms)
def getScoreSystems(self):
scoresystems = list(queryMultiAdapter(
(self.context, ),
IAvailableScoreSystems,
name="grading",
default=[],
))
return scoresystems
def createTerms(self):
result = []
result.append(self.createTerm(
None,
z3c.form.widget.SequenceWidget.noValueToken,
_("Select a score system"),
))
scoresystems = self.getScoreSystems()
for scoresystem in scoresystems:
title = scoresystem.title
token = scoresystem.__name__
token=unicode(token).encode('punycode')
result.append(self.createTerm(scoresystem, token, title))
return result
class JournalAttendanceScoreSystemChoices(JournalGradingScoreSystemChoices):
def getScoreSystems(self):
scoresystems = list(queryMultiAdapter(
(self.context, ),
IAvailableScoreSystems,
name="attendance",
default=[],
))
return scoresystems
def journalgradingchoicesfactory():
return JournalGradingScoreSystemChoices
def journalattendancechoicesfactory():
return JournalAttendanceScoreSystemChoices
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/term.py 0000644 0001750 0001750 00000002206 12270520456 027255 0 ustar menesis menesis 0000000 0000000 #
# SchoolTool - common information systems platform for school administration
# Copyright (c) 2007 Shuttleworth Foundation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
"""
This module is obsolete. It is here for evolution script evolve1.py that
actually removes these objects.
"""
from persistent import Persistent
from zope.container.btree import BTreeContainer
class LyceumTermDataContainer(BTreeContainer):
"""Container for person term grading data."""
class TermGradingData(Persistent):
__parent__ = None
__name__ = None
__data__ = None
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/__init__.py 0000644 0001750 0001750 00000000335 12270520456 030046 0 ustar menesis menesis 0000000 0000000 #
from zope.i18nmessageid import MessageFactory
LyceumMessage = MessageFactory("schooltool.lyceum.journal")
import schooltool.common
schooltool.common.register_lauchpad_project(__package__, 'schooltool.lyceum.journal')
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/plugin.zcml 0000644 0001750 0001750 00000000265 12270520456 030124 0 ustar menesis menesis 0000000 0000000
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/security.zcml 0000644 0001750 0001750 00000002562 12270520456 030477 0 ustar menesis menesis 0000000 0000000
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/configure.zcml 0000644 0001750 0001750 00000012075 12270520456 030611 0 ustar menesis menesis 0000000 0000000
schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/locales/ 0000755 0001750 0001750 00000000000 12322066433 027354 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/locales/es_SV/ 0000755 0001750 0001750 00000000000 12322066433 030373 5 ustar menesis menesis 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/locales/es_SV/LC_MESSAGES/ 0000755 0001750 0001750 00000000000 12322066433 032160 5 ustar menesis menesis 0000000 0000000 ././@LongLink 0000000 0000000 0000000 00000000165 00000000000 011217 L ustar 0000000 0000000 schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/locales/es_SV/LC_MESSAGES/schooltool.lyceum.journal.mo schooltool.lyceum.journal-2.6.3/src/schooltool/lyceum/journal/locales/es_SV/LC_MESSAGES/schooltool.l0000644 0001750 0001750 00000007377 12322066432 034537 0 ustar menesis menesis 0000000 0000000 Þ• 6 Ì I | ¡ Â Ö ÷ '
&