Пример #1
0
    def record_digest(self, userid):
        digest = Digest.query.get_by_userid(userid)
        if not digest:
            digest = Digest(userid=userid, last_dispatch=utcnow_tz_aware())
            create_session().add(digest)

        digest.last_dispatch = utcnow_tz_aware()
Пример #2
0
    def record_digest(self, userid):
        digest = Digest.query.get_by_userid(userid)
        if not digest:
            digest = Digest(userid=userid, last_dispatch=utcnow_tz_aware())
            create_session().add(digest)

        digest.last_dispatch = utcnow_tz_aware()
Пример #3
0
    def test_is_valid(self):
        lock1 = Lock(object_type='Meeting',
                     object_id=1,
                     creator=TEST_USER_ID,
                     time=utcnow_tz_aware() - timedelta(seconds=300))
        self.session.add(lock1)

        lock2 = Lock(object_type='Meeting',
                     object_id=2,
                     creator=TEST_USER_ID,
                     time=utcnow_tz_aware() - timedelta(seconds=800))
        self.session.add(lock2)

        self.assertTrue(lock1.is_valid())
        self.assertFalse(lock2.is_valid())
Пример #4
0
    def test_valid_locks_query(self):
        valid = Lock(object_type='Meeting',
                     object_id=1,
                     creator=TEST_USER_ID,
                     time=utcnow_tz_aware() - timedelta(seconds=300))
        self.session.add(valid)

        invalid = Lock(object_type='Meeting',
                       object_id=2,
                       creator=TEST_USER_ID,
                       time=utcnow_tz_aware() - timedelta(seconds=800))
        self.session.add(invalid)

        query = Lock.query.valid_locks('Meeting', 1)
        self.assertEquals([valid], query.all())
Пример #5
0
    def test_valid_locks_query(self):
        valid = Lock(object_type='Meeting',
                     object_id=1,
                     creator=TEST_USER_ID,
                     time=utcnow_tz_aware() - timedelta(seconds=300))
        self.session.add(valid)

        invalid = Lock(object_type='Meeting',
                       object_id=2,
                       creator=TEST_USER_ID,
                       time=utcnow_tz_aware() - timedelta(seconds=800))
        self.session.add(invalid)

        query = Lock.query.valid_locks('Meeting', 1)
        self.assertEquals([valid], query.all())
    def test_meetings_display(self, browser):
        with self.login(self.committee_responsible):
            start = utcnow_tz_aware() + timedelta(days=5)

            meeting_dossier = create(
                Builder('meeting_dossier').within(
                    self.leaf_repofolder).titled(u'Sitzungsdossier f').having(
                        start=start.date(),
                        responsible=self.committee_responsible.getId()))
            meeting = create(
                Builder('meeting').having(
                    title=u'f. Sitzung der Rechnungspr\xfcfungskommission',
                    committee=self.committee.load_model(),
                    location=u'B\xfcren an der Aare',
                    start=start).link_with(meeting_dossier))

        self.login(self.meeting_user, browser)
        browser.open(self.committee_container,
                     view='tabbedview_view-committees')

        self.assertEquals([
            'Last Meeting: Sep 12, 2016', 'Next Meeting: {}'.format(
                meeting.get_date())
        ],
                          browser.css('#committees_view .meetings li').text)

        last_meeting = browser.css('#committees_view .meetings li a')[0]
        next_meeting = browser.css('#committees_view .meetings li a')[1]

        self.assertEquals(self.meeting.model.get_url(),
                          last_meeting.get('href'))
        self.assertEquals(meeting.get_url(), next_meeting.get('href'))
Пример #7
0
    def test_is_valid(self):
        lock1 = Lock(object_type='Meeting',
                     object_id=1,
                     creator=TEST_USER_ID,
                     time=utcnow_tz_aware() - timedelta(seconds=300))
        self.session.add(lock1)

        lock2 = Lock(object_type='Meeting',
                     object_id=2,
                     creator=TEST_USER_ID,
                     time=utcnow_tz_aware() - timedelta(seconds=800))
        self.session.add(lock2)


        self.assertTrue(lock1.is_valid())
        self.assertFalse(lock2.is_valid())
