def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project( name='Reply Project', short_description='This project is to test replies', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page(author=self.user, project=self.project, title='task title', sub_header='Tagline', content='Content', index=2) self.page.save()
def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project(name='My Cool Project', short_description='This project is awesome', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() for i in xrange(3): page = Page(author=self.user, project=self.project, title='Old Title %s' % i, sub_header='Old Tagline %s' % i, content='Old Content %s' % i, index=2*(i+1)) page.save()
def create(request, category=None): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectForm(category, request.POST) image_form = None if form.is_valid(): project = form.save() if category: project.category = category image_form = project_forms.ProjectImageForm(request.POST, request.FILES, instance=project) if image_form.is_valid(): image_form.save() project.set_duration(form.cleaned_data['duration'] or 0) #CS - too much logic in view act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {'project': project}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) if project.category != Project.STUDY_GROUP: detailed_description.collaborative = False detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Signup(author_id=user.id, project_id=project.id) sign_up.save() project.create() messages.success(request, _('The %s has been created.') % project.kind.lower()) return http.HttpResponseRedirect(reverse('projects_create_tasks', kwargs={'slug': project.slug,})) else: msg = _("Problem creating the course") messages.error(request, msg) else: form = project_forms.ProjectForm(category, initial={'test':True}) image_form = project_forms.ProjectImageForm() context = { 'form': form, 'image_form': image_form, 'category': category, 'is_challenge': (category == Project.CHALLENGE), } return render_to_response('projects/project_create_overview.html', context, context_instance=RequestContext(request))
def clone(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.CloneProjectForm(request.POST) if form.is_valid(): base_project = form.cleaned_data['project'] project = Project(name=base_project.name, kind=base_project.kind, short_description=base_project.short_description, long_description=base_project.long_description, clone_of=base_project) project.save() act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description = Page(title=_('Full Description'), slug='full-description', content=base_project.detailed_description.content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Page(title=_('Sign-Up'), slug='sign-up', content=base_project.sign_up.content, listed=False, editable=False, author_id=user.id, project_id=project.id) sign_up.save() project.sign_up_id = sign_up.id project.save() tasks = Page.objects.filter(project=base_project, listed=True, deleted=False).order_by('index') for task in tasks: new_task = Page(title=task.title, content=task.content, author=user, project=project) new_task.save() links = Link.objects.filter(project=base_project).order_by('index') for link in links: new_link = Link(name=link.name, url=link.url, user=user, project=project) new_link.save() project.create() messages.success(request, _('The %s has been cloned.') % project.kind.lower()) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem cloning the study group, course, ...")) else: form = project_forms.CloneProjectForm() return render_to_response('projects/project_clone.html', { 'form': form, 'clone_tab': True, }, context_instance=RequestContext(request))
def create(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectForm(request.POST) if form.is_valid(): project = form.save() act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create( source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) if project.category != Project.STUDY_GROUP: detailed_description.collaborative = False detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Signup(author_id=user.id, project_id=project.id) sign_up.save() project.create() messages.success( request, _('The %s has been created.') % project.kind.lower()) return http.HttpResponseRedirect( reverse('projects_show', kwargs={ 'slug': project.slug, })) else: msg = _("Problem creating the study group, course, ...") messages.error(request, msg) else: form = project_forms.ProjectForm() return render_to_response('projects/project_edit_summary.html', { 'form': form, 'new_tab': True, }, context_instance=RequestContext(request))
def import_from_old_site(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ImportProjectForm(request.POST) if form.is_valid(): course = form.cleaned_data['course'] #CS - too much logic in view project = Project(name=course['name'], kind=course['kind'], short_description=course['short_description'], long_description=course['long_description'], imported_from=course['slug']) project.save() act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() if course['detailed_description']: detailed_description_content = course['detailed_description'] else: detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {'project': project}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Signup(between_participants=course['sign_up'], author_id=user.id, project_id=project.id) sign_up.save() project.save() for title, content in course['tasks']: new_task = Page(title=title, content=content, author=user, project=project) new_task.save() for name, url in course['links']: new_link = Link(name=name, url=url, user=user, project=project) new_link.save() project.create() messages.success(request, _('The %s has been imported.') % project.kind.lower()) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: msg = _("Problem importing the study group, course, ...") messages.error(request, msg) else: form = project_forms.ImportProjectForm() return render_to_response('projects/project_import.html', { 'form': form, 'import_tab': True}, context_instance=RequestContext(request))
def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project(name='Reply Project', short_description='This project is to test replies', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page(author=self.user, project=self.project, title='task title', sub_header='Tagline', content='Content', index=2) self.page.save() self.comment = PageComment() self.comment.page_object = self.page self.comment.scope_object = self.project self.comment.author = self.user self.comment.content = "blah blah" self.comment.save()
def create(request): user = request.user.get_profile() school = None if request.method == 'POST': form = project_forms.CreateProjectForm(request.POST) if form.is_valid(): project = form.save() act = Activity(actor=user, verb='http://activitystrea.ms/schema/1.0/post', project=project, target_project=project) act.save() participation = Participation(project= project, user=user, organizing=True) participation.save() new_rel = Relationship(source=user, target_project=project) try: new_rel.save() except IntegrityError: pass detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up_content = render_to_string("projects/sign_up_initial_content.html", {}) sign_up = Page(title=_('Sign-Up'), slug='sign-up', content=sign_up_content, listed=False, editable=False, author_id=user.id, project_id=project.id) sign_up.save() project.sign_up_id = sign_up.id project.save() messages.success(request, _('The study group has been created.')) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem creating the study group.")) else: if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) form = project_forms.CreateProjectForm(initial={'school': school}) except School.DoesNotExist: return http.HttpResponseRedirect(reverse('projects_create')) else: form = project_forms.CreateProjectForm() return render_to_response('projects/project_edit_summary.html', { 'form': form, 'new_tab': True, 'school': school, }, context_instance=RequestContext(request))
def create(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectForm(request.POST) if form.is_valid(): project = form.save() act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {'project': project}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) if project.category != Project.STUDY_GROUP: detailed_description.collaborative = False detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Signup(author_id=user.id, project_id=project.id) sign_up.save() project.create() messages.success(request, _('The %s has been created.') % project.kind.lower()) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: msg = _("Problem creating the study group, course, ...") messages.error(request, msg) else: form = project_forms.ProjectForm() return render_to_response('projects/project_edit_summary.html', { 'form': form, 'new_tab': True, }, context_instance=RequestContext(request))
def create(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectForm(request.POST) if form.is_valid(): project = form.save(commit=False) project.created_by = user project.save() detail_description_content = render_to_string( "projects/detailed_description_initial_content.html", {}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detail_description_content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up_content = render_to_string( "projects/sign_up_initial_content.html", {}) sign_up = Page(title=_('Sign-Up'), slug='sign-up', content=sign_up_content, listed=False, editable=False, author_id=user.id, project_id=project.id) sign_up.save() project.sign_up_id = sign_up.id project.save() messages.success(request, _('The study group has been created.')) return http.HttpResponseRedirect( reverse('projects_show', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem creating the study group.")) else: if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) form = project_forms.ProjectForm(initial={'school': school}) except School.DoesNotExist: return http.HttpResponseRedirect(reverse('projects_create')) else: form = project_forms.ProjectForm() return render_to_response('projects/project_edit_summary.html', { 'form': form, }, context_instance=RequestContext(request))
def clone(request): user = request.user.get_profile() if request.method == "POST": form = project_forms.CloneProjectForm(request.POST) if form.is_valid(): base_project = form.cleaned_data["project"] project = Project( name=base_project.name, category=base_project.category, other=base_project.other, other_description=base_project.other_description, short_description=base_project.short_description, long_description=base_project.long_description, clone_of=base_project, ) project.save() act = Activity(actor=user, verb=verbs["post"], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description = Page( title=_("Full Description"), slug="full-description", content=base_project.detailed_description.content, listed=False, author_id=user.id, project_id=project.id, ) detailed_description.save() project.detailed_description_id = detailed_description.id base_sign_up = base_project.sign_up.get() sign_up = Signup( public=base_sign_up.public, between_participants=base_sign_up.between_participants, author_id=user.id, project_id=project.id, ) sign_up.save() project.save() tasks = Page.objects.filter(project=base_project, listed=True, deleted=False).order_by("index") for task in tasks: new_task = Page(title=task.title, content=task.content, author=user, project=project) new_task.save() links = Link.objects.filter(project=base_project).order_by("index") for link in links: new_link = Link(name=link.name, url=link.url, user=user, project=project) new_link.save() project.create() messages.success(request, _("The %s has been cloned.") % project.kind.lower()) return http.HttpResponseRedirect(reverse("projects_show", kwargs={"slug": project.slug})) else: messages.error(request, _("There was a problem cloning the study group, course, ...")) else: form = project_forms.CloneProjectForm() return render_to_response( "projects/project_clone.html", {"form": form, "clone_tab": True}, context_instance=RequestContext(request) )
def import_from_old_site(request): user = request.user.get_profile() if request.method == "POST": form = project_forms.ImportProjectForm(request.POST) if form.is_valid(): course = form.cleaned_data["course"] project = Project( name=course["name"], kind=course["kind"], short_description=course["short_description"], long_description=course["long_description"], imported_from=course["slug"], ) project.save() act = Activity(actor=user, verb=verbs["post"], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() if course["detailed_description"]: detailed_description_content = course["detailed_description"] else: detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {} ) detailed_description = Page( title=_("Full Description"), slug="full-description", content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id, ) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Signup(between_participants=course["sign_up"], author_id=user.id, project_id=project.id) sign_up.save() project.save() for title, content in course["tasks"]: new_task = Page(title=title, content=content, author=user, project=project) new_task.save() for name, url in course["links"]: new_link = Link(name=name, url=url, user=user, project=project) new_link.save() project.create() messages.success(request, _("The %s has been imported.") % project.kind.lower()) return http.HttpResponseRedirect(reverse("projects_show", kwargs={"slug": project.slug})) else: msg = _("Problem importing the study group, course, ...") messages.error(request, msg) else: form = project_forms.ImportProjectForm() return render_to_response( "projects/project_import.html", {"form": form, "import_tab": True}, context_instance=RequestContext(request) )
def setUp(self): self.client = Client() self.locale = "en" django_user = User(username=self.test_username, email=self.test_email) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project( name="Reply Project", short_description="This project is to test replies", long_description="No really, its good", ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page( author=self.user, project=self.project, title="task title", sub_header="Tagline", content="Content", index=2 ) self.page.save()
def create(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectForm(request.POST) if form.is_valid(): project = form.save(commit=False) project.created_by = user project.save() detail_description_content = render_to_string( "projects/detailed_description_initial_content.html", {}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detail_description_content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up_content = render_to_string("projects/sign_up_initial_content.html", {}) sign_up = Page(title=_('Sign-Up'), slug='sign-up', content=sign_up_content, listed=False, editable=False, author_id=user.id, project_id=project.id) sign_up.save() project.sign_up_id = sign_up.id project.save() messages.success(request, _('The study group has been created.')) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem creating the study group.")) else: if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) form = project_forms.ProjectForm(initial={'school': school}) except School.DoesNotExist: return http.HttpResponseRedirect(reverse('projects_create')) else: form = project_forms.ProjectForm() return render_to_response('projects/project_edit_summary.html', { 'form': form, }, context_instance=RequestContext(request))
class NotificationsTests(TestCase): test_username = '******' test_email = '*****@*****.**' test_password = '******' def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project(name='Reply Project', short_description='This project is to test replies', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page(author=self.user, project=self.project, title='task title', sub_header='Tagline', content='Content', index=2) self.page.save() self.comment = PageComment() self.comment.page_object = self.page self.comment.scope_object = self.project self.comment.author = self.user self.comment.content = "blah blah" self.comment.save() def test_send_notification(self): """ Test non replyable notification """ #TODO use templates and context that doesn't rely on another app! subject_template = 'replies/emails/post_comment_subject.txt' body_template = 'replies/emails/post_comment.txt' context = { 'comment': self.comment, 'domain': 'example.org', } message_count = len(mail.outbox) send_notifications(self.user, subject_template, body_template, context) self.assertEqual(ResponseToken.objects.count(), 0) #TODO check that 1 email was sent #self.assertEqual(len(mail.outbox), message_count + 1) def test_notification_with_response(self): """ Test notification with possible response """ subject_template = 'replies/emails/post_comment_subject.txt' body_template = 'replies/emails/post_comment.txt' context = { 'comment': self.comment, 'domain': 'example.org', } send_notifications(self.user, subject_template, body_template, context, "/call/me/back") self.assertEqual(ResponseToken.objects.count(), 1) def test_respond_by_email_hook(self): """ Test that email hook works and returns status code 200 """ data = { u'from': [u'Dirk Uys <*****@*****.**>'], u'attachments': [u'0'], u'to': [u'*****@*****.**'], u'text': [u'Maybe this time\n'], u'envelope': [u'{"to":["*****@*****.**"],"from":"*****@*****.**"}'], u'headers': [ u'Received: by 127.0.0.1 with SMTP id 7HNiGL0knF Thu, 21 Jun 2012 10:41:34 -0500 (CDT)\nReceived: from mail-ey0-f182.google.com (mail-ey0-f182.google.com [209.85.215.182]) by mx2.sendgrid.net (Postfix) with ESMTPS id 165E0179EA68 for <*****@*****.**>; Thu, 21 Jun 2012 10:41:33 -0500 (CDT)\nReceived: by eabm6 with SMTP id m6so287981eab.41 for <*****@*****.**>; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nX-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=U5LQcX1VeMMflboN7DWaD8mhHxEUMyxJKSioavl+PaY=; b=mod67Tg9pJkedv/ired6n89xAik5vPltmw+78esRAyAivlBnX845MVF1quPz3ApUCR 3D0a4knRfG1DXL7I5WHPUelHmT7vSurAtHPrW4ndJgyCoPjsd32rL9rIfrFpJGAWWd9+ DAO7gRMx0CtPNXL3UoOKtZTEMT1tF+Zt6UMPY+kZwP64lO4/k6dc6XYfGMYTEU2HUill CIftL/P7KjbcopBXpKF5YAJGHOazmw1QcRlTFaIW6ymW1uSZ5ieNUgZVQXIXw4/760O5 TJCZsh2qACfZ2PWWOfBV6bu0kjsab5TrsbBUdlu5uRoLeJxXqYzTroJ8+cbGPhrqZSGT 5XnA==\nMIME-Version: 1.0\nReceived: by 10.152.109.198 with SMTP id hu6mr26806411lab.21.1340293291509; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nReceived: by 10.112.11.97 with HTTP; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nDate: Thu, 21 Jun 2012 17:41:31 +0200\nMessage-ID: <CAAcFfF+a-WTypUHo2aPi_jjemNM8RRD3habXoFpopCOcFs=M0g@mail.gmail.com>\nSubject: test3\nFrom: Dirk Uys <*****@*****.**>\nTo: [email protected]\nContent-Type: multipart/alternative; boundary=bcaec54b49d689096204c2fd5911\nX-Gm-Message-State: ALoCoQnzUWK4n+vh7QKSKjeJhgRrSUiCswAUpJmKNuhvGunMWMyixYjwSRwhiFRrOv0DHlpBmkke\n'], u'html': [u'Maybe this time<br>\n'], u'charsets': [u'{"to":"UTF-8","html":"ISO-8859-1","subject":"UTF-8","from":"UTF-8","text":"ISO-8859-1"}'], u'dkim': [u'none'], u'SPF': [u'none'], u'subject': [u'test3'] } response = self.client.post('/{0}/notifications/response/'.format(self.locale), data) self.assertEqual(response.status_code, 200) def test_auto_reply(self): """ Test that email hook works and rejects auto responder replies """ data = { u'from': [u'Dirk Uys <*****@*****.**>'], u'attachments': [u'0'], u'to': [u'*****@*****.**'], u'text': [u'Maybe this time\n'], u'envelope': [u'{"to":["*****@*****.**"],"from":"*****@*****.**"}'], u'headers': [ u'Received: by 127.0.0.1 with SMTP id 7HNiGL0knF Thu, 21 Jun 2012 10:41:34 -0500 (CDT)\nReceived: from mail-ey0-f182.google.com (mail-ey0-f182.google.com [209.85.215.182]) by mx2.sendgrid.net (Postfix) with ESMTPS id 165E0179EA68 for <*****@*****.**>; Thu, 21 Jun 2012 10:41:33 -0500 (CDT)\nReceived: by eabm6 with SMTP id m6so287981eab.41 for <*****@*****.**>; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nX-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=U5LQcX1VeMMflboN7DWaD8mhHxEUMyxJKSioavl+PaY=; b=mod67Tg9pJkedv/ired6n89xAik5vPltmw+78esRAyAivlBnX845MVF1quPz3ApUCR 3D0a4knRfG1DXL7I5WHPUelHmT7vSurAtHPrW4ndJgyCoPjsd32rL9rIfrFpJGAWWd9+ DAO7gRMx0CtPNXL3UoOKtZTEMT1tF+Zt6UMPY+kZwP64lO4/k6dc6XYfGMYTEU2HUill CIftL/P7KjbcopBXpKF5YAJGHOazmw1QcRlTFaIW6ymW1uSZ5ieNUgZVQXIXw4/760O5 TJCZsh2qACfZ2PWWOfBV6bu0kjsab5TrsbBUdlu5uRoLeJxXqYzTroJ8+cbGPhrqZSGT 5XnA==\nMIME-Version: 1.0\nReceived: by 10.152.109.198 with SMTP id hu6mr26806411lab.21.1340293291509; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nReceived: by 10.112.11.97 with HTTP; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nDate: Thu, 21 Jun 2012 17:41:31 +0200\nMessage-ID: <CAAcFfF+a-WTypUHo2aPi_jjemNM8RRD3habXoFpopCOcFs=M0g@mail.gmail.com>\nSubject: test3\nFrom: Dirk Uys <*****@*****.**>\nTo: [email protected]\nContent-Type: multipart/alternative; boundary=bcaec54b49d689096204c2fd5911\nX-Autorespond: dont\nX-Gm-Message-State: ALoCoQnzUWK4n+vh7QKSKjeJhgRrSUiCswAUpJmKNuhvGunMWMyixYjwSRwhiFRrOv0DHlpBmkke\n'], u'html': [u'Maybe this time<br>\n'], u'charsets': [u'{"to":"UTF-8","html":"ISO-8859-1","subject":"UTF-8","from":"UTF-8","text":"ISO-8859-1"}'], u'dkim': [u'none'], u'SPF': [u'none'], u'subject': [u'test3'] } response = self.client.post('/{0}/notifications/response/'.format(self.locale), data) self.assertEqual(response.status_code, 200) #X-Autoreply: yes #Auto-Submitted: auto-replied def test_reply_by_email(self): subject_template = 'replies/emails/post_comment_subject.txt' body_template = 'replies/emails/post_comment.txt' context = { 'comment': self.comment, 'domain': 'example.org', } callback_url = "/{0}/comments/{1}/email_reply/".format(self.locale, self.comment.id) send_notifications( self.user, subject_template, body_template, context, callback_url ) self.assertEqual(ResponseToken.objects.count(), 1) token = ResponseToken.objects.all()[0] data = { u'from': [u'Testing <*****@*****.**>'], u'to': [u'reply+{0}@reply.p2pu.org'.format(token.response_token)], u'text': [u'Maybe this time\n'], } #post_notification_response(token, '*****@*****.**', 'my response') response = self.client.post('/{0}/notifications/response/'.format(self.locale), data) self.assertEqual(response.status_code, 200) # i wish, the test db isn't running a server that can take the callback #comments = PageComment.objects.all() #self.assertEquals(comments.count(), 2) def test_notification_create(self): """ Test sending a notification using the API """ notification_data = { 'api-key': settings.INTERNAL_API_KEY, 'user': self.user.username, 'subject': 'notification', 'text': 'Some notification text.\nAnd some more', 'callback_url': 'http://mentor.p2pu.org/message/43234', 'from': self.user.username, } json_data = json.dumps(notification_data) response = self.client.post( '/{0}/notifications/notification/'.format(self.locale), json_data, "text/json" ) self.assertEqual(response.status_code, 200)
def import_from_old_site(request): user = request.user.get_profile() if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) except School.DoesNotExist: return http.HttpResponseRedirect(reverse('projects_clone')) else: school = None if request.method == 'POST': form = project_forms.ImportProjectForm(school, request.POST) if form.is_valid(): course = form.cleaned_data['course'] project = Project(name=course['name'], short_description= course['short_description'], long_description=course['long_description'], school=course['school'], imported_from=course['slug']) project.save() act = Activity(actor=user, verb='http://activitystrea.ms/schema/1.0/post', project=project, target_project=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel = Relationship(source=user, target_project=project) try: new_rel.save() except IntegrityError: pass if course['detailed_description']: detailed_description_content = course['detailed_description'] else: detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up_content = render_to_string("projects/sign_up_initial_content.html", {}) sign_up = Page(title=_('Sign-Up'), slug='sign-up', content=sign_up_content, listed=False, editable=False, author_id=user.id, project_id=project.id) sign_up.save() project.sign_up_id = sign_up.id project.save() for title, content in course['tasks']: new_task = Page(title=title, content=content, author=user, project=project) new_task.save() for name, url in course['links']: new_link = Link(name=name, url=url, user=user, project=project) new_link.save() messages.success(request, _('The study group has been imported.')) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem importing the study group.")) else: form = project_forms.ImportProjectForm(school) return render_to_response('projects/project_import.html', { 'form': form, 'import_tab': True, 'school': school, }, context_instance=RequestContext(request))
def clone(request): user = request.user.get_profile() if 'school' in request.GET: try: school = School.objects.get(slug=request.GET['school']) except School.DoesNotExist: return http.HttpResponseRedirect(reverse('projects_clone')) else: school = None if request.method == 'POST': form = project_forms.CloneProjectForm(school, request.POST) if form.is_valid(): base_project = form.cleaned_data['project'] project = Project(name=base_project.name, short_description=base_project.short_description, long_description=base_project.long_description, school=base_project.school, clone_of=base_project) project.save() act = Activity(actor=user, verb='http://activitystrea.ms/schema/1.0/post', project=project, target_project=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel = Relationship(source=user, target_project=project) try: new_rel.save() except IntegrityError: pass detailed_description = Page(title=_('Full Description'), slug='full-description', content=base_project.detailed_description.content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Page(title=_('Sign-Up'), slug='sign-up', content=base_project.sign_up.content, listed=False, editable=False, author_id=user.id, project_id=project.id) sign_up.save() project.sign_up_id = sign_up.id project.save() tasks = Page.objects.filter(project=base_project, listed=True, deleted=False).order_by('index') for task in tasks: new_task = Page(title=task.title, content=task.content, author=user, project=project) new_task.save() links = Link.objects.filter(project=base_project).order_by('index') for link in links: new_link = Link(name=link.name, url=link.url, user=user, project=project) new_link.save() messages.success(request, _('The study group has been cloned.')) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem cloning the study group.")) else: form = project_forms.CloneProjectForm(school) return render_to_response('projects/project_clone.html', { 'form': form, 'clone_tab': True, 'school': school, }, context_instance=RequestContext(request))
class RepliesViewsTests(TestCase): test_username = '******' test_email = '*****@*****.**' test_password = '******' def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project( name='Reply Project', short_description='This project is to test replies', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page(author=self.user, project=self.project, title='task title', sub_header='Tagline', content='Content', index=2) self.page.save() def test_comment(self): comment_count = PageComment.objects.count() data = { 'content': 'This is a comment', } self.client.login(username=self.test_username, password=self.test_password) comment_url = '/{0}/comments/create/page/content/{1}/project/projects/{2}/'.format( self.locale, self.page.id, self.project.id) response = self.client.post(comment_url, data) #redirect_url = '/{0}/comments/{1}/'.format(self.locale, comment_count+1) #self.assertRedirects(response, redirect_url, target_status_code=302) comments = PageComment.objects.all() self.assertEquals(comments.count(), comment_count + 1) def test_repy(self): comment = PageComment() comment.page_object = self.page comment.scope_object = self.project comment.author = self.user comment.content = "blah blah" comment.save() self.client.login(username=self.test_username, password=self.test_password) # post reply data = {'content': 'This is a reply'} reply_url = '/{0}/comments/{1}/reply/'.format(self.locale, comment.id) response = self.client.post(reply_url, data) comments = PageComment.objects.all() self.assertEquals(comments.count(), 2) def test_reply_to_status(self): """ Test a reply sent to a status update on a course page """ status = Status(status="status update") status.author = self.user status.project = self.project status.save() callback_url = "/en/comments/create/activity/activity/{0}/project/projects/{1}/callback/".format( status.activity.get().id, self.project.id) data = { u'api-key': settings.INTERNAL_API_KEY, u'from': self.test_username, u'text': u'Maybe this time\n', } comment_count = PageComment.objects.filter(sent_by_email=True).count() response = self.client.post(callback_url, data) self.assertEqual(response.status_code, 200) comments = PageComment.objects.filter(sent_by_email=True) self.assertEqual(comment_count + 1, comments.count()) def test_reply_by_email(self): # post a comment comment = PageComment() comment.page_object = self.page comment.scope_object = self.project comment.author = self.user comment.content = "blah blah" comment.save() data = { u'api-key': settings.INTERNAL_API_KEY, u'from': self.test_username, u'text': u'Maybe this time\n', } comment_count = PageComment.objects.filter(sent_by_email=True).count() response = self.client.post( '/{0}/comments/{1}/email_reply/'.format(self.locale, comment.id), data) self.assertEqual(response.status_code, 200) comments = PageComment.objects.filter(sent_by_email=True) self.assertEquals(comments.count(), comment_count + 1) def test_comment_reply_api_key(self): comment = PageComment() comment.page_object = self.page comment.scope_object = self.project comment.author = self.user comment.content = "blah blah" comment.save() data = { u'api-key': 'notthecorrectkey', u'from': self.test_username, u'text': u'Some stealthy reply that won\'t make it in!\n', } response = self.client.post( '/{0}/comments/{1}/email_reply/'.format(self.locale, comment.id), data) self.assertEqual(response.status_code, 403)
class NotificationsTests(TestCase): test_username = '******' test_email = '*****@*****.**' test_password = '******' def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project( name='Reply Project', short_description='This project is to test replies', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page(author=self.user, project=self.project, title='task title', sub_header='Tagline', content='Content', index=2) self.page.save() self.comment = PageComment() self.comment.page_object = self.page self.comment.scope_object = self.project self.comment.author = self.user self.comment.content = "blah blah" self.comment.save() def test_send_notification(self): """ Test non replyable notification """ #TODO use templates and context that doesn't rely on another app! subject_template = 'replies/emails/post_comment_subject.txt' body_template = 'replies/emails/post_comment.txt' context = { 'comment': self.comment, 'domain': 'example.org', } message_count = len(mail.outbox) send_notifications(self.user, subject_template, body_template, context) self.assertEqual(ResponseToken.objects.count(), 0) #TODO check that 1 email was sent #self.assertEqual(len(mail.outbox), message_count + 1) def test_notification_with_response(self): """ Test notification with possible response """ subject_template = 'replies/emails/post_comment_subject.txt' body_template = 'replies/emails/post_comment.txt' context = { 'comment': self.comment, 'domain': 'example.org', } send_notifications(self.user, subject_template, body_template, context, "/call/me/back") self.assertEqual(ResponseToken.objects.count(), 1) def test_respond_by_email_hook(self): """ Test that email hook works and returns status code 200 """ data = { u'from': [u'Dirk Uys <*****@*****.**>'], u'attachments': [u'0'], u'to': [u'*****@*****.**'], u'text': [u'Maybe this time\n'], u'envelope': [ u'{"to":["*****@*****.**"],"from":"*****@*****.**"}' ], u'headers': [ u'Received: by 127.0.0.1 with SMTP id 7HNiGL0knF Thu, 21 Jun 2012 10:41:34 -0500 (CDT)\nReceived: from mail-ey0-f182.google.com (mail-ey0-f182.google.com [209.85.215.182]) by mx2.sendgrid.net (Postfix) with ESMTPS id 165E0179EA68 for <*****@*****.**>; Thu, 21 Jun 2012 10:41:33 -0500 (CDT)\nReceived: by eabm6 with SMTP id m6so287981eab.41 for <*****@*****.**>; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nX-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=U5LQcX1VeMMflboN7DWaD8mhHxEUMyxJKSioavl+PaY=; b=mod67Tg9pJkedv/ired6n89xAik5vPltmw+78esRAyAivlBnX845MVF1quPz3ApUCR 3D0a4knRfG1DXL7I5WHPUelHmT7vSurAtHPrW4ndJgyCoPjsd32rL9rIfrFpJGAWWd9+ DAO7gRMx0CtPNXL3UoOKtZTEMT1tF+Zt6UMPY+kZwP64lO4/k6dc6XYfGMYTEU2HUill CIftL/P7KjbcopBXpKF5YAJGHOazmw1QcRlTFaIW6ymW1uSZ5ieNUgZVQXIXw4/760O5 TJCZsh2qACfZ2PWWOfBV6bu0kjsab5TrsbBUdlu5uRoLeJxXqYzTroJ8+cbGPhrqZSGT 5XnA==\nMIME-Version: 1.0\nReceived: by 10.152.109.198 with SMTP id hu6mr26806411lab.21.1340293291509; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nReceived: by 10.112.11.97 with HTTP; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nDate: Thu, 21 Jun 2012 17:41:31 +0200\nMessage-ID: <CAAcFfF+a-WTypUHo2aPi_jjemNM8RRD3habXoFpopCOcFs=M0g@mail.gmail.com>\nSubject: test3\nFrom: Dirk Uys <*****@*****.**>\nTo: [email protected]\nContent-Type: multipart/alternative; boundary=bcaec54b49d689096204c2fd5911\nX-Gm-Message-State: ALoCoQnzUWK4n+vh7QKSKjeJhgRrSUiCswAUpJmKNuhvGunMWMyixYjwSRwhiFRrOv0DHlpBmkke\n' ], u'html': [u'Maybe this time<br>\n'], u'charsets': [ u'{"to":"UTF-8","html":"ISO-8859-1","subject":"UTF-8","from":"UTF-8","text":"ISO-8859-1"}' ], u'dkim': [u'none'], u'SPF': [u'none'], u'subject': [u'test3'] } response = self.client.post( '/{0}/notifications/response/'.format(self.locale), data) self.assertEqual(response.status_code, 200) def test_auto_reply(self): """ Test that email hook works and rejects auto responder replies """ data = { u'from': [u'Dirk Uys <*****@*****.**>'], u'attachments': [u'0'], u'to': [u'*****@*****.**'], u'text': [u'Maybe this time\n'], u'envelope': [ u'{"to":["*****@*****.**"],"from":"*****@*****.**"}' ], u'headers': [ u'Received: by 127.0.0.1 with SMTP id 7HNiGL0knF Thu, 21 Jun 2012 10:41:34 -0500 (CDT)\nReceived: from mail-ey0-f182.google.com (mail-ey0-f182.google.com [209.85.215.182]) by mx2.sendgrid.net (Postfix) with ESMTPS id 165E0179EA68 for <*****@*****.**>; Thu, 21 Jun 2012 10:41:33 -0500 (CDT)\nReceived: by eabm6 with SMTP id m6so287981eab.41 for <*****@*****.**>; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nX-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-gm-message-state; bh=U5LQcX1VeMMflboN7DWaD8mhHxEUMyxJKSioavl+PaY=; b=mod67Tg9pJkedv/ired6n89xAik5vPltmw+78esRAyAivlBnX845MVF1quPz3ApUCR 3D0a4knRfG1DXL7I5WHPUelHmT7vSurAtHPrW4ndJgyCoPjsd32rL9rIfrFpJGAWWd9+ DAO7gRMx0CtPNXL3UoOKtZTEMT1tF+Zt6UMPY+kZwP64lO4/k6dc6XYfGMYTEU2HUill CIftL/P7KjbcopBXpKF5YAJGHOazmw1QcRlTFaIW6ymW1uSZ5ieNUgZVQXIXw4/760O5 TJCZsh2qACfZ2PWWOfBV6bu0kjsab5TrsbBUdlu5uRoLeJxXqYzTroJ8+cbGPhrqZSGT 5XnA==\nMIME-Version: 1.0\nReceived: by 10.152.109.198 with SMTP id hu6mr26806411lab.21.1340293291509; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nReceived: by 10.112.11.97 with HTTP; Thu, 21 Jun 2012 08:41:31 -0700 (PDT)\nDate: Thu, 21 Jun 2012 17:41:31 +0200\nMessage-ID: <CAAcFfF+a-WTypUHo2aPi_jjemNM8RRD3habXoFpopCOcFs=M0g@mail.gmail.com>\nSubject: test3\nFrom: Dirk Uys <*****@*****.**>\nTo: [email protected]\nContent-Type: multipart/alternative; boundary=bcaec54b49d689096204c2fd5911\nX-Autorespond: dont\nX-Gm-Message-State: ALoCoQnzUWK4n+vh7QKSKjeJhgRrSUiCswAUpJmKNuhvGunMWMyixYjwSRwhiFRrOv0DHlpBmkke\n' ], u'html': [u'Maybe this time<br>\n'], u'charsets': [ u'{"to":"UTF-8","html":"ISO-8859-1","subject":"UTF-8","from":"UTF-8","text":"ISO-8859-1"}' ], u'dkim': [u'none'], u'SPF': [u'none'], u'subject': [u'test3'] } response = self.client.post( '/{0}/notifications/response/'.format(self.locale), data) self.assertEqual(response.status_code, 200) #X-Autoreply: yes #Auto-Submitted: auto-replied def test_reply_by_email(self): subject_template = 'replies/emails/post_comment_subject.txt' body_template = 'replies/emails/post_comment.txt' context = { 'comment': self.comment, 'domain': 'example.org', } callback_url = "/{0}/comments/{1}/email_reply/".format( self.locale, self.comment.id) send_notifications(self.user, subject_template, body_template, context, callback_url) self.assertEqual(ResponseToken.objects.count(), 1) token = ResponseToken.objects.all()[0] data = { u'from': [u'Testing <*****@*****.**>'], u'to': [u'reply+{0}@reply.p2pu.org'.format(token.response_token)], u'text': [u'Maybe this time\n'], } #post_notification_response(token, '*****@*****.**', 'my response') response = self.client.post( '/{0}/notifications/response/'.format(self.locale), data) self.assertEqual(response.status_code, 200) # i wish, the test db isn't running a server that can take the callback #comments = PageComment.objects.all() #self.assertEquals(comments.count(), 2) def test_notification_create(self): """ Test sending a notification using the API """ notification_data = { 'api-key': settings.INTERNAL_API_KEY, 'user': self.user.username, 'subject': 'notification', 'text': 'Some notification text.\nAnd some more', 'callback_url': 'http://mentor.p2pu.org/message/43234', 'from': self.user.username, } json_data = json.dumps(notification_data) response = self.client.post( '/{0}/notifications/notification/'.format(self.locale), json_data, "text/json") self.assertEqual(response.status_code, 200)
class RepliesViewsTests(TestCase): test_username = '******' test_email = '*****@*****.**' test_password = '******' def setUp(self): self.client = Client() self.locale = 'en' django_user = User( username=self.test_username, email=self.test_email, ) self.user = create_profile(django_user) self.user.set_password(self.test_password) self.user.save() self.project = Project(name='Reply Project', short_description='This project is to test replies', long_description='No really, its good', ) self.project.save() participation = Participation(project=self.project, user=self.user, organizing=True) participation.save() self.page = Page(author=self.user, project=self.project, title='task title', sub_header='Tagline', content='Content', index=2) self.page.save() def test_comment(self): comment_count = PageComment.objects.count() data = { 'content': 'This is a comment', } self.client.login(username=self.test_username, password=self.test_password) comment_url = '/{0}/comments/create/page/content/{1}/project/projects/{2}/'.format(self.locale, self.page.id, self.project.id) response = self.client.post(comment_url, data) #redirect_url = '/{0}/comments/{1}/'.format(self.locale, comment_count+1) #self.assertRedirects(response, redirect_url, target_status_code=302) comments = PageComment.objects.all() self.assertEquals(comments.count(), comment_count+1) def test_repy(self): comment = PageComment() comment.page_object = self.page comment.scope_object = self.project comment.author = self.user comment.content = "blah blah" comment.save() self.client.login(username=self.test_username, password=self.test_password) # post reply data = { 'content': 'This is a reply' } reply_url = '/{0}/comments/{1}/reply/'.format(self.locale, comment.id) response = self.client.post(reply_url, data) comments = PageComment.objects.all() self.assertEquals(comments.count(), 2) def test_reply_to_status(self): """ Test a reply sent to a status update on a course page """ status = Status(status="status update") status.author = self.user status.project = self.project status.save() callback_url = "/en/comments/create/activity/activity/{0}/project/projects/{1}/callback/".format(status.activity.get().id, self.project.id) data = { u'api-key': settings.INTERNAL_API_KEY, u'from': self.test_username, u'text': u'Maybe this time\n', } comment_count = PageComment.objects.filter(sent_by_email=True).count() response = self.client.post(callback_url, data) self.assertEqual(response.status_code, 200) comments = PageComment.objects.filter(sent_by_email=True) self.assertEqual(comment_count+1, comments.count()) def test_reply_by_email(self): # post a comment comment = PageComment() comment.page_object = self.page comment.scope_object = self.project comment.author = self.user comment.content = "blah blah" comment.save() data = { u'api-key': settings.INTERNAL_API_KEY, u'from': self.test_username, u'text': u'Maybe this time\n', } comment_count = PageComment.objects.filter(sent_by_email=True).count() response = self.client.post('/{0}/comments/{1}/email_reply/'.format(self.locale, comment.id), data) self.assertEqual(response.status_code, 200) comments = PageComment.objects.filter(sent_by_email=True) self.assertEquals(comments.count(), comment_count+1) def test_comment_reply_api_key(self): comment = PageComment() comment.page_object = self.page comment.scope_object = self.project comment.author = self.user comment.content = "blah blah" comment.save() data = { u'api-key': 'notthecorrectkey', u'from': self.test_username, u'text': u'Some stealthy reply that won\'t make it in!\n', } response = self.client.post('/{0}/comments/{1}/email_reply/'.format(self.locale, comment.id), data) self.assertEqual(response.status_code, 403)
def clone(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.CloneProjectForm(request.POST) if form.is_valid(): base_project = form.cleaned_data['project'] #CS - too much logic in view project = Project(name=base_project.name, category=base_project.category, other=base_project.other, other_description=base_project.other_description, short_description=base_project.short_description, long_description=base_project.long_description, clone_of=base_project) project.save() act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description = Page(title=_('Full Description'), slug='full-description', content=base_project.detailed_description.content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id base_sign_up = base_project.sign_up.get() sign_up = Signup(public=base_sign_up.public, between_participants=base_sign_up.between_participants, author_id=user.id, project_id=project.id) sign_up.save() project.save() tasks = Page.objects.filter(project=base_project, listed=True, deleted=False).order_by('index') for task in tasks: new_task = Page(title=task.title, content=task.content, author=user, project=project) new_task.save() links = Link.objects.filter(project=base_project).order_by('index') for link in links: new_link = Link(name=link.name, url=link.url, user=user, project=project) new_link.save() project.create() messages.success(request, _('The %s has been cloned.') % project.kind.lower()) return http.HttpResponseRedirect(reverse('projects_create_tasks', kwargs={ 'slug': project.slug, })) else: messages.error(request, _("There was a problem cloning the study group, course, ...")) else: form = project_forms.CloneProjectForm() return render_to_response('projects/project_clone.html', { 'form': form, 'clone_tab': True, }, context_instance=RequestContext(request))
def save(self): sid = transaction.savepoint() page = Page() page.slug = self.slug[0:100] page.title = self.title[0:100] page.body = self.body page.alias_url = "http://www.birdlife.fi/" + self.source_path mtime = datetime.fromtimestamp(os.path.getmtime(self.source_abspath)) page.created = mtime page.last_edited = mtime page.lang = "fi" if self.template: page.template = self.template if self.level > 0: level_parent = self.level - 1 #print "Searching parent: level=%s slug=%s" % (level_parent, self.slug_parent) try: parent = Page.objects.get(level=level_parent, slug=self.slug_parent) except Page.DoesNotExist: #print "Creating parent for %s: %s" % (self.path, self.slug_parent) parent = Page() parent.slug = self.slug_parent parent.title = parent.slug.capitalize() parent.body = "<h1>%s</h1><p>(Autogenerated page)</p>" % parent.title if level_parent > 0: pp_level = self.level - 2 pp_slug = self.path.split("/")[-3] #print "Searching parent of parent: level=%s slug=%s" % (pp_level, pp_slug) pparent = Page.objects.get(level=pp_level, slug=pp_slug) parent.parent = pparent parent.save() page.parent = parent try: page.save() transaction.savepoint_commit(sid) uniq_attachments = set(self.attachments) for path in uniq_attachments: attachment = Attachment.create_from_file(path, None, False) attachment.page = page attachment.save() self.debug("Imported attachment: %s" % attachment.id) except DatabaseError as e: # w = open("/tmp/body", "w") # w.write(self.body.encode("utf8")) # w.close() # raise SystemExit() transaction.savepoint_rollback(sid) raise ImportError("%s" % e) #print "Oops!!!!!!!" #page.body = BeautifulSoup(self.html, convertEntities=BeautifulStoneSoup.HTML_ENTITIES).prettify() #page.save() #raise SystemExit() if self.debug_path == self.path: raise SystemExit() self.page = page