def handle(self, **options): start_time = time.time() num_sent = 0 sleep_time = 0 all_events = Event.objects \ .filter(sended_notify=False) \ .exclude(Q(author__isnull=True) | Q(author__username="******") | Q(field__name='review_id')) \ .distinct() \ .select_related("issue", "author") \ .prefetch_related("file_set") \ .order_by("issue") domain = Site.objects.get_current().domain from_email = settings.DEFAULT_FROM_EMAIL for issue in Issue.objects\ .filter(event__in=all_events) \ .distinct() \ .select_related("student", "responsible", "task", "task__course") \ .prefetch_related("followers"): events = all_events.filter(issue=issue) if not events: continue notify_messages = [] excluded_ids = [] if issue.student.email: message = get_message(issue.student, _noop(u'studentom'), issue, events, from_email, domain) if message: notify_messages.append(message) excluded_ids.append(issue.student.id) if issue.responsible and issue.responsible.id not in excluded_ids: excluded_ids.append(issue.student.id) if issue.responsible.email: message = get_message(issue.responsible, _noop(u'proverjaushim'), issue, events, from_email, domain) if message: notify_messages.append(message) for follower in issue.followers.exclude(id__in=excluded_ids): if follower.email: message = get_message(follower, _noop(u'nabludatelem'), issue, events, from_email, domain) if message: notify_messages.append(message) if notify_messages: num_sent += send_mass_mail_html(notify_messages) time.sleep(1) sleep_time += 1 for event in events: event.sended_notify = True event.save() # logging to cron log print "Command send_issue_notifications send {0} email(s) and took {1} seconds (sleep {2} seconds)" \ .format(num_sent, time.time() - start_time, sleep_time)
def handle(self, **options): start_time = time.time() num_sent = 0 sleep_time = 0 all_events = Event.objects \ .filter(sended_notify=False) \ .exclude(Q(author__isnull=True) | Q(author__username="******") | Q(field__name='review_id')) \ .distinct() \ .select_related("issue", "author") \ .prefetch_related("file_set") \ .order_by("issue") domain = Site.objects.get_current().domain from_email = settings.DEFAULT_FROM_EMAIL for issue in Issue.objects\ .filter(event__in=all_events) \ .distinct() \ .select_related("student", "responsible", "task", "task__course") \ .prefetch_related("followers"): events = all_events.filter(issue=issue) if not events: continue notify_messages = [] excluded_ids = [] if issue.student.email: message = get_message(issue.student, _noop(u'studentom'), issue, events, from_email, domain) if message: notify_messages.append(message) excluded_ids.append(issue.student.id) if issue.responsible and issue.responsible.id not in excluded_ids: excluded_ids.append(issue.student.id) if issue.responsible.email: message = get_message( issue.responsible, _noop(u'proverjaushim'), issue, events, from_email, domain ) if message: notify_messages.append(message) for follower in issue.followers.exclude(id__in=excluded_ids): if follower.email: message = get_message(follower, _noop(u'nabludatelem'), issue, events, from_email, domain) if message: notify_messages.append(message) if notify_messages: num_sent += send_mass_mail_html(notify_messages) time.sleep(1) sleep_time += 1 for event in events: event.sended_notify = True event.save() # logging to cron log print "Command send_issue_notifications send {0} email(s) and took {1} seconds (sleep {2} seconds)" \ .format(num_sent, time.time() - start_time, sleep_time)
class Contact(models.Model): type = models.ForeignKey(ContactType, verbose_name=_('Contact Type')) url = models.URLField(_noop('URL')) text = models.CharField(_('Text'), max_length=200) sede = models.ForeignKey(Sede, verbose_name=_noop('Sede'), related_name='contacts') def __unicode__(self): return u"%s - %s" % (self.type.name, self.text)
class Event(models.Model): name = models.CharField(_('Event Name'), max_length=200) date = models.DateField(_('Date'), help_text=_('When will your event be?')) limit_proposal_date = models.DateField( _('Limit Proposals Date'), help_text=_('Limit date to submit talk proposals')) slug = models.CharField(_('URL'), max_length=200, unique=True, help_text=_('For example: flisol-caba'), validators=[validate_url]) external_url = models.URLField( _('External URL'), blank=True, null=True, default=None, help_text=_('http://www.my-awesome-event.com')) email = models.EmailField(verbose_name=_('Email')) event_information = RichTextField(verbose_name=_('Event Information'), help_text=_('Event Information HTML'), blank=True, null=True) schedule_confirm = models.BooleanField(_('Confirm Schedule'), default=False) place = models.TextField(_('Place')) # TODO: JsonFIELD home_image = models.ForeignKey(Image, related_name="eventol_home_image", verbose_name=_noop('Home Image'), blank=True, null=True) cover_image = models.ForeignKey(Image, related_name="eventol_cover_image", verbose_name=_noop('Cover Image'), blank=True, null=True) def get_absolute_url(self): if self.external_url: return self.external_url return "/event/" + self.slug + '/' @property def talk_proposal_is_open(self): return self.limit_proposal_date >= datetime.date.today() @property def registration_is_open(self): return self.date >= datetime.date.today() def __unicode__(self): return u"%s" % (self.name) class Meta(object): ordering = ['name']
class Contact(models.Model): type = models.ForeignKey(ContactType, verbose_name=_('Contact Type')) url = models.CharField(_noop('Direccion'), help_text=_('i.e. https://twitter.com/flisol'), max_length=200) text = models.CharField(_('Text'), max_length=200, help_text=_('i.e. @Flisol')) event = models.ForeignKey(Event, verbose_name=_noop('Event'), related_name='contacts', blank=True, null=False) def __str__(self): return '{} - {} - {}'.format(self.event, self.type, self.text) class Meta(object): verbose_name = _('Contact') verbose_name_plural = _('Contacts')
class AccountSettings(CurrentPageSettings, LoginRequiredMixin, SuccessMessageMixin, FormView): template_name = 'um/settings_account.html' current_settings = _noop('Account') form_class = forms.DeleteUserForm success_url = reverse_lazy('reader:home') success_message = _( 'The account will be permanently deleted in %d hours, sign in again ' 'to reactivate it' ) % int(UM_DELETE_ACCOUNT_AFTER.total_seconds() / 3600) def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs.update({ 'current_username': self.request.user.username }) return kwargs def form_valid(self, form): self.request.user.um_profile.deletion_pending = True self.request.user.um_profile.save() tasks.tasks.schedule_at( 'um:delete_user', now() + UM_DELETE_ACCOUNT_AFTER, self.request.user.id ) logout(self.request) return super().form_valid(form)
class Comment(models.Model): created = models.DateTimeField(auto_now_add=True) body = models.TextField() activity = models.ForeignKey(Activity, verbose_name=_noop('Activity')) user = models.ForeignKey(User, verbose_name=_('User')) def __unicode__(self): return u"%s: %s" % (self.user, self.activity) @classmethod def filter_by(cls, queryset, field, value): if field == 'event': return queryset.filter(activity__event__pk=value) return queryset def save(self, *args, **kwargs): """Email when a comment is added.""" # TODO: Email when a comment is added. if "notify" in kwargs: del kwargs["notify"] super(Comment, self).save(*args, **kwargs) class Meta(object): verbose_name = _('Comment') verbose_name_plural = _('Comments')
class EventDate(models.Model): event = models.ForeignKey(Event, verbose_name=_noop('Event'), blank=True, null=True) date = models.DateField(_('Date'), help_text=_('When will your event be?')) def __str__(self): return '{} - {}'.format(self.event, self.date)
class EventUser(models.Model): user = models.ForeignKey(User, verbose_name=_('User'), blank=True, null=True) nonregisteredattendee = models.ForeignKey( NonRegisteredAttendee, verbose_name=_('Non Registered Attendee'), blank=True, null=True) event = models.ForeignKey(Event, verbose_name=_noop('Event')) assisted = models.BooleanField(_('Assisted'), default=False) ticket = models.BooleanField(_('Ticket sent'), default=False) def __unicode__(self): if self.user: return u'%s %s' % (self.user.first_name, self.user.last_name) if self.nonregisteredattendee: return u'%s %s' % (self.nonregisteredattendee.first_name, self.nonregisteredattendee.last_name) class Meta(object): unique_together = (("event", "user"), ) verbose_name = _('Event User') verbose_name_plural = _('Event Users')
class EventInfo(models.Model): sede = models.ForeignKey(Sede, verbose_name=_noop('Sede')) html = models.TextField() class Meta: verbose_name = _('Event Info') verbose_name_plural = _('Envent Info (s)')
class EventDate(models.Model): event = models.ForeignKey(Event, verbose_name=_noop('Event'), blank=True, null=True) date = models.DateField(_('Date'), help_text=_('When will your event be?')) def __unicode__(self): return u"%s - %s" % (self.event.name, self.date)
class InterfaceSettings(CurrentPageSettings, LoginRequiredMixin, UpdateView): model = models.UMProfile fields = ['language', 'items_per_page'] template_name = 'um/settings_interface.html' success_url = reverse_lazy('um:settings-interface') current_settings = _noop('Interface') def get_object(self, *args, **kwargs): return self.request.user.um_profile
def __str__(self): return _noop( 'Message received from: {name}\n' 'User email: {email}\n\n' '{message}' ).format( name=self.name, email=self.email, message=self.message )
class JudgeVerdict(Enum): invalid_submission = _noop("Invalid Submission") compilation_failed = _noop("Compilation Failed") runtime_error = _noop("Runtime error") time_limit_exceeded = _noop("Time limit exceeded") memory_limit_exceeded = _noop("Memory limit exceeded") judge_failed = _noop("Judge failed") ok = _noop("OK")
class AttendeeAttendanceDate(models.Model): attendee = models.ForeignKey(Attendee, verbose_name=_noop('Attendee'), blank=False, null=False) date = models.DateTimeField(_('Date'), help_text=_('The date of the attendance'), auto_now_add=True) def __unicode__(self): return u"%s - %s" % (unicode(self.attendee), self.date)
class EventUserAttendanceDate(models.Model): event_user = models.ForeignKey(EventUser, verbose_name=_noop('Event User'), blank=False, null=False) date = models.DateTimeField(_('Date'), help_text=_('The date of the attendance'), auto_now_add=True) def __unicode__(self): return u"%s - %s" % (unicode(self.event_user), self.date)
class InstallationMessage(models.Model): event = models.ForeignKey(Event, verbose_name=_noop('Event')) message = RichTextField(verbose_name=_('Message Body'), help_text=_( 'Email message HTML Body'), blank=True, null=True) contact_email = models.EmailField(verbose_name=_('Contact Email')) class Meta(object): verbose_name = _('Post-install Email') verbose_name_plural = _('Post-install Emails') def __str__(self): return str(self.event)
class ContactMessage(models.Model): name = models.CharField(max_length=255, verbose_name=_('Name')) email = models.EmailField(verbose_name=_('Email')) message = models.TextField(verbose_name=_('Message')) event = models.ForeignKey(Event, verbose_name=_noop('Event'), blank=True, null=True) class Meta(object): verbose_name = _('Contact Message') verbose_name_plural = _('Contact Messages')
class Contact(models.Model): type = models.ForeignKey(ContactType, verbose_name=_('Contact Type')) url = models.CharField(_noop('Direccion'), help_text=_('i.e. https://twitter.com/flisol'), max_length=200) text = models.CharField(_('Text'), max_length=200, help_text=_('i.e. @Flisol')) # null should be false, but I put true due to a django bug with formsets: # https://code.djangoproject.com/ticket/13776 event = models.ForeignKey(Event, verbose_name=_noop('Event'), related_name='contacts', blank=True, null=True) def __unicode__(self): return u"%s - %s - %s" % (self.event.name, self.type.name, self.text) class Meta(object): verbose_name = _('Contact') verbose_name_plural = _('Contacts')
class Attendee(models.Model): objects = AttendeeManager() created_at = models.DateTimeField(_('Created At'), auto_now_add=True) updated_at = models.DateTimeField(_('Updated At'), auto_now=True) first_name = models.CharField(_('First Name'), max_length=200, blank=True, null=True) last_name = models.CharField(_('Last Name'), max_length=200, blank=True, null=True) nickname = models.CharField(_('Nickname'), max_length=200, blank=True, null=True) email = models.EmailField(_('Email')) event = models.ForeignKey(Event, verbose_name=_('Event')) ticket = models.ForeignKey(Ticket, verbose_name=_('Ticket'), blank=True, null=True) is_installing = models.BooleanField(_('Is going to install?'), default=False) additional_info = models.CharField(_('Additional Info'), max_length=200, blank=True, null=True, help_text=_('Any additional info you consider \ relevant for the organizers')) email_confirmed = models.BooleanField(_('Email confirmed?'), default=False) email_token = models.CharField(_('Confirmation Token'), max_length=200, blank=True, null=True) registration_date = models.DateTimeField(_('Registration Date'), blank=True, null=True) event_user = models.ForeignKey( EventUser, verbose_name=_noop('Event User'), blank=True, null=True) class Meta(object): verbose_name = _('Attendee') verbose_name_plural = _('Attendees') unique_together = (('event', 'email'),) def __str__(self): if self.event_user: return str(self.event_user) return '{} - {} {} - {} - {}'.format(self.event, self.first_name, self.last_name, self.nickname, self.email) def get_ticket_data(self): if self.ticket is None: ticket = Ticket() ticket.save() self.ticket = ticket self.save() date = self.event.eventdate_set.order_by('date').first().date return {'first_name': self.first_name, 'last_name': self.last_name, 'nickname': self.nickname, 'email': self.email, 'event': self.event, 'event_date': date, 'ticket': self.ticket} def attended(self): return AttendeeAttendanceDate.objects.filter(attendee=self).exists() def attended_today(self): return AttendeeAttendanceDate.objects.filter( attendee=self, date__date=timezone.localdate()).exists()
class Room(models.Model): event = models.ForeignKey(Event, verbose_name=_noop('Event'), blank=True, null=True) name = models.CharField(_('Name'), max_length=200, help_text=_('i.e. Classroom 256')) def __str__(self): return '{} - {}'.format(self.event, self.name) def get_schedule_info(self): return {'id': self.pk, 'title': self.name} class Meta(object): verbose_name = _('Room') verbose_name_plural = _('Rooms') ordering = ['name']
class Room(models.Model): event = models.ForeignKey(Event, verbose_name=_noop('Event'), blank=True, null=True) name = models.CharField(_('Name'), max_length=200, help_text=_('i.e. Classroom 256')) def __unicode__(self): return u"%s - %s" % (self.event.name, self.name) class Meta(object): verbose_name = _('Room') verbose_name_plural = _('Rooms') ordering = ['name']
class Room(models.Model): sede = models.ForeignKey(Sede, verbose_name=_noop('Sede')) name = models.CharField(_('Name'), max_length=200, help_text=_('i.e. Classroom 256')) for_type = models.ForeignKey( TalkType, verbose_name=_('For talk type'), help_text=_('The type of talk the room is going to be used for.')) def __unicode__(self): return u"%s - %s" % (self.sede.name, self.name) class Meta: verbose_name = _('Room') verbose_name_plural = _('Rooms')
class Collaborator(models.Model): user = models.OneToOneField(User, verbose_name=_('User'), blank=True, null=True) sede = models.ForeignKey(Sede, verbose_name=_noop('Sede'), help_text=_('Sede you are going to collaborate')) phone = models.CharField(_('Phone'), max_length=200, blank=True, null=True) address = models.CharField(_('Address'), max_length=200, blank=True, null=True) assisted = models.BooleanField(_('Assisted'), default=False) is_coordinator = models.BooleanField( _('Is Coordinator'), default=False, help_text=_('The user is the coordinator of the sede?')) assignation = models.CharField( _('Assignation'), max_length=200, blank=True, null=True, help_text=_('Assignations given to the user (i.e. Talks, Coffee...)')) additional_info = models.CharField( _('Additional Info'), max_length=200, blank=True, null=True, help_text=_('Any additional info you consider relevant')) time_availability = models.CharField( _('Time Availability'), max_length=200, blank=True, null=True, help_text= _('Time gap in which you can help during the event. i.e. "All the event", "Morning", "Afternoon"...' )) def __unicode__(self): return str(self.user) class Meta: verbose_name = _('Collaborator') verbose_name_plural = _('Collaborators')
class ContactMessage(models.Model): name = models.CharField(max_length=255, verbose_name=_('Name')) email = models.EmailField(verbose_name=_('Email')) message = models.TextField(verbose_name=_('Message')) event = models.ForeignKey(Event, verbose_name=_noop('Event'), blank=True, null=True) def __str__(self): return _noop('Message received from: {name}\n' 'User email: {email}\n\n' '{message}').format(name=self.name, email=self.email, message=self.message) class Meta: verbose_name = _('Contact Message') verbose_name_plural = _('Contact Messages')
class AttendeeAttendanceDate(models.Model): created_at = models.DateTimeField(_('Created At'), auto_now_add=True) updated_at = models.DateTimeField(_('Updated At'), auto_now=True) attendee = models.ForeignKey(Attendee, verbose_name=_noop('Attendee'), blank=False, null=False) date = models.DateTimeField(_('Date'), help_text=_('The date of the attendance'), auto_now_add=True) attendance_mode_choices = ( ('1', _('Qr autoregistration')), ('2', _('Qr ticket')), ('3', _('Previous registration')), ('4', _('unregistred')) ) mode = models.CharField(_('Mode'), choices=attendance_mode_choices, max_length=200, blank=True, null=True, help_text=_('Attendance mode')) def __str__(self): return '{} - {}'.format(self.attendee, self.date)
class Attendee(models.Model): name = models.CharField(_('First Name'), max_length=200, blank=True, null=True) surname = models.CharField(_('Last Name'), max_length=200, blank=True, null=True) nickname = models.CharField(_('Nickname'), max_length=200, blank=True, null=True) email = models.EmailField(_('Email'), max_length=200) sede = models.ForeignKey(Sede, verbose_name=_noop('Sede'), help_text=_('Sede you are going to attend')) assisted = models.BooleanField(_('Assisted'), default=False) is_going_to_install = models.BooleanField( _('Is going to install?'), default=False, help_text=_('Are you going to bring a PC for installing it?')) additional_info = models.TextField( _('Additional Info'), blank=True, null=True, help_text=_('i.e. Wath kind of PC are you bringing')) def __unicode__(self): return self.email class Meta: verbose_name = _('Attendee') verbose_name_plural = _('Attendees') unique_together = ( 'email', 'sede', )
def __str__(self): return _noop('%(code)s %(name)s') % { 'code': self.code, 'name': self.name }
class Event(models.Model): objects = EventManager() created_at = models.DateTimeField(_('Created At'), auto_now_add=True) updated_at = models.DateTimeField(_('Updated At'), auto_now=True) name = models.CharField(_('Event Name'), max_length=50) abstract = models.TextField(_('Abstract'), max_length=250, help_text=_('Idea of the event \ (one or two sentences)')) limit_proposal_date = models.DateField( _('Limit Proposals Date'), help_text=_('Limit date to submit talk proposals')) registration_closed = models.BooleanField( default=False, help_text=_("set it to True to force the registration to be closed")) tags = models.ManyToManyField( EventTag, blank=True, help_text=_("Select tags to show this event in the EventTag landing")) event_slug = models.SlugField(_('URL'), max_length=100, help_text=_('For example: flisol-caba'), unique=True) customForm = models.ForeignKey(CustomForm, verbose_name=_noop('Custom form'), blank=True, null=True) cname = models.CharField(_('CNAME'), max_length=50, blank=True, null=True, help_text=_('For example: flisol-caba'), validators=[validate_url]) registration_code = models.UUIDField( default=uuid4, editable=False, unique=True, verbose_name=_('code'), help_text=_('Code validator for in-place event self-registration'), ) external_url = models.URLField( _('External URL'), blank=True, null=True, default=None, help_text=_('http://www.my-awesome-event.com')) email = models.EmailField(verbose_name=_('Email')) event_information = RichTextField(verbose_name=_('Event Info'), help_text=_('Event Info HTML'), blank=True, null=True) schedule_confirmed = models.BooleanField(_('Schedule Confirmed'), default=False) use_installations = models.BooleanField(_('Use Installations'), default=True) use_installers = models.BooleanField(_('Use Installers'), default=True) use_collaborators = models.BooleanField(_('Use Collaborators'), default=True) use_proposals = models.BooleanField(_('Use Proposals'), default=True) use_talks = models.BooleanField(_('Use Talks'), default=True) is_flisol = models.BooleanField(_('Is FLISoL'), default=False) use_schedule = models.BooleanField(_('Use Schedule'), default=True) place = models.TextField(_('Place')) image = ImageCropField(upload_to='images_thumbnails', verbose_name=_('Image'), blank=True, null=True) cropping = ImageRatioField( 'image', '700x450', size_warning=True, verbose_name=_('Cropping'), free_crop=True, help_text=_('The image must be 700x450 px. You can crop it here.')) activities_proposal_form_text = models.TextField( blank=True, null=True, help_text=_("A message to show in the activities proposal form")) template = models.FileField( _('Template'), upload_to='templates', blank=True, null=True, help_text=_('Custom template HTML for event index page')) css_custom = models.FileField( _('Custom css'), upload_to='custom_css', blank=True, null=True, help_text=_('Custom CSS file for event page')) @classmethod def get_fields_dependencies(cls): return { 'use_proposals': ['limit_proposal_date', 'activities_proposal_form_text'], 'use_talks': ['use_proposals'], 'use_installations': ['use_installers'] } @property def location(self): try: place = json.loads(self.place) components = place['address_components'] components = filter( lambda componet: 'political' in componet['types'], components) components = map(lambda componet: componet['long_name'], components) return components except json.JSONDecodeError as error: logger.error(error) return [] @property def report(self): event_user = EventUser.objects.get_counts_by_event(self) collaborator = Collaborator.objects.get_counts_by_event(self) organizer = Organizer.objects.get_counts_by_event(self) attendee = Attendee.objects.get_counts_by_event(self) installer = Installer.objects.get_counts_by_event(self) activity = Activity.objects.get_counts_by_event(self) installation = Installation.objects.get_counts_by_event(self) speakers = [] for talk in Activity.objects.filter(event=self, status='2'): speakers.append(talk.speakers_names.split(',')) speakers_count = len(set(itertools.chain.from_iterable(speakers))) return { 'event_user': event_user, 'collaborator': collaborator, 'organizer': organizer, 'attendee': attendee, 'installer': installer, 'activity': activity, 'installation': installation, 'speakers': speakers_count } def get_absolute_url(self): if self.external_url: return self.external_url return reverse('event', kwargs={'event_slug': self.event_slug}) def __str__(self): return self.name class Meta: ordering = ['name'] verbose_name = _('Event') verbose_name_plural = _('Events') def save(self, *args, **kwargs): """ Override default save it will add the slug field using slugify. """ if not self.event_slug: self.event_slug = get_unique_slug(self, 'name', 'slug') super().save(*args, **kwargs)
units = [_('bytes'), _('KB'), _('MB')] i = 0 while size >= 1024: size /= 1024 i += 1 return u'{} {}'.format(size, units[i]) def get_valid_file_types(): """ Return comma separated string of valid file types. """ return ', '.join([', '.join(IMAGE_TYPES[ft].extensions) for ft in IMAGE_TYPES.keys()]) FILE_UPLOAD_TOO_LARGE = _noop(u'The file must be smaller than {image_max_size} in size.'.format(image_max_size=user_friendly_size(settings.PROFILE_IMAGE_MAX_BYTES))) # pylint: disable=line-too-long FILE_UPLOAD_TOO_SMALL = _noop(u'The file must be at least {image_min_size} in size.'.format(image_min_size=user_friendly_size(settings.PROFILE_IMAGE_MIN_BYTES))) # pylint: disable=line-too-long FILE_UPLOAD_BAD_TYPE = _noop(u'The file must be one of the following types: {valid_file_types}.'.format(valid_file_types=get_valid_file_types())) # pylint: disable=line-too-long FILE_UPLOAD_BAD_EXT = _noop(u'The file name extension for this file does not match the file data. The file may be corrupted.') # pylint: disable=line-too-long FILE_UPLOAD_BAD_MIMETYPE = _noop(u'The Content-Type header for this file does not match the file data. The file may be corrupted.') # pylint: disable=line-too-long class ImageValidationError(Exception): """ Exception to use when the system rejects a user-supplied source image. """ @property def user_message(self): """ Translate the developer-facing exception message for API clients. """
CAT_INP=3 ########################################################################## # Как будем искать дубликаты # CMP_NONE=0 CMP_NORMAL=1 CMP_STRONG=2 CMP_CLEAR=3 CMP_TITLE_FTYPE_FSIZE=2 CMP_TITLE_AUTHORS=1 ########################################################################## # разные константы # unknown_genre_en =_noop('Unknown genre') unknown_genre=_(unknown_genre_en) ########################################################################## # объект который мы будем использовать для перекодироки 4х байтного UTF в 3х байтный # пока только для аннотации, т.к. там уже "словлена" ошибка при записи в 3х байтный utf8 MYSQL # utfhigh = re.compile(u'[\U00010000-\U0010ffff]') def pg_optimize(verbose=False): """ TODO: Table optimizations for Postgre """ if connection.vendor != 'postgresql': if verbose: print('No PostgreSql connection backend detected...') else: print('Start PostgreSql tables optimization...')
CAT_INP = 3 ########################################################################## # Как будем искать дубликаты # CMP_NONE = 0 CMP_NORMAL = 1 CMP_STRONG = 2 CMP_CLEAR = 3 CMP_TITLE_FTYPE_FSIZE = 2 CMP_TITLE_AUTHORS = 1 ########################################################################## # разные константы # unknown_genre_en = _noop('Unknown genre') unknown_genre = _(unknown_genre_en) ########################################################################## # объект который мы будем использовать для перекодироки 4х байтного UTF в 3х байтный # пока только для аннотации, т.к. там уже "словлена" ошибка при записи в 3х байтный utf8 MYSQL # utfhigh = re.compile(u'[\U00010000-\U0010ffff]') def pg_optimize(verbose=False): """ TODO: Table optimizations for Postgre """ if connection.vendor != 'postgresql': if verbose: print('No PostgreSql connection backend detected...') else:
def __str__(self): return _noop('%(persons_company)s::%(name)s') % { 'persons_company': self.persons_company, 'name': self.name }
class TalkProposal(models.Model): level_choices = ( ('1', _('Beginner')), ('2', _('Medium')), ('3', _('Advanced')), ) activity = models.ForeignKey(Activity, verbose_name=_noop('Activity'), blank=True, null=True) type = models.ForeignKey(TalkType, verbose_name=_('Type')) image = models.ForeignKey(Image, verbose_name=_noop('Image'), blank=True, null=True) confirmed_talk = models.BooleanField(_('Talk Confirmed'), default=False) speakers_names = models.CharField( _('Speakers Names'), max_length=600, help_text=_("Comma separated speaker's names")) speakers_email = models.CharField( _('Speakers Emails'), max_length=600, help_text=_("Comma separated speaker's emails")) labels = models.CharField( _('Labels'), max_length=200, help_text=_('Comma separated tags. i.e. Linux, Free Software, Debian')) presentation = models.FileField( _('Presentation'), upload_to='talks', blank=True, null=True, help_text= _('Any material you are going to use for the talk (optional, but recommended)' )) level = models.CharField(_('Level'), choices=level_choices, max_length=100, help_text=_("Talk's Technical level")) def get_schedule_info(self): return { 'room': self.activity.room.name, 'start_date': self.activity.start_date.strftime('%m/%d/%Y %H:%M'), 'end_date': self.activity.end_date.strftime('%m/%d/%Y %H:%M'), 'title': self.activity.title, 'speakers': self.speakers_names, 'type': self.type.name } def get_absolute_url(self): if self.confirmed_talk: return "/event/" + self.activity.event.slug + '/talk/detail/talk/' + str( self.id) return "/event/" + self.activity.event.slug + '/talk/detail/proposal/' + str( self.id) def __unicode__(self): return u"%s: %s" % (self.activity.event, self.activity.title) class Meta(object): verbose_name = _('Talk Proposal') verbose_name_plural = _('Talk Proposals')
class Activity(models.Model): event = models.ForeignKey(Event, verbose_name=_noop('Event')) title = models.CharField(_('Title'), max_length=50, blank=True, null=True) long_description = models.TextField(_('Long Description')) confirmed = models.BooleanField(_('Confirmed'), default=False) abstract = models.TextField( _('Abstract'), help_text=_('Short idea of the talk (Two or three sentences)')) room = models.ForeignKey(Room, verbose_name=_('Room'), blank=True, null=True) start_date = models.DateTimeField(_('Start Time'), blank=True, null=True) end_date = models.DateTimeField(_('End Time'), blank=True, null=True) @classmethod def check_status(cls, message, error=None, request=None): if error: raise ValidationError(message) if request: messages.error(request, message) @classmethod def room_available(cls, request=None, instance=None, event_slug=None, error=False): activities_room = Activity.objects.filter( room=instance.room, event__slug__iexact=event_slug) if instance.start_date == instance.end_date: message = _( "The talk couldn't be registered because the schedule not available (start time equals end time)" ) cls.check_status(message, error=error, request=request) return False if instance.end_date < instance.start_date: message = _( "The talk couldn't be registered because the schedule is not available (start time is after end time)" ) cls.check_status(message, error=error, request=request) return False one_second = datetime.timedelta(seconds=1) if activities_room.filter( end_date__range=(instance.start_date + one_second, instance.end_date - one_second)).exclude(pk=instance.pk).exists() \ or activities_room.filter(end_date__gt=instance.end_date, start_date__lt=instance.start_date).exclude(pk=instance.pk).exists() \ or activities_room.filter(start_date__range=(instance.start_date + one_second, instance.end_date - one_second)).exclude(pk=instance.pk).exists() \ or activities_room.filter( end_date=instance.end_date, start_date=instance.start_date).exclude(pk=instance.pk).exists(): message = _( "The talk couldn't be registered because the room or the schedule is not available" ) cls.check_status(message, error=error, request=request) return False return True def __cmp__(self, other): return -1 if self.start_date.time() < other.start_date.time() else 1 def get_absolute_url(self): return "/event/" + self.event.slug + '/activity/detail/activity/' + str( self.id) def schedule(self): if self.start_date and self.end_date: return u"%s - %s" % (self.start_date.strftime("%H:%M"), self.end_date.strftime("%H:%M")) return _('Schedule not confirmed yet') @classmethod def filter_by(cls, queryset, field, value): if field == 'event': return queryset.filter(event__pk=value) return queryset def __unicode__(self): return u"%s - %s (%s - %s)" % ( self.event, self.title, self.start_date.strftime("%H:%M") if self.start_date else None, self.end_date.strftime("%H:%M") if self.end_date else None) class Meta(object): ordering = ['title'] verbose_name = _('Activity') verbose_name_plural = _('Activities')