Пример #8
0
 def _past_meetings(self, committee):
     query = self._committee_meetings(committee)
     query = query.filter(
         Meeting.workflow_state != Meeting.STATE_CANCELLED.name)
     query = query.filter(Meeting.start < utcnow_tz_aware())
     query = query.order_by(Meeting.start.desc())
     return query
Пример #9
0
 def _past_meetings(self, committee):
     query = self._committee_meetings(committee)
     query = query.filter(
         Meeting.workflow_state != Meeting.STATE_CANCELLED.name)
     query = query.filter(Meeting.start < utcnow_tz_aware())
     query = query.order_by(Meeting.start.desc())
     return query
    def test_meetings_display(self, browser):
        with self.login(self.committee_responsible):
            start = utcnow_tz_aware() + timedelta(days=5)

            meeting_dossier = create(
                Builder('meeting_dossier')
                .within(self.leaf_repofolder)
                .titled(u'Sitzungsdossier f')
                .having(start=start.date(),
                        responsible=self.committee_responsible.getId()))
            meeting = create(
                Builder('meeting')
                .having(title=u'f. Sitzung der Rechnungspr\xfcfungskommission',
                        committee=self.committee.load_model(),
                        location=u'B\xfcren an der Aare',
                        start=start)
                .link_with(meeting_dossier))

        self.login(self.meeting_user, browser)
        browser.open(self.committee_container,
                     view='tabbedview_view-committees')

        self.assertEquals(
            ['Last Meeting: Sep 12, 2016',
             'Next Meeting: {}'.format(meeting.get_date())],
            browser.css('#committees_view .meetings li').text)

        last_meeting = browser.css('#committees_view .meetings li a')[0]
        next_meeting = browser.css('#committees_view .meetings li a')[1]

        self.assertEquals(self.meeting.model.get_url(),
                          last_meeting.get('href'))
        self.assertEquals(meeting.get_url(), next_meeting.get('href'))
Пример #11
0
    def test_lock_info_returns_an_list_of_dicts_of_all_valid_locks(self):
        # valid
        lock1 = create(Builder('lock')
                      .of_obj(self.wrapper)
                      .having(time=utcnow_tz_aware() - timedelta(seconds=100)))

        self.assertEquals(
            [{'creator': TEST_USER_ID,
              'time': lock1.time,
              'token': 'Meeting:1',
              'type': STEALABLE_LOCK}],
            ILockable(self.wrapper).lock_info())

        # invalid
        lock1.time = utcnow_tz_aware() - timedelta(seconds=800)
        self.assertEquals([], ILockable(self.wrapper).lock_info())
Пример #12
0
    def test_locked_is_false_if_lock_is_invalid(self):
        create(Builder('lock')
               .of_obj(self.wrapper)
               .having(time=utcnow_tz_aware() - timedelta(seconds=800)))

        lockable = ILockable(self.wrapper)
        self.assertFalse(lockable.locked())
Пример #13
0
 def update_invitation(self, iid, **updates):
     self._write_invitations[iid]['updated'] = utcnow_tz_aware()
     for key, value in updates.items():
         if key in ('recipient', 'inviter', 'role'):
             self._write_invitations[iid][key] = value
         elif key == 'target':
             self._write_invitations[iid]['target_uuid'] = IUUID(value)
         else:
             raise KeyError(key)
