def default_formatter(self, req, results, storable): """ The default way to format the output of this field. """ query = {'__init__[item_id]':storable.get_id(), '__init__[item_table]':storable.get_table(), } new_media_link = tags.a(href=req.get_path(req.prepath, 'detail/media/new?' + urllib.urlencode(query)))['Add Media'] if(len(results) == 0): return tags.span()[new_media_link] def format_type(item): filesize = media.formatbytes(item.get('filesize', 0)) return '%s %s %s (%s)' % (filesize, item['format'], item['type'], item['quality']) def format_status(item): full_path = os.path.join(req.app.upload_path, item['filename']) status = [] try: finfo = os.stat(full_path) if(finfo.st_size != item['filesize']): status.append("wrong filesize") if(req.postpath[-1] == 'check-md5'): filehash = media.get_checksum(full_path, md5_path=req.app.md5_path) if(filehash != item['md5']): status.append("incorrect hash") except OSError, e: status.append(e.strerror) if(status): return tags.span(_class='error')[str(tags.br()).join(status)] else: return tags.span(_class='message')['OK']
def get_element(self, req, style, storable): """ @see: L{modu.editable.define.definition.get_element()} """ value = getattr(storable, self.get_column_name(), None) if(isinstance(value, (int, long, float))): value = datetime.datetime.utcfromtimestamp(value) if(style == 'search'): frm = form.FormNode(self.name) frm['from'] = self.get_form_element(req, '_detail', storable)( prefix='<div>from date:', suffix=tags.br() + '</div>', ) frm['to'] = self.get_form_element(req, '_detail', storable)( prefix='<div>to date:', suffix='</div>', ) return frm elif(style == 'listing' or (style == 'detail' and self.get('read_only', False))): if(value): output = date.strftime(value, self.get('format_string', '%B %d, %Y at %I:%M%p')) else: output = '' frm = form.FormNode(self.name) frm(type='label', value=output) return frm current_year = datetime.datetime.now().year if(value is not None): current_year = getattr(value, 'year', current_year) start_year = self.get('start_year', current_year - 2) end_year = self.get('end_year', current_year + 5) months, days = date.get_date_arrays() frm = form.FormNode(self.name) frm(type='fieldset', style='brief') frm['null'](type='checkbox', text="no value", weight=-1, suffix=tags.br(), attributes=dict(onChange='enableDateField(this);')) assets.activate_jquery(req) req.content.report('header', tags.script(type='text/javascript')[""" function enableDateField(checkboxField){ var formItem = $(checkboxField).parent().parent(); if($(checkboxField).attr('checked')){ formItem.children(':enabled').attr('disabled', true); } else{ formItem.children(':disabled').attr('disabled', false); } } """]) attribs = {} if(value is None): frm['null'](checked=True) #attribs['disabled'] = None if(self.get('default_now', False)): value = datetime.datetime.now() frm['null'](checked=False) frm['date']( type = self.get('style', 'datetime'), value = value, attributes = attribs, suffix = tags.script(type="text/javascript")[""" enableDateField($('#form-item-%s input')); """ % self.name], ) frm.validate = self.validate return frm
def test_date_field(self): """ Test for L{modu.editable.datatypes.date.DateField} """ from modu.editable.datatypes import date as date_datatype test_itemdef = define.itemdef( start_date = date_datatype.DateField( label = 'start date:', save_format = 'datetime', attributes = dict(basic_element=False), ) ) req = self.get_request([('test-form[start_date][date][month]',8), ('test-form[start_date][date][day]',25), ('test-form[start_date][date][year]',2007), ('test-form[start_date][date][hour]',23), ('test-form[start_date][date][minute]',40) ]) test_storable = storable.Storable('test') # +---------------------------+ # | from_unixtime(1190864400) | # +---------------------------+ # | 2007-09-26 23:40:00 | # +---------------------------+ test_storable.start_date = datetime.datetime.fromtimestamp(1190864400) self.failUnlessEqual(test_storable.start_date.year, 2007, 'Test year was calculated incorrectly as %s' % test_storable.start_date.year) months, days = date.get_date_arrays() hours, minutes = date.get_time_arrays() itemdef_form = test_itemdef.get_form(req, test_storable) reference_form = form.FormNode('test-form') reference_form['start_date'](type='fieldset', style='brief', label='start date:') reference_form['start_date']['null'](type='checkbox', text="no value", weight=-1, suffix=tags.br(), attributes=dict(onChange='enableDateField(this);')) reference_form['start_date']['date'](type='fieldset') reference_form['start_date']['date']['month'](type='select', weight=0, options=months, value=8) reference_form['start_date']['date']['day'](type='select', weight=1, options=days, value=25) reference_form['start_date']['date']['year'](type='textfield', weight=2, size=5, value=2007) reference_form['start_date']['date']['hour'](type='select', weight=3, options=hours, value=23) reference_form['start_date']['date']['minute'](type='select', weight=4, options=minutes, value=40) reference_form['start_date']( suffix = tags.script(type="text/javascript")[""" enableDateField($('#form-item-start_date input')); """], ) reference_form['save'](type='submit', value='save', weight=1000) reference_form['cancel'](type='submit', value='cancel', weight=1001) reference_form['delete'](type='submit', value='delete', weight=1002, attributes=dict(onClick="return confirm('Are you sure you want to delete this record?');")) itemdef_form_html = str(itemdef_form.render(req)) reference_form_html = str(reference_form.render(req)) for i in range(len(itemdef_form_html)): if(reference_form_html[i] != itemdef_form_html[i]): self.fail('Expecting %s (%s) but found %s (%s) at position %d' % ( reference_form_html[i], reference_form_html[i-20:i+20], itemdef_form_html[i], itemdef_form_html[i-20:i+20], i )) self.failUnlessEqual(itemdef_form_html, reference_form_html, "Didn't get expected form output, got:\n%s\n instead of:\n%s" % (itemdef_form_html, reference_form_html) ) test_storable.start_date = datetime.datetime.now() # this just loads the data, since there was # no submit button in the test post data itemdef_form.execute(req) test_itemdef['start_date'].update_storable(req, itemdef_form, test_storable) self.failUnlessEqual(test_storable.start_date, datetime.datetime.fromtimestamp(1190864400), 'Date was calculated incorrectly as %s' % test_storable.start_date)