Пример #14
0
    def test_unique_constraint_on_type_id_and_locktype(self):
        lock1 = Lock(object_type='Meeting',
                     object_id=1,
                     creator=TEST_USER_ID,
                     lock_type=u'plone.locking.stealable',
                     time=utcnow_tz_aware() - timedelta(seconds=300))
        self.session.add(lock1)

        with self.assertRaises(IntegrityError):
            lock2 = Lock(object_type='Meeting',
                         object_id=1,
                         creator=TEST_USER_ID,
                         lock_type=u'plone.locking.stealable',
                         time=utcnow_tz_aware())
            self.session.add(lock2)
            transaction.commit()

        transaction.abort()
Пример #15
0
    def test_unique_constraint_on_type_id_and_locktype(self):
        lock1 = Lock(object_type='Meeting',
                     object_id=1,
                     creator=TEST_USER_ID,
                     lock_type=u'plone.locking.stealable',
                     time=utcnow_tz_aware() - timedelta(seconds=300))
        self.session.add(lock1)

        with self.assertRaises(IntegrityError):
            lock2 = Lock(object_type='Meeting',
                         object_id=1,
                         creator=TEST_USER_ID,
                         lock_type=u'plone.locking.stealable',
                         time=utcnow_tz_aware())
            self.session.add(lock2)
            transaction.commit()

        transaction.abort()
Пример #16
0
    def test_during_lock_creation_the_expired_locks_gets_cleared(self):
        lock_1 = create(Builder('lock')
                       .having(object_type='Meeting',
                               object_id=12345,
                               time=utcnow_tz_aware() - timedelta(seconds=1000)))

        lock_2 = create(Builder('lock')
                        .having(object_type='Meeting',
                                object_id=56789,
                                time=utcnow_tz_aware() - timedelta(seconds=800)))

        ILockable(self.wrapper).lock()

        locks = Lock.query.all()

        self.assertEquals(1, len(locks))
        self.assertNotIn(lock_1, locks)
        self.assertNotIn(lock_2, locks)
Пример #17
0
 def update_invitation(self, iid, **updates):
     self._write_invitations[iid]['updated'] = utcnow_tz_aware()
     for key, value in updates.items():
         if key in ('recipient', 'inviter', 'role'):
             self._write_invitations[iid][key] = value
         elif key == 'target':
             self._write_invitations[iid]['target_uuid'] = IUUID(value)
         else:
             raise KeyError(key)
Пример #18
0
    def test_lock_creation_removes_expired_locks_for_same_object(self):
        expired_lock = create(
            Builder('lock').of_obj(self.wrapper).having(
                time=utcnow_tz_aware() - timedelta(seconds=1000)))

        ILockable(self.wrapper).lock()

        locks = Lock.query.all()
        self.assertEquals(1, len(locks))
        self.assertNotIn(expired_lock, locks)
Пример #19
0
    def insert_default_modified(self):
        """Insert time of migration as last modified timestamp."""

        meeting_table = table(
            'meetings',
            column('id'),
            column('modified'),
        )

        self.execute(meeting_table.update().values(modified=utcnow_tz_aware()))
Пример #20
0
    def insert_default_modified(self):
        """Insert time of migration as last modified timestamp."""

        meeting_table = table(
            'meetings',
            column('id'),
            column('modified'),
        )

        self.execute(meeting_table.update().values(modified=utcnow_tz_aware()))
Пример #21
0
 def add_invitation(self, target, recipient, inviter, role):
     iid = self._generate_iid()
     self._write_invitations[iid] = PersistentMapping({
         'iid': iid,
         'target_uuid': IUUID(target),
         'recipient': recipient,
         'inviter': inviter,
         'role': role,
         'created': utcnow_tz_aware(),
         'updated': None})
     return iid
Пример #22
0
    def update_model(self, data):
        """Manually set the modified timestamp when updating meetings."""

        super(Meeting, self).update_model(data)
        self.modified = utcnow_tz_aware()

        meeting_dossier = self.get_dossier()
        title = data.get('title')
        if meeting_dossier and title:
            meeting_dossier.title = title
            meeting_dossier.reindexObject()
Пример #23
0
    def update_model(self, data):
        """Manually set the modified timestamp when updating meetings."""

        super(Meeting, self).update_model(data)
        self.modified = utcnow_tz_aware()

        meeting_dossier = self.get_dossier()
        title = data.get('title')
        if meeting_dossier and title:
            meeting_dossier.title = title
            meeting_dossier.reindexObject()
Пример #24
0
    def test_lock_creation_removes_expired_locks_for_same_object(self):
        expired_lock = create(
            Builder('lock')
            .of_obj(self.wrapper)
            .having(time=utcnow_tz_aware() - timedelta(seconds=1000)))

        ILockable(self.wrapper).lock()

        locks = Lock.query.all()
        self.assertEquals(1, len(locks))
        self.assertNotIn(expired_lock, locks)
Пример #25
0
    def __init__(self, context, timestamp=None, uuid=None):
        timestamp = timestamp or utcnow_tz_aware()
        if uuid is None:
            uuid = uuid4()
        elif isinstance(uuid, basestring):
            uuid = UUID(uuid)

        self.context = context
        self.timestamp = timestamp
        self.data = PersistentMapping(created=timestamp,
                                      userid=unicode(
                                          api.user.get_current().getId()),
                                      history_type=self.history_type,
                                      uuid=uuid)
Пример #26
0
    def create_job(self):
        self._cleanup_old_jobs()
        self._prepare_committee_annotations()

        job_id = str(uuid.uuid4())

        zip_job_data = PersistentMapping()
        zip_job_data['job_id'] = job_id
        zip_job_data['timestamp'] = utcnow_tz_aware()
        zip_job_data['documents'] = OOBTree()

        self._zip_jobs[job_id] = zip_job_data

        return ZipJob(zip_job_data)
Пример #27
0
    def create_job(self):
        self._cleanup_old_jobs()
        self._prepare_committee_annotations()

        job_id = str(uuid.uuid4())

        zip_job_data = PersistentMapping()
        zip_job_data['job_id'] = job_id
        zip_job_data['timestamp'] = utcnow_tz_aware()
        zip_job_data['documents'] = OOBTree()

        self._zip_jobs[job_id] = zip_job_data

        return ZipJob(zip_job_data)
Пример #28
0
    def __init__(self, context, timestamp=None, uuid=None):
        timestamp = timestamp or utcnow_tz_aware()
        if uuid is None:
            uuid = uuid4()
        elif isinstance(uuid, basestring):
            uuid = UUID(uuid)

        self.context = context
        self.timestamp = timestamp
        self.data = PersistentMapping(
            created=timestamp,
            userid=unicode(api.user.get_current().getId()),
            history_type=self.history_type,
            uuid=uuid)
Пример #29
0
    def is_interval_expired(self, userid):
        """Returns true it the time since the last dispatch expires the defined
        interval for the given user.

        The calculation has been made with a tolerance of 1 hour.
        """

        digest = Digest.query.get_by_userid(userid)
        if not digest:
            # no digests sent yet, so digest schould be send
            return True

        interval = timedelta(hours=DIGEST_INTERVAL_HOURS - DIGEST_TOLERANCE)
        expired = utcnow_tz_aware() - interval

        return digest.last_dispatch <= expired
Пример #30
0
    def is_interval_expired(self, userid):
        """Returns true it the time since the last dispatch expires the defined
        interval for the given user.

        The calculation has been made with a tolerance of 1 hour.
        """

        digest = Digest.query.get_by_userid(userid)
        if not digest:
            # no digests sent yet, so digest schould be send
            return True

        interval = timedelta(hours=DIGEST_INTERVAL_HOURS - DIGEST_TOLERANCE)
        expired = utcnow_tz_aware() - interval

        return digest.last_dispatch <= expired
Пример #31
0
    def _cleanup_old_jobs(self):
        """Remove expired zip jobs.

        The zip jobs are only kept for a relatively short amount of time as
        they are a temporary thing.
        """
        to_remove = set()
        now = utcnow_tz_aware()
        expiration_delta = timedelta(days=ZIP_EXPIRATION_DAYS)

        for zip_job_data in self._zip_jobs.values():
            delta = now - zip_job_data['timestamp']
            if delta > expiration_delta:
                to_remove.add(zip_job_data['job_id'])

        for job_id in to_remove:
            self.remove_job(job_id)
Пример #32
0
    def _cleanup_old_jobs(self):
        """Remove expired zip jobs.

        The zip jobs are only kept for a relatively short amount of time as
        they are a temporary thing.
        """
        to_remove = set()
        now = utcnow_tz_aware()
        expiration_delta = timedelta(days=ZIP_EXPIRATION_DAYS)

        for zip_job_data in self._zip_jobs.values():
            delta = now - zip_job_data['timestamp']
            if delta > expiration_delta:
                to_remove.add(zip_job_data['job_id'])

        for job_id in to_remove:
            self.remove_job(job_id)
Пример #33
0
 def add_invitation(self, target, recipient, inviter, role):
     iid = self._generate_iid()
     self._write_invitations[iid] = PersistentMapping({
         'iid':
         iid,
         'target_uuid':
         IUUID(target),
         'recipient':
         recipient,
         'inviter':
         inviter,
         'role':
         role,
         'created':
         utcnow_tz_aware(),
         'updated':
         None
     })
     return iid
    def test_edit_meeting_reports_write_conflicts(self, tab1):
        self.login(self.committee_responsible, tab1)
        with tab1.clone() as tab2:
            with freeze(utcnow_tz_aware()) as clock:
                tab1.open(self.meeting, view='edit-meeting')
                tab2.open(self.meeting, view='edit-meeting')

                tab1.fill({'Title': u'Title by tab 1'}).save()
                statusmessages.assert_message('Changes saved', browser=tab1)
                self.assertEquals(u'Title by tab 1', plone.first_heading(browser=tab1))
                create_session().flush()
                clock.forward(minutes=1)

                tab2.fill({'Title': u'Title by tab 2'}).save()
                statusmessages.assert_message(
                    'Your changes were not saved,'
                    ' the protocol has been modified in the meantime.', browser=tab2)
                tab2.open(self.meeting)
                self.assertEquals(u'Title by tab 1', plone.first_heading(browser=tab2))
Пример #35
0
 def _past_meetings(self, committee):
     query = self._committee_meetings(committee)
     query = query.filter(Meeting.start < utcnow_tz_aware())
     query = query.order_by(desc(Meeting.start))
     return query
Пример #36
0
def update_changed_date(context, event):
    IChanged(context).changed = utcnow_tz_aware()
    context.reindexObject(idxs=["changed"])
Пример #37
0
 def _upcoming_meetings(self, committee):
     query = self._committee_meetings(committee)
     query = query.filter(Meeting.start >= utcnow_tz_aware())
     query = query.order_by(Meeting.start)
     return query
Пример #38
0
 def _past_meetings(self, committee):
     query = self._committee_meetings(committee)
     query = query.filter(Meeting.start < utcnow_tz_aware())
     query = query.order_by(desc(Meeting.start))
     return query
    def test_update_invitation(self):
        self.login(self.workspace_admin)
        storage = getUtility(IInvitationStorage)
        creation_date = datetime(2017, 1, 1, 1, 1, tzinfo=pytz.UTC)
        with freeze(creation_date) as clock:
            iid = self.add_invitation()

            self.assertDictEqual(
                {'iid': iid,
                 'target_uuid': IUUID(self.workspace),
                 'recipient': 'hans.peter',
                 'inviter': 'gunther.frohlich',
                 'role': 'WorkspaceGuest',
                 'created': creation_date,
                 'updated': None},
                storage.get_invitation(iid))

            clock.forward(hours=1)
            storage.update_invitation(iid, role='WorkspaceMember')
            self.assertDictEqual(
                {'iid': iid,
                 'target_uuid': IUUID(self.workspace),
                 'recipient': 'hans.peter',
                 'inviter': 'gunther.frohlich',
                 'role': 'WorkspaceMember',
                 'created': creation_date,
                 'updated': utcnow_tz_aware()},
                storage.get_invitation(iid))

            clock.forward(hours=1)
            storage.update_invitation(iid, recipient='fritz', inviter='hans')
            self.assertDictEqual(
                {'iid': iid,
                 'target_uuid': IUUID(self.workspace),
                 'recipient': 'fritz',
                 'inviter': 'hans',
                 'role': 'WorkspaceMember',
                 'created': creation_date,
                 'updated': utcnow_tz_aware()},
                storage.get_invitation(iid))

            clock.forward(hours=1)
            storage.update_invitation(iid, target=self.workspace_folder)
            self.assertDictEqual(
                {'iid': iid,
                 'target_uuid': IUUID(self.workspace_folder),
                 'recipient': 'fritz',
                 'inviter': 'hans',
                 'role': 'WorkspaceMember',
                 'created': creation_date,
                 'updated': utcnow_tz_aware()},
                storage.get_invitation(iid))

            with self.assertRaises(KeyError):
                storage.update_invitation(iid, target_uuid='new')

            with self.assertRaises(KeyError):
                storage.update_invitation(iid, created='new')

            with self.assertRaises(KeyError):
                storage.update_invitation(iid, updated='new')
    def test_update_invitation(self):
        self.login(self.workspace_admin)
        storage = getUtility(IInvitationStorage)
        creation_date = datetime(2017, 1, 1, 1, 1, tzinfo=pytz.UTC)
        with freeze(creation_date) as clock:
            iid = self.add_invitation()

            self.assertDictEqual(
                {
                    'iid': iid,
                    'target_uuid': IUUID(self.workspace),
                    'recipient': 'hans.peter',
                    'inviter': 'gunther.frohlich',
                    'role': 'WorkspaceGuest',
                    'created': creation_date,
                    'updated': None
                }, storage.get_invitation(iid))

            clock.forward(hours=1)
            storage.update_invitation(iid, role='WorkspaceMember')
            self.assertDictEqual(
                {
                    'iid': iid,
                    'target_uuid': IUUID(self.workspace),
                    'recipient': 'hans.peter',
                    'inviter': 'gunther.frohlich',
                    'role': 'WorkspaceMember',
                    'created': creation_date,
                    'updated': utcnow_tz_aware()
                }, storage.get_invitation(iid))

            clock.forward(hours=1)
            storage.update_invitation(iid, recipient='fritz', inviter='hans')
            self.assertDictEqual(
                {
                    'iid': iid,
                    'target_uuid': IUUID(self.workspace),
                    'recipient': 'fritz',
                    'inviter': 'hans',
                    'role': 'WorkspaceMember',
                    'created': creation_date,
                    'updated': utcnow_tz_aware()
                }, storage.get_invitation(iid))

            clock.forward(hours=1)
            storage.update_invitation(iid, target=self.workspace_folder)
            self.assertDictEqual(
                {
                    'iid': iid,
                    'target_uuid': IUUID(self.workspace_folder),
                    'recipient': 'fritz',
                    'inviter': 'hans',
                    'role': 'WorkspaceMember',
                    'created': creation_date,
                    'updated': utcnow_tz_aware()
                }, storage.get_invitation(iid))

            with self.assertRaises(KeyError):
                storage.update_invitation(iid, target_uuid='new')

            with self.assertRaises(KeyError):
                storage.update_invitation(iid, created='new')

            with self.assertRaises(KeyError):
                storage.update_invitation(iid, updated='new')
Пример #41
0
 def _upcoming_meetings(self, committee):
     query = self._committee_meetings(committee)
     query = query.filter(Meeting.start >= utcnow_tz_aware())
     query = query.order_by(Meeting.start)
     return query
from plone.dexterity.utils import createContentInContainer
from plone.dexterity.utils import iterSchemataForType
from plone.namedfile.file import NamedBlobFile
from z3c.form.browser.checkbox import CheckBoxWidget
from z3c.form.browser.checkbox import SingleCheckBoxWidget
from z3c.form.interfaces import IDataConverter
from z3c.form.interfaces import IGroupForm
from zope.schema import getFieldsInOrder
from zope.schema import List
import json
import textwrap

# changed is timezone aware, so we need a timezone aware FROZEN_NOW, but dates
# in GEVER are timezone naive, so to avoid this test failing when timezone
# offset leads to a date shift, we define a timezone naive FROZEN_TODAY.
FROZEN_NOW = utcnow_tz_aware()
with freeze(FROZEN_NOW):
    FROZEN_TODAY = date.today()

DEFAULT_TITLE = u'My title'
DEFAULT_CLIENT = u'fa'

REPOROOT_REQUIREDS = {
    'title_de': DEFAULT_TITLE,
}
REPOROOT_DEFAULTS = {}
REPOROOT_FORM_DEFAULTS = {}
REPOROOT_MISSING_VALUES = {
    'title_fr': None,
    'valid_from': None,
    'valid_until': None,
Пример #43
0
def lowest_valid():
    return utcnow_tz_aware() - timedelta(seconds=DEFAULTTIMEOUT)
Пример #44
0
    def refresh_lock(self, lock_type=STEALABLE_LOCK):
        if not self.locked():
            return

        lock = self._get_lock(lock_type)
        lock.time = utcnow_tz_aware()
Пример #45
0
 def update_model(self, data):
     """Manually set the modified timestamp when updating meetings."""
     super(Meeting, self).update_model(data)
     self.modified = utcnow_tz_aware()
Пример #46
0
    def refresh_lock(self, lock_type=STEALABLE_LOCK):
        if not self.locked():
            return

        lock = self._get_lock(lock_type)
        lock.time = utcnow_tz_aware()
Пример #47
0
 def test_locked_is_true_if_a_valid_lock_exists(self):
     create(Builder('lock')
            .of_obj(self.wrapper)
            .having(time=utcnow_tz_aware() - timedelta(seconds=100)))
     lockable = ILockable(self.wrapper)
     self.assertTrue(lockable.locked())
Пример #48
0
def update_changed_date(context, event):
    IChanged(context).changed = utcnow_tz_aware()
    context.reindexObject(idxs=["changed"])
Пример #49
0
def lowest_valid():
    return utcnow_tz_aware() - timedelta(seconds=DEFAULTTIMEOUT)
from plone.dexterity.utils import iterSchemataForType
from plone.namedfile.file import NamedBlobFile
from z3c.form.browser.checkbox import CheckBoxWidget
from z3c.form.browser.checkbox import SingleCheckBoxWidget
from z3c.form.interfaces import IDataConverter
from z3c.form.interfaces import IGroupForm
from zope.schema import getFieldsInOrder
from zope.schema import List
import json
import textwrap


# changed is timezone aware, so we need a timezone aware FROZEN_NOW, but dates
# in GEVER are timezone naive, so to avoid this test failing when timezone
# offset leads to a date shift, we define a timezone naive FROZEN_TODAY.
FROZEN_NOW = utcnow_tz_aware()
with freeze(FROZEN_NOW):
    FROZEN_TODAY = date.today()

DEFAULT_TITLE = u'My title'
DEFAULT_CLIENT = u'fa'

REPOROOT_REQUIREDS = {
    'title_de': DEFAULT_TITLE,
}
REPOROOT_DEFAULTS = {}
REPOROOT_FORM_DEFAULTS = {}
REPOROOT_MISSING_VALUES = {
    'title_fr': None,
    'valid_from': None,
    'valid_until': None,