Exemple #1
0
    def mutate_and_get_payload(cls, input, request, info):
        gid_type, gid = from_global_id(input.get('lifeNode'))
        node = LifeNode._meta.model.objects.get(document_id=gid)

        error = has_permission(cls, request, node, 'edit')
        if error:
            return error

        tag_title = input.get('title').strip(' \t\n\r')
        tag_slug = slugify(tag_title)

        try:
            tag = TagModel.objects.get(slug=tag_slug)
        except TagModel.DoesNotExist:
            tag = TagModel(
                title=tag_title,
                slug=tag_slug,
            )
            tag.save(request=request)

        c = CharacteristicModel(
            tag=tag.document,
            lifeNode=node.document,
            value=input.get('value')
        )
        c.save(request=request)

        return CharacteristicAdd(
            lifeNode=node,
            characteristic=Characteristic.Connection.Edge(
                node=c, cursor=offset_to_cursor(0))
        )
def add_new_listing(request):
    if request.method == 'POST':
        schema = SubmitListingSchema()
        data, errors = schema.load(request.POST)
        if not errors:
            form = ListingsForms(request.POST, request.FILES)
            tags_list = data['tag'].split(',')
            if form.is_valid():
                try:
                    listing = form.save(commit=False)
                    listing.user_id = request.profile.user_id
                    listing.save()

                    for tag in tags_list:
                        new_tag = Tag(name=tag)
                        try:
                            new_tag.save()
                            new_tag.listings_set.add(listing)
                            update_profile_tags(new_tag, request.profile,
                                                listing)
                        except IntegrityError as e:
                            existing_tag = Tag.objects.get(name=tag)
                            existing_tag.listings_set.add(listing)
                            update_profile_tags(existing_tag, request.profile,
                                                listing)
                    # save_document(listing)
                    return JsonResponse({'msg': 'Success!'})
                except Exception as e:
                    print(e)
                    return HttpResponseRedirect(reverse('frontend:home'))
        else:
            return JsonResponse({'errors': errors}, status=400)
    else:
        form = ListingsForms()
    return render(request, 'frontend/home.html', {'form': form})
Exemple #3
0
def add(request, app_label, model, object_id):

    content_type = get_object_or_404(ContentType, app_label=app_label,
                                     model=model)
    model = content_type.model_class()
    object_id = int(object_id)

    item = get_object_or_404(model, id=object_id)
    user = request.user

    new_tags = []

    if request.method == "POST":
        tags = [t.strip() for t in request.POST.get("tags", u"").split(u",")]
        for tag in tags:
            if not item.tags.filter(user=user, slug=slugify(tag)).count():
                tag = Tag(content_type=content_type, object_id=object_id,
                    user=user, name=tag)
                tag.save()
                new_tags.append(tag)

    reindex(item)

    response = {"tags": []}
    for tag in new_tags:
        response["tags"].append(dict(name=tag.name,
                                     id=tag.id,
                                     url=reverse("materials:keyword_index",
                                                 kwargs={"keywords": tag.slug}),
                                     ))

    return response
    def setUp(self):
        from regions.models import Region
        from pages.models import Page
        from tags.models import Tag, PageTagSet

        self.factory = RequestFactory()

        # Create a new region and associate a domain with it
        self.sf = Region(full_name="San Francisco", slug="sf")
        self.sf.save()
        self.sf.regionsettings.domain = 'fakename.org'
        self.sf.regionsettings.save()

        self.user = User.objects.create_user(
            username='******', email='*****@*****.**', password='******')
        self.user.save()
       
        # Create a page in the SF region
        p = Page(name='Parks', content='<p>Hi</p>', region=self.sf)
        p.save(user=self.user)
        p.content += "!"
        p.save(user=self.user)

        # Add a tag to the page
        t = Tag(name='park', slug='park', region=self.sf)
        t.save(user=self.user)
        pts = PageTagSet(region=self.sf, page=p)
        pts.save(user=self.user)
        pts.tags.add(t)
        pts.save(user=self.user)
Exemple #5
0
def post_save(post, args, request):
    post.url = args.get('url')
    post.title = args.get('title')
    post.body = args.get('body')
    post.published_at = args.get('published_at')
    post.save(request=request)

    post.tags.clear()
    from tags.models import Tag
    tags_raw = args.get('tags', '')
    for tag_title in tags_raw.split(','):
        tag_title = tag_title.strip(' \t\n\r')
        tag_slug = slugify(tag_title)

        if len(tag_title) == 0:
            # don't save empty tag
            continue

        try:
            tag = Tag.objects.get(slug=tag_slug)
        except Tag.DoesNotExist:
            tag = Tag(
                title=tag_title,
                slug=tag_slug,
            )
            tag.save(request=request)
        post.tags.add(tag.document)

    return post
Exemple #6
0
def tagref_create(request, tag_name):
  """ Create a single tag reference. 
  
  The resource must exist and the reference must be valid, but if the tag
  doesn't exist, then then it is created. 
  """
  try:
    # resource MUST exist
    res_str = request.POST['resource'].strip()
    resource = library.get(res_str)
    # reference must be valid
    ref_str = request.POST['reference']
    ref = resource.reference(ref_str)
  except:
    log.info("User provided bad resource or reference. (res: %s; ref: )", res_str, ref_str)
    raise Http404
  # if tag name doesn't exist, create it
  try:
    t = get_exact_tag(request.user, tag_name)
  except:
    # TODO: move to models
    t = Tag(tag=tag_name, user=request.user)
    t.save()
  log.debug("Saving new tag %s %s %s %s", ref_str, tag_name, t, ref.pretty())
  # TODO: move to models
  new_ref = Reference(tag=t, resource=res_str, reference=ref.pretty(), 
      offset_start=ref.indices().start, offset_end=ref.indices().end, 
      user=request.user)
  new_ref.save()
  return HttpResponseRedirect(reverse('tagref_detail', args=(tag_name, str(new_ref.id))));
Exemple #7
0
def ask(request):
    ask_form = AskQuestion(request.POST or None)
    args = {}
    args['form'] = ask_form
    if request.POST and ask_form.is_valid():
        question = Question(text=ask_form.cleaned_data['text'], title=ask_form.cleaned_data['title'])
        tags = ask_form.cleaned_data['tags']

        g = Tag.objects.all()
        getTag = tags.split(', ')

        for tag in getTag:
            counter = 0
            for l in g:
                if l.tag == tag:
                    counter += 1
            if counter == 0:
                t = Tag(tag=tag)
                t.save()


        user = auth.get_user(request)
        question.author = user

        question.save()
        a = g.filter(tag__in=getTag)
        question.tags.add(*a)
        return redirect('questionGet', question_id=question.id)

    else:
        return render(request, 'ask.html', args)
    def test_slug(self):
        t = Tag(name='Library of Congress', region=self.region)
        t.save()
        self.assertEqual(t.slug, 'libraryofcongress')

        t = Tag(name='Сочи 2014', region=self.region)
        t.save()
        self.assertEqual(t.slug, 'сочи2014'.decode('utf-8'))
Exemple #9
0
 def test_remove_tag_button(self):
     self.client.login(username='******', password='******')
     tag = Tag(tag_text='f')
     tag.save()
     AddonTag(addon=Addon.objects.get(pk=3615), tag=tag, user_id=999).save()
     r = self.client.get(reverse('addons.detail', args=[3615]))
     doc = pq(r.content)
     assert len(doc('#tags li input.removetag'))
Exemple #10
0
def test_bookmarks_get_delete_url_returns_correct_url():
    user = make_users(1)[0]
    tag = Tag(title='Test Tag', slug='test-tag', user=user)
    tag.save()
    Bookmark(title='Test Bookmark', slug='test-bookmark', tag=tag,
             url="http://www.testers.com", user=user).save()
    bookmark = Bookmark.objects.get(pk=1)
    assert bookmark.get_delete_url() == '/bookmarks/delete/test-tag/test-bookmark/'
Exemple #11
0
def test_bookmarks_unicode_method_returns_title_correctly():
    user = make_users(1)[0]
    tag = Tag(title='Test Tag', slug='test-tag', user=user)
    tag.save()
    Bookmark(title='Test Bookmark', slug='test-bookmark', tag=tag,
             url="http://www.testers.com", user=user).save()
    bookmark = Bookmark.objects.get(pk=1)
    assert bookmark.__unicode__() == 'Test Bookmark'
Exemple #12
0
def test_edit_tag_form_is_valid():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    form = EditTagForm({
        'title': 'test',
    }, user=user, instance=tag)
    assert form.is_valid()
Exemple #13
0
 def _create_tags_and_questions(self):
     for i in range(len(self.titles)):
         current_question = Question(id=i,
                                     title=self.titles[i],
                                     user_id=0,
                                     details=self.descriptions[i])
         current_question.save()
         tag = Tag(id=i, name=self.tags[i])
         tag.save()
Exemple #14
0
 def setUp(self):
     u = UserProfile(username='******')
     u.save()
     t = Tag(tag_text='donkeybuttrhino')
     t.save()
     a = Addon.objects.all()[0]
     at = AddonTag(tag=t, user=u, addon=a)
     at.save()
     super(TagTest, self).setUp()
Exemple #15
0
def test_edit_tag_form_is_invalid_due_to_no_title():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    form = EditTagForm({
        'title': '',
    }, user=user, instance=tag)
    assert not form.is_valid()
    assert ['title'] == form.errors.keys()
Exemple #16
0
    def test_not_blacklisted(self):
        """Make sure Tag Manager filters right for not blacklisted tags."""
        tag1 = Tag(tag_text='abc', blacklisted=False)
        tag1.save()
        tag2 = Tag(tag_text='swearword', blacklisted=True)
        tag2.save()

        eq_(Tag.objects.all().count(), 2)
        eq_(Tag.objects.not_blacklisted().count(), 1)
        eq_(Tag.objects.not_blacklisted()[0], tag1)
Exemple #17
0
def test_edit_tag_form_saves_correctly():
    user = make_users(1)[0]
    tag = Tag(title='tag', user=user)
    tag.save()
    form = EditTagForm({
        'title': 'new name',
    }, user=user, instance=tag)
    assert form.is_valid()
    form.save()
    assert Tag.objects.get(pk=1).title == 'new name'
Exemple #18
0
    def test_not_blacklisted(self):
        """Make sure Tag Manager filters right for not blacklisted tags."""
        tag1 = Tag(tag_text='abc', blacklisted=False)
        tag1.save()
        tag2 = Tag(tag_text='swearword', blacklisted=True)
        tag2.save()

        eq_(Tag.objects.all().count(), 2)
        eq_(Tag.objects.not_blacklisted().count(), 1)
        eq_(Tag.objects.not_blacklisted()[0], tag1)
Exemple #19
0
    def save(self):
        for tag_title in self.tag_titles:
            tag_title = tag_title.lower()
            try:
                tag = Tag.objects.get(title=tag_title)
            except Tag.DoesNotExist:
                tag = Tag(title=tag_title)
                tag.save()

            yield tag
Exemple #20
0
def create(request):
    valid = True
    if request.method == 'POST':
        if request.POST['name'] == "":
            valid = False
    if request.method == 'POST' and valid:
        tag = Tag(name=request.POST['name'])
        tag.save()
        return render_to_response('tags/detail.html', {'tag': tag})
    else:
        return render(request, 'tags/create.html', {'valid': valid})
Exemple #21
0
def create(request):
    valid = True
    if request.method == 'POST':
        if request.POST['name'] == "":
            valid = False
    if request.method == 'POST' and valid:
        tag = Tag(name=request.POST['name'])
        tag.save()
        return render_to_response('tags/detail.html', {'tag': tag})
    else:
        return render(request, 'tags/create.html', {'valid': valid})
Exemple #22
0
 def test_existing_relation(self):
   tag1 = Tag(name="rock", count=50)
   tag2 = Tag(name="acoustics", count=35)
   
   tag1.save()
   tag2.save()
   
   rel = TagRelation(tag_to=tag1, tag_from=tag2, metric=0.7657)
   rel.save()
   
   self.assertEqual(rel, getRelation(tag1.name, tag2.name))
Exemple #23
0
def highlight(request):
  success = False
  user = request.user
  errors = {}
  data = {}

  if request.POST:
    url = process_url(request.POST.get('url'))
    highlight = request.POST.get('highlight')
    highlight_id = request.POST.get('highlight_id')
    tags = json.loads(request.POST.get('tags'))
    errors['add_highlight'] = []

    if highlight != "" or highlight_id:
      p = Page.objects.get(url=url)

      if highlight_id: 
        try:
          h = Highlight.objects.get(id=highlight_id)
          data['highlight_id'] = h.id
        except: 
          errors['add_highlight'].append('Get highlight failed')
      else:
        try:
          h, created = Highlight.objects.get_or_create(page=p, highlight=highlight)
          h.user = user
          h.save()

          success = True
          data['highlight_id'] = h.id
        except:
          errors['add_highlight'].append('Add highlight failed')

      if not len(errors['add_highlight']):
        for tag in tags:
          if len(Tag.objects.filter(highlight=h, common_tag__name=tag)) == 0:
            try:
              common_tag = CommonTag.objects.get(name=tag)
              vt = Tag(
                page=p, 
                highlight=h, 
                common_tag=common_tag,
                user=user, 
              )
              vt.save()
              success = True
            except CommonTag.DoesNotExist:
              errors['add_highlight'].append("Base tag " + tag + " does not exist")

  return {
    'success': success,
    'errors': errors,
    'data': data,
  }
    def handle(self, *args, **options):
        #i = 0
        #n = int(args[0])

        allTags = ['java', 'c++', 'incapsulation', 'programming', 'python',
                   'django', 'web', 'tags', 'questions', 'users', 'heap', 'ask']
        allTags.
        #for tagname in allTags:
        for i in range(len(allTags)):
            t = Tag(tag=allTags[i])
            t.save()
Exemple #25
0
def test_new_bookmark_form_is_valid():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    form = NewBookmarkForm({
        'title': 'test',
        'description': 'description',
        'url': 'http://www.google.com',
        'tag': tag.pk,
        'favorited': True,
    }, user=user)
    assert form.is_valid()
    def setUp(self):
        super(PageAPITests, self).setUp()

        # Create the edit user and add it to the authenticated group
        self.edit_user = User(username="******",
                              email="*****@*****.**",
                              password="******")
        self.edit_user.save()
        all_group, created = Group.objects.get_or_create(
            name=settings.USERS_DEFAULT_GROUP)
        self.edit_user.groups.add(all_group)
        self.edit_user.save()

        self.edit_user_2 = User(username="******",
                                email="*****@*****.**",
                                password="******")
        self.edit_user_2.save()
        all_group, created = Group.objects.get_or_create(
            name=settings.USERS_DEFAULT_GROUP)
        self.edit_user_2.groups.add(all_group)
        self.edit_user_2.save()

        self.sf_region = Region(full_name='San Francisco', slug='sf')
        self.sf_region.save()
        self.oak_region = Region(full_name='Oakland', slug='oak')
        self.oak_region.save()

        p = Page(region=self.oak_region)
        p.content = '<p>Lake Merritt here</p>'
        p.name = 'Lake Merritt'
        p.save()
        self.lake_merritt = p

        p = Page(region=self.sf_region)
        p.content = '<p>Dolores Park here</p>'
        p.name = 'Dolores Park'
        p.save()
        self.dolores_park = p

        p = Page(region=self.sf_region)
        p.content = '<p>Duboce Park here</p>'
        p.name = 'Duboce Park'
        p.save()
        self.duboce_park = p

        t1 = Tag(name='lake')
        t1.save()
        t2 = Tag(name='water')
        t2.save()
        pts = PageTagSet(page=p, region=self.sf_region)
        pts.save()
        pts.tags = [t1, t2]
Exemple #27
0
def test_new_bookmark_form_is_invalid_due_to_bad_url():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    form = NewBookmarkForm({
        'title': 'test',
        'description': 'description',
        'url': 'blah',
        'tag': tag.pk,
        'favorited': True,
    }, user=user)
    assert not form.is_valid()
    assert ['url'] == form.errors.keys()
Exemple #28
0
 def add_txt_tags(self, txt_tag_set):
     for txt_tag in txt_tag_set:
         try:
             tag = Tag(name=txt_tag)
             try:
                 tag = Tag.objects.get(name=txt_tag)
             except:
                 pass
             if self.active:
                 tag.obj_count += 1
             tag.save()
             self.tags.add(tag)
         except Exception, e:
             print str(e)
Exemple #29
0
def test_new_bookmark_form_saves_correctly():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    form = NewBookmarkForm({
        'title': 'Test Bookmark',
        'description': 'description',
        'url': 'http://www.google.com',
        'tag': tag.pk,
        'favorited': True,
    }, user=user)
    assert form.is_valid()
    form.save()
    assert len(Bookmark.objects.all()) == 1
Exemple #30
0
    def test_post_contains_correct_text_and_tags(self):
        post = Post(text='It is text')
        post.save()
        tag1 = Tag(tag='tag1')
        tag1.save()
        tag2 = Tag(tag='tag2')
        tag2.save()
        
        tag1.post.add(post)
        tag2.post.add(post)

        self.assertEqual('It is text', post.text)
        self.assertTrue(post.tag_set.all().get(tag='tag1'))
        self.assertTrue(post.tag_set.all().get(tag='tag2'))
Exemple #31
0
 def add_txt_tags(self, txt_tag_set):
     for txt_tag in txt_tag_set:
         try:
             tag = Tag(name=txt_tag)
             try:
                 tag = Tag.objects.get(name=txt_tag)
             except:
                 pass
             if self.active:
                 tag.obj_count += 1
             tag.save()
             self.tags.add(tag)
         except Exception, e:
             print str(e)
Exemple #32
0
def test_edit_bookmark_form_is_valid():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    Bookmark(title='Test Bookmark', slug='test-bookmark', user=user,
             description='', tag=tag, url='http://www.google.com').save()
    bookmark = Bookmark.objects.get(pk=1)
    form = EditBookmarkForm({
        'title': 'Test Bookmark',
        'description': 'description',
        'url': 'http://www.google.com',
        'tag': tag.pk,
        'favorited': True,
    }, user=user, instance=bookmark)
    assert form.is_valid()
Exemple #33
0
def test_new_bookmark_form_is_invalid_because_bookmark_exists():
    user = make_users(1)[0]
    tag = Tag(title='title', user=user)
    tag.save()
    Bookmark(title='Test Bookmark', slug='test-bookmark', user=user,
             description='', tag=tag, url='http://www.google.com').save()
    form = NewBookmarkForm({
        'title': 'Test Bookmark',
        'description': 'description',
        'url': 'http://www.google.com',
        'tag': tag.pk,
        'favorited': True,
    }, user=user)
    assert not form.is_valid()
    assert ['title'] == form.errors.keys()
    def setUp(self):
        super(PageAPITests, self).setUp()

        # Create the edit user and add it to the authenticated group
        self.edit_user = User(
            username="******", email="*****@*****.**", password="******")
        self.edit_user.save()
        all_group, created = Group.objects.get_or_create(name=settings.USERS_DEFAULT_GROUP)
        self.edit_user.groups.add(all_group)
        self.edit_user.save()

        self.edit_user_2 = User(
            username="******", email="*****@*****.**", password="******")
        self.edit_user_2.save()
        all_group, created = Group.objects.get_or_create(name=settings.USERS_DEFAULT_GROUP)
        self.edit_user_2.groups.add(all_group)
        self.edit_user_2.save()

        self.sf_region = Region(full_name='San Francisco', slug='sf')
        self.sf_region.save()
        self.oak_region = Region(full_name='Oakland', slug='oak')
        self.oak_region.save()

        p = Page(region=self.oak_region)
        p.content = '<p>Lake Merritt here</p>'
        p.name = 'Lake Merritt'
        p.save()
        self.lake_merritt = p

        p = Page(region=self.sf_region)
        p.content = '<p>Dolores Park here</p>'
        p.name = 'Dolores Park'
        p.save()
        self.dolores_park = p

        p = Page(region=self.sf_region)
        p.content = '<p>Duboce Park here</p>'
        p.name = 'Duboce Park'
        p.save()
        self.duboce_park = p

        t1 = Tag(name='lake')
        t1.save()
        t2 = Tag(name='water')
        t2.save()
        pts = PageTagSet(page=p, region=self.sf_region)
        pts.save()
        pts.tags = [t1, t2]
Exemple #35
0
    def test_move_with_fks(self):
        ###########################################################
        # Moving should carry along files and FK'ed items that
        # point to it.
        ###########################################################

        p = Page(region=self.sf)
        p.content = "<p>A page with files and a map in SF.</p>"
        p.name = "Page With FKs"
        p.save()
        # Create a file that points at the page.
        pf = PageFile(file=ContentFile("foo"), name="file.txt", slug=p.slug, region=self.sf)
        pf.save()
        # Create a redirect that points at the page.
        redirect = Redirect(source="foobar", destination=p, region=self.sf)
        redirect.save()
        # Create a map that points at the page.
        points = GEOSGeometry("""MULTIPOINT (-122.4378964233400069 37.7971758820830033, -122.3929211425700032 37.7688207875790027, -122.3908612060599950 37.7883584775320003, -122.4056240844700056 37.8013807351830025, -122.4148937988299934 37.8002956347170027, -122.4183270263600036 37.8051784612779969)""")
        map = MapData(points=points, page=p, region=self.sf)
        map.save()
        # Add tags to page
        tagset = PageTagSet(page=p, region=self.sf)
        tagset.save()
        tag = Tag(name="tag1", region=self.sf)
        tag.save()
        tagset.tags.add(tag)

        move_to_region(self.oak, pages=[p])

        # Check to see that the related objects were moved.
        p = Page.objects.get(name="Page With FKs", region=self.oak)
        self.assertEqual(len(MapData.objects.filter(page=p, region=self.oak)), 1)
        self.assertEqual(len(p.pagetagset.tags.all()), 1)
        self.assertEqual(len(Redirect.objects.filter(destination=p, region=self.oak)), 1)
        self.assertEqual(len(PageFile.objects.filter(slug=p.slug, region=self.oak)), 1)

        # Check to see that version history was moved as well
        self.assertEquals(p.versions.all().count(), 1)
        self.assertEqual(len(MapData.versions.filter(page=p, region=self.oak)), 1)
        for pts in p.pagetagset.tags.all():
            self.assertEqual(pts.versions.all().count(), 1)
        self.assertEqual(len(Redirect.versions.filter(destination=p, region=self.oak)), 1)
        self.assertEqual(len(PageFile.versions.filter(slug=p.slug, region=self.oak)), 1)

        # ..and that the page is no longer in the SF region
        self.assertFalse(Page.objects.filter(region=self.sf, name="Page With FKs").exists())
Exemple #36
0
def prepop_sorts(user):
    reader = csv.reader(open(settings.BASE_DIR+'/prepop/sorts.csv', 'U'), delimiter=',', quotechar='"')
    i = 0
    for row in reader:
        i+=1
        if i == 1:
            continue
       
        descr = row[0]
        icon = row[1]

        tset = Tag.objects.filter(descr=descr)
        if tset.count() > 0:
            continue
             
        t = Tag(descr=descr,creator=user,icon=icon)
        t.save()
Exemple #37
0
def new(request, slug):
    """Create new tie for reading."""
    reading = get_object_or_404(Reading, slug=slug)
    if request.method == "POST":
        # If reading has 5 tags, do not add or create
        if len(reading.tie_set.all()) >= 5:
            messages.warning(request, "Each read can only have 5 tags")
        else:
            try:
                # If user already added a tag
                user = reading.tie_set.get(user=request.user)
                messages.error(request, "You can only add 1 tag per read")
            except ObjectDoesNotExist:
                name = request.POST.get("tag_name")
                name = name.lower()
                pattern = only_letters()
                # If name contains only letters
                if re.search(pattern, name):
                    # If name does not contain any banned words
                    blacklist = banned_words()
                    if not re.search(blacklist, name):
                        try:
                            # If tag exists, get tag
                            tag = Tag.objects.get(name=name)
                        except ObjectDoesNotExist:
                            # If tag does not exist, create tag
                            tag = Tag(name=name, user=request.user)
                            tag.slug = slugify(tag.name)
                            tag.save()
                        try:
                            # Check to see if tie exists
                            tie = reading.tie_set.get(tag=tag)
                        except ObjectDoesNotExist:
                            # If tie does not exist, create it
                            tie = request.user.tie_set.create(reading=reading, tag=tag)
                            # add rep
                            add_rep(request, t=tie)
                            # create notification
                            notify(tie=tie)
                            d = {"reading": reading}
                            tags = loader.get_template("tags/tags.html")
                            context = RequestContext(request, d)
                            data = {"ties": tags.render(context)}
                            return HttpResponse(json.dumps(data), mimetype="application/json")
    return HttpResponseRedirect(reverse("readings.views.detail", args=[reading.slug]))
Exemple #38
0
def add_dummy_users():
    def add_user(username):
        user = User.objects.create(username=username)
        user.save()
        return user

    staff = add_user('staff')
    staff.is_staff = True
    student1 = add_user('student1')
    student2 = add_user('student2')
    tag1 = Tag(type_id=7, name="tag student")
    tag1.save()
    tag2 = Tag(type_id=7, name="tag nobody")
    tag2.save()
    student1.tag_set.add(tag1)
    student2.tag_set.add(tag2)
    staff.tag_set.add(tag2)
    for u in [staff, student1, student2]:
        u.save()
Exemple #39
0
def run():
    author1 = Author(name="J. K. Rowling", birth_date="1965-07-31", author_pic="authors/2020/05/jkrowling.jpg", bio="Es una escritora, productora de cine y guionista británica, conocida por ser la autora de la serie de libros Harry Potter, que han superado los quinientos millones de ejemplares vendidos.")
    author2 = Author(name="Rick Riordan", birth_date='1964-06-05', author_pic="authors/2020/06/rriordan.jpg", bio="Richard Russell Riordan es un escritor estadounidense. Es más conocido por ser el autor de la saga Percy Jackson y los dioses del Olimpo.")
    author3 = Author(name="Suzanne Collins", birth_date='1962-08-10', author_pic="authors/2020/06/scollins.jpg", bio="Escritora estadounidense, sus revolucionarias novelas juveniles, Los Juegos del Hambre, En llamas y Sinsajo fueron superventas de The New York Times. Recibieron reconocimiento en todo el mundo.")
    publisher1 = Publisher(name="Bloomsbury", city="Londres", country="Reino Unido", about="Bloomsbury Publishing es una casa editorial independiente, asentada en Londres en el Reino Unido, conocida por sus novelas literarias. Fue nombrada \"editorial del año\" en 1999 y 2000.", website="www.bloomsbury.com", publisher_pic="publishers/2020/06/bblogo.png")
    publisher2 = Publisher(name="Salamandra", city="Barcelona", country="España", about="Ediciones Salamandra, también llamada simplemente Salamandra, es una editorial fundada en 1989 en Barcelona como filial española de la editorial argentina Emecé Editores.", website="www.megustaleer.com/editoriales/salamandra/SD/", publisher_pic="publishers/2020/06/sallogo.jpg")
    publisher3 = Publisher(name="Scholastic", city="Nueva York", country="Estados Unidos", about="Scholastic es una empresa editora de libros estadounidense conocida por publicar materiales educativos para escuelas, además de libros comerciales.", website="www.scholastic.com", publisher_pic="publishers/2020/06/schlogo.png")
    tag1 = Tag(title="Fantasy")
    tag2 = Tag(title="Mystery")
    tag3 = Tag(title="Novel")
    tag4 = Tag(title="Adventure")
    book1 = Book(title="Harry Potter y la Piedra Filosofal", author=author1, pub_date="1997-06-26", publisher=publisher1, description="Harry Potter crece en la casa de sus tíos, los Dursley, quienes le ocultan su verdadera historia familiar; al cumplir Harry once años de edad, empiezan a llegarle cartas de remitente desconocido, que van aumentando en número a medida que sus tíos no dejan que las abra. Las mismas traen la noticia de que el niño ha sido admitido en el Colegio Hogwarts de Magia y Hechicería, ya que, al igual que sus padres, tiene poderes mágicos. \\n\\nSe descubre entonces que los Potter no murieron en un accidente de coche como se le había dicho a Harry, sino que habían sido asesinados en la noche de Halloween por un hechicero tenebroso conocido como lord Voldemort, quien había aterrorizado a la comunidad mágica británica años atrás. Sin embargo, algo ocurrió esa noche: Voldemort consiguió matar al matrimonio Potter pero no pudo asesinar al bebé, perdió su cuerpo y le dejó al niño una cicatriz permanente en forma de rayo en su frente. \\n\\nRubeus Hagrid aparece para llevarse a Harry una noche, cuando los Dursley intentan impedir que parta rumbo al colegio. Más tarde, el hombre ayuda a Harry a comprar sus materiales escolares en el callejón Diagon y allí éste descubre que es famoso entre los magos por haber sobrevivido al intento de homicidio. Posteriormente, el muchacho toma el tren que lo lleva a Hogwarts y allí conoce a Ron Weasley, un chico pelirrojo hijo de magos, y a Hermione Granger, una jovencita de origen muggle con altas aspiraciones académicas. Los tres se hacen amigos y más tarde, durante su año escolar, se ven envueltos en una serie de episodios relacionados con un objeto escondido en las profundidades del edificio: la piedra filosofal, un artefacto con el poder de transmutar los metales en oro y producir el elixir de la vida eterna. Diferentes hechos les hacen suponer que uno de sus profesores, Severus Snape, desea conseguir la piedra para entregársela a Voldemort, con quien el docente estaría confabulado.", price="199.99", cover_pic="covers/2020/05/hpylpf.jpg", book_content="contents/hpylpf.pdf")
    book2 = Book(title="Harry Potter y la Cámara Secreta", author=author1, pub_date="1998-07-08", publisher=publisher1, description="Tras derrotar una vez más a lord Voldemort, su siniestro enemigo  en Harry  Potter y la piedra filosofal, Harry espera impaciente en casa de sus insoportables tíos el inicio del segundo curso del Colegio Hogwarts de Magia y hechicería. Sin embargo, la espera dura poco, pues un elfo aparece en su habitación y le advierte que una amenaza mortal se cierne sobre la escuela. Así pues, Harry no se lo piensa dos veces y, acompañado de  Ron, su mejor amigo, se dirige a Hogwarts en un coche volador. Pero ¿puede un aprendiz de mago defender la escuela de los malvados que pretenden destruirla? Sin saber que alguien ha abierto la Cámara de los Secretos, dejando escapar una serie de monstruos peligrosos, Harry y sus amigos Ron y Hermione tendrán que enfrentarse con arañas gigantes, serpientes encantadas, fantasmas enfurecidos y, sobre todo, con la mismísima reencarnación de su más temible adversario.", price="199.99", cover_pic="covers/2020/05/hpylca.jpg", book_content="contents/hpylca.pdf")
    book3 = Book(title="Harry Potter y el Prisionero de Azkaban", author=author1, pub_date="1999-07-08", publisher=publisher1, description="Por la cicatriz que lleva en la frente, sabemos que Harry Potter no es un niño como los demás, sino el héroe que venció a lord Voldemort, el mago más temible y maligno de todos los tiempos y culpable de la muerte de los  padres  de  Harry.  Desde  entonces,  Harry  no  tiene  más  remedio  que  vivir  con  sus  pesados  tíos  y  su  insoportable  primo  Dudley,  todos  ellos  muggles, o sea, personas no magas, que desprecian a su sobrino debido a sus poderes. Igual que en las dos primeras partes de la serie —La piedra filosofal y La cámara  secreta—  Harry  aguarda  con  impaciencia  el  inicio  del  tercer  curso  en  el  Colegio  Hogwarts  de  Magia  y  Hechicería.  Tras  haber  cumplido los trece años, solo y lejos de sus amigos de Hogwarts, Harry se pelea con su bigotuda tía Marge, a la que convierte en globo, y debe huir en un autobús mágico. Mientras tanto, de la prisión de Azkaban se ha  escapado  un  terrible  villano,  Sirius  Black,  un  asesino  en  serie  con  poderes  mágicos  que  fue  cómplice  de  lord  Voldemort  y  que  parece  dispuesto  a  eliminar  a  Harry  del  mapa.  Y  por  si  esto  fuera  poco,  Harry  deberá enfrentarse también a unos terribles monstruos, los dementores, seres  abominables  capaces  de  robarles  la  felicidad  a  los  magos  y  de  borrar  todo  recuerdo  hermoso  de  aquellos  que  osan  mirarlos.  Lo  que  ninguno de estos malvados personajes sabe es que Harry, con la ayuda de sus fieles amigos Ron y Hermione, es capaz de todo y mucho más.", price="199.99", cover_pic="covers/2020/05/hpyepda.jpg", book_content="contents/hpyepda.pdf")
    book4 = Book(title="Harry Potter y el Cáliz de Fuego", author=author1, pub_date='2000-07-08', publisher=publisher1, description="Tras otro abominable verano con los Dursley, Harry se dispone a  iniciar el cuarto curso en Hogwarts, la famosa escuela de magia y  hechicería. A sus catorce años, a Harry le gustaría ser un joven  mago como los demás y dedicarse a aprender nuevos sortilegios, encontrarse con sus amigos Ron y Hermione y asistir con ellos a los Mundiales de quidditch. Sin embargo, al llegar al colegio le espera una gran sorpresa que lo obligará a  enfrentarse a los desafíos más temibles de toda su vida. Si logra superarlos, habrá demostrado que ya no es un niño y que está preparado para vivir las nuevas y emocionantes experiencias que el futuro le depara.",  price="199.99", cover_pic="covers/2020/06/hpyecdf.jpg", book_content="contents/hpyecdf.pdf")
    book5 = Book(title="Percy Jackson y el Ladrón del Rayo", author=author2, pub_date='2005-06-28', publisher=publisher2, description="¿Qué pasaría si un día descubrieras que, en realidad, eres hijo de un dios griego que debe cumplir una misión secreta? Pues eso es lo que le sucede a Percy Jackson, que a partir de ese momento se dispone a vivir los acontecimientos más emocionantes de su vida. Expulsado de seis colegios, Percy padece dislexia y dificultades para concentrarse, o al menos ésa es la versión oficial. Objeto de burlas por inventarse historias fantásticas, ni siquiera él mismo acaba de creérselas hasta el día que los dioses del Olimpo le revelan la verdad: Percy es nada menos que un semidiós, es decir, el hijo de un dios y una mortal. Y como tal ha de descubrir quién ha robado el rayo de Zeus y así evitar que estalle una guerra entre los dioses. Para cumplir la misión contará con la ayuda de sus amigos Grover, un joven sátiro, y Annabeth, hija de Atenea. El ladrón del rayo da comienzo a la apasionante serie Percy Jackson y los Dioses del Olimpo, un mundo secreto que los antiguos dioses griegos han recreado a nuestro alrededor en pleno siglo XXI.", price="159.99", cover_pic="covers/2020/06/pjyeldr.jpg", book_content="contents/pjyeldr.pdf")
    book6 = Book(title="Percy Jackson y el Mar de los Monstruos", author=author2, pub_date='2006-04-01', publisher=publisher2, description="Desde que sabe que es hijo de un dios del Olimpo, Percy Jackson espera que el destino le depare continuas aventuras. Y sus expectativas se cumplen con creces. Aunque el nuevo curso en la Escuela Meriwether transcurre con inusual nor- malidad, un simple partido de balón prisionero acaba en batalla campal contra una banda de feroces gigantes. A partir de ahí los acontecimientos se precipitan: el perímetro mágico que protege el Campamento Mestizo es destruido por un misterioso enemigo y la única seguridad con que contaban los semidioses desaparece. Así, para impedir este daño irreparable, Percy y sus amigos inician la travesía del temible Mar de los Monstruos en busca de lo único que puede salvar el campamento: el Vellocino de Oro.", price="159.99", cover_pic="covers/2020/06/pjyemdlm.jpg", book_content="contents/pjyemdlm.pdf")
    book7 = Book(title="Percy Jackson y la Maldición del Titán", author=author2, pub_date="2007-04-15", publisher=publisher2, description="Ante la llamada de socorro de su amigo el sátiro Grover, Percy acude inmediatamente en su auxilio. Y aunque va acompañado de Annabeth y Thalia, las dos semidiosas que son sus aliadas, ninguno imagina la sorpresa  que  los  aguarda:  una  terrible  mantícora  pretende secuestrarlos  y  llevarlos  ante  el  general  enviado  por  Cronos,  el diabólico señor de los titanes. Sin embargo, gracias a la ayuda de las cazadoras de Artemisa, Percy y sus aliadas logran escapar y volver al campamento  mestizo.  Una  vez  allí,  emprenderán  la  búsqueda  del monstruo que puede provocar la destrucción del Olimpo, a pesar de que, según la profecía del Oráculo, sólo uno de ellos logrará resistir la maldición del titán.", price="159.99", cover_pic="covers/2020/06/pjylmdt.jpg", book_content="contents/pjylmdt.pdf")
    book8 = Book(title="The Hunger Games", author=author3, pub_date="2008-09-14", publisher=publisher3, description="Ganar significa fama y fortuna. Perder significa muerte segura. Los juegos del hambre han comenzado. . . . En las ruinas de un lugar una vez conocido como América del Norte se encuentra la nación de Panem, un brillante Capitolio rodeado de doce distritos periféricos. El Capitolio es duro y cruel y mantiene a los distritos en línea al obligarlos a enviar a un niño y una niña entre las edades de doce y dieciocho años a participar en los Juegos Anuales del Hambre, una pelea a muerte en la televisión en vivo.Katniss Everdeen, de 16 años, lo considera una sentencia de muerte cuando se adelanta para ocupar el lugar de su hermana en los Juegos. Pero Katniss ha estado cerca de la muerte antes, y la supervivencia, para ella, es una segunda naturaleza. Sin querer realmente, se convierte en una contendiente. Pero si quiere ganar, tendrá que comenzar a tomar decisiones que sopesen la supervivencia contra la humanidad y la vida contra el amor.", price="149.99", cover_pic="covers/2020/06/thg.jpg", book_content="contents/thg.pdf")
    book9 = Book(title="Catching Fire", author=author3, pub_date="2009-09-01", publisher=publisher3, description="Suzanne Collins continúa la increíble historia de Katniss Everdeen en la fenomenal trilogía de los Juegos del Hambre. Contra viento y marea, Katniss Everdeen ha ganado los Juegos del Hambre anuales con su colega tributo del distrito, Peeta Mellark. Pero fue una victoria ganada por el desafío del Capitolio y sus duras reglas. Katniss y Peeta deberían estar felices. Después de todo, acaban de ganar para ellos y sus familias una vida segura y abundante. Pero hay rumores de rebelión entre los sujetos, y Katniss y Peeta, para su horror, son los rostros de esa rebelión. El capitolio está enojado. El Capitolio quiere venganza.", price="149.99", cover_pic="covers/2020/06/thgcf.jpg", book_content="contents/thgcf.pdf")
    book10 = Book(title="Mockingjay", author=author3, pub_date="2010-08-24", publisher=publisher3, description="Katniss Everdeen, niña en llamas, ha sobrevivido, a pesar de que su casa ha sido destruida. Hay rebeldes. Hay nuevos líderes. Se está desarrollando una revolución. El Distrito 13 salió de las sombras y está planeando derrocar al Capitolio. Aunque ha sido parte de la revolución durante mucho tiempo, Katniss no lo ha sabido. Ahora parece que todos han intervenido en los planes cuidadosamente elaborados menos ella. El éxito de la rebelión depende de la voluntad de Katniss de ser un peón, de aceptar la responsabilidad de innumerables vidas y de cambiar el curso del futuro de Panem. Para hacer esto, debe dejar de lado sus sentimientos de ira y desconfianza. Ella debe convertirse en el Sinsajo de los rebeldes, sin importar el costo.", price="149.99", cover_pic="covers/2020/06/thgmj.jpg", book_content="contents/thgmj.pdf")
    author1.save()
    author2.save()
    author3.save()
    publisher1.save()
    publisher2.save()
    publisher3.save()
    tag1.save()
    tag2.save()
    tag3.save()
    tag4.save()
    book1.save()
    book2.save()
    book3.save()
    book4.save()
    book5.save()
    book6.save()
    book7.save()
    book8.save()
    book9.save()
    book10.save()
    book1.tags.set([tag1])
    book2.tags.set([tag1, tag2])
    book3.tags.set([tag1])
    book4.tags.set([tag1, tag2])
    book5.tags.set([tag1, tag4])
    book6.tags.set([tag1, tag4])
    book7.tags.set([tag1, tag4])
    book8.tags.set([tag3])
    book9.tags.set([tag3])
    book10.tags.set([tag3])
Exemple #40
0
def tag_names_to_ids(tag_names, add=False):
    """
    Search tags by their names. If add is set to True and a name is not found,
    a new tag is added. Otherwise, it is ignored.
    Does not preserve order!
    """
    if add:
        tag_names = split_tags(tag_names)
        available = Tag.objects.filter(name__in=tag_names).values_list("id", "name")
        lowercase = {name.lower(): tag_id for tag_id, name in available}
        result = []
        for name in tag_names:
            if name.lower() in lowercase:
                result.append(lowercase[name.lower()])
            else:
                tag = Tag(name=name)
                tag.save()
                result.append(tag.id)
        return result
    else:
        return Tag.objects.filter(name__in=split_tags(tag_names)).values_list("id", flat=True)
Exemple #41
0
    def test_insert_listing_type_teach_success(self):
        new_listing = Listings()
        new_listing.title = 'TEACH Listing test'
        new_listing.price = 1
        new_listing.listing_type = 'TEACH'
        new_listing.user_id = 929
        new_listing.subcategories_id = 2
        new_listing.description = 'Listing Type Teach for testing'
        new_listing.created = datetime.datetime.now()
        new_listing.updated = datetime.datetime.now()
        new_listing.save()

        new_tag = Tag(name='teach_tag')
        try:
            new_tag.save()
            new_tag.listings_set.add(new_listing)
            update_profile_tags(new_tag, 929, new_listing)
        except IntegrityError:
            existing_tag = Tag.objects.get(name='offer_tag')
            existing_tag.listings_set.add(new_listing)
            update_profile_tags(existing_tag, 929, new_listing)
Exemple #42
0
def tag(request):
    """ Tags a thing using an AddTagForm
    
    Returns a JSON response with an "obj" and "key" porperty. "obj" is the object that was tagged, while "type" is it's
    type. If there is an error, a JSON object with an "error" key is returned instead.
    """
    f = AddTagForm(request.POST)
    
    if not f.is_valid():
        return HttpResponse('{"error":"Form invalid"}', content_type="application/json", status=422)
    
    taggable = tags.lookup_taggable(f.cleaned_data["type"])
    
    if taggable is None:
        return HttpResponse('{"error":"Taggable type invalid"}', content_type="application/json", status=422)
    
    try:
        obj = taggable.objects.get(owner=request.user, pk=f.cleaned_data["pk"])
    except taggable.DoesNotExist:
        return HttpResponse('{"error":"Taggable not found"}', content_type="application/json", status=422)
    
    tag_names = map(lambda x: x.strip(), f.cleaned_data["name"].split(","))
    
    for n in tag_names:
        if not n:
            continue
        
        try:
            tag = Tag.objects.get(owner=request.user, slug=makeslug(n))
        except Tag.DoesNotExist:
            tag = Tag(owner=request.user, name=n, colour=f.instance.colour)
            tag.save()
        
        obj.tag(tag)
    
    return HttpResponse(
        '{{"obj":{}, "type":"{}"}}'.format(obj.to_json(), f.cleaned_data["type"]),
        content_type="application/json"
    )
    def test_fix_tags(self):
        """
        Test the `fix_tags` utility function.
        """
        from pages.models import Page
        from tags.tag_utils import fix_tags

        #########################
        # Create some test regions
        #########################
       
        sf = Region(full_name="San Francisco Test", slug='sftest')
        sf.save()

        mission = Region(full_name="Mission", slug="mission")
        mission.save()

        #########################
        # Create some test tags
        #########################

        park = Tag(name='park', region=sf)
        park.save()

        fun = Tag(name='fun', region=sf)
        fun.save()

        #########################
        # Add the tags to a test page
        #########################

        page = Page(name="Duboce Park", content="<p>Park.</p>", region=sf)
        page.save()

        pts = PageTagSet(
            page=page,
            region=sf
        )
        pts.save()
        pts.tags.add(park)
        pts.tags.add(fun)
        pts.save()

        # Now do something odd and make one of the referenced `Tag`s point
        # to a different region than the PageTagSet.
        fun.region = mission
        fun.save()

        self.assertTrue(pts.tags.filter(region=mission).exists())

        # Then attempt a fix:
        fix_tags(sf, PageTagSet.objects.filter(id=pts.id))

        pts = PageTagSet.objects.get(page=page, region=sf)
        self.assertFalse(pts.tags.filter(region=mission).exists())

        # Check that this is fixed in historical versions as well
        for pts_h in pts.versions.all():
            self.assertFalse(pts_h.tags.filter(region=mission).exists())
Exemple #44
0
def download_problem(id):
    url = archive_url + "/?q=node/" + id
    print(url)
    r = requests.get(url, cookies=js_cookie)
    soup = BeautifulSoup(r.text, 'html.parser')

    problem_data = fetch_statement(soup, 'node-' + id)
    statement = problem_data[0]
    solution = problem_data[1]

    problem = Problem(statement=statement, solution=solution)
    problem.save()

    for tag_name in fetch_tags(soup):
        if Tag.objects.filter(name=tag_name):
            tag = Tag.objects.get(name=tag_name)
        else:
            tag = Tag(name=tag_name, type_id=tag_types.index('Źródło'))
            tag.save()

        problem.tag_set.add(tag)

    problem.save()
Exemple #45
0
def add_profile_tag(request):
    if request.method == 'POST':
        tag_form = FormProfileTag(request.POST)
        if tag_form.is_valid():
            if request.POST.get('tag'):
                tags_to_add = request.POST.get('tag').split(',')
                for tag in tags_to_add:
                    new_tag = Tag(name=tag.lower())
                    try:
                        new_tag.save()
                        update_profile_tags(new_tag, request.profile)
                    except IntegrityError as e:
                        existing_tag = Tag.objects.get(name=tag)
                        update_profile_tags(existing_tag, request.profile)
        return django_render(request, 'profile_tag_management.html',
                             {'tag_form': tag_form})
    else:
        profile_tags = ProfilePageTag.objects.filter(
            profile_id=request.profile.id)
        tag_form = FormProfileTag()
        return django_render(request, 'profile_tag_management.html', {
            'tag_form': tag_form,
            'profile_tags': profile_tags
        })
Exemple #46
0
 def test_tags_autogenerate_slugs(self):
     t = Tag(title='title with spaces')
     t.save()
     self.assertEqual(t.title, 'title-with-spaces')
     # saving the tag twice should not change its title
     t.save()
     self.assertEqual(t.title, 'title-with-spaces')
     # A second tag with the same title should return a different slug
     t2 = Tag(title='title with spaces')
     t2.save()
     self.assertEqual(t2.title, 'title-with-spaces-1')
     # Since we're using a different char to avoid collisions, we can also save tags with numbers
     G(Tag, title='Tag 4')
     G(Tag, title='Tag', n=4)
     G(Tag, title='Tag 7')
     G(Tag, title='Tag', n=4)
     self.assertEqual(Tag.objects.latest('pk').title, 'tag-10')
Exemple #47
0
    def test_page_rename(self):
        p = Page()
        p.content = "<p>The page content.</p>"
        p.name = "Original page"
        p.save()

        p.rename_to("New page")

        # Renamed-to page should exist.
        new_p = Page.objects.get(name="New page")
        # new_p should have the same content.
        self.assertEqual(new_p.content, p.content)

        # "Original page" should no longer exist.
        pgs = Page.objects.filter(name="Original page")
        self.assertEqual(len(pgs), 0)
        # and a redirect from "original page" to "New page" should exist.
        Redirect.objects.filter(source="original page", destination=new_p)

        ###########################################################
        # Renaming to a page that already exists should raise an
        # exception and not affect the original page.
        ###########################################################
        p = Page()
        p.content = "<p>Hello, world.</p>"
        p.name = "Page A"
        p.save()

        self.assertRaises(exceptions.PageExistsError, p.rename_to, "New page")
        # p should be unaffected.  No redirect should be created.
        p = Page.objects.get(name="Page A")
        self.assertEqual(p.content, "<p>Hello, world.</p>")
        self.assertEqual(len(Redirect.objects.filter(source="page a")), 0)

        ###########################################################
        # Renaming should carry along files and FK'ed items that
        # point to it.
        ###########################################################
        p = Page()
        p.content = "<p>A page with files and a map.</p>"
        p.name = "Page With FKs"
        p.save()
        # Create a file that points at the page.
        pf = PageFile(file=ContentFile("foo"), name="file.txt", slug=p.slug)
        pf.save()
        # Create a redirect that points at the page.
        redirect = Redirect(source="foobar", destination=p)
        redirect.save()
        # Create a map that points at the page.
        points = GEOSGeometry("""MULTIPOINT (-122.4378964233400069 37.7971758820830033, -122.3929211425700032 37.7688207875790027, -122.3908612060599950 37.7883584775320003, -122.4056240844700056 37.8013807351830025, -122.4148937988299934 37.8002956347170027, -122.4183270263600036 37.8051784612779969)""")
        map = MapData(points=points, page=p)
        map.save()
        # Add tags to page
        tagset = PageTagSet(page=p)
        tagset.save()
        tag = Tag(name="tag1")
        tag.save()
        tagset.tags.add(tag)

        p.rename_to("New Page With FKs")

        new_p = Page.objects.get(name="New Page With FKs")
        self.assertEqual(len(MapData.objects.filter(page=new_p)), 1)
        self.assertEqual(len(new_p.pagetagset.tags.all()), 1)
        # Two redirects: one we created explicitly and one that was
        # created during rename_to()
        self.assertEqual(len(Redirect.objects.filter(destination=new_p)), 2)
        self.assertEqual(len(PageFile.objects.filter(slug=new_p.slug)), 1)

        # Renaming should keep slugs pointed at old page /and/ copy
        # them to the new page.
        self.assertEqual(len(PageFile.objects.filter(slug=p.slug)), 1)

        ###########################################################
        # Renaming with multiple files.
        ###########################################################
        p = Page()
        p.content = "<p>A new page with multiple files.</p>"
        p.name = "Page with multiple files"
        p.save()
        # Create a file that points at the page.
        pf = PageFile(file=ContentFile("foo"), name="file.txt", slug=p.slug)
        pf.save()
        pf = PageFile(file=ContentFile("foo2"), name="file2.txt", slug=p.slug)
        pf.save()
        pf = PageFile(file=ContentFile("foo3"), name="file3.txt", slug=p.slug)
        pf.save()
        p.rename_to("A page with multiple files 2")

        p = Page.objects.get(name="A page with multiple files 2")
        self.assertEqual(len(PageFile.objects.filter(slug=p.slug)), 3)

        ###########################################################
        # Reverting a renamed page should be possible and should
        # restore files and FK'ed items that were pointed at the
        # original page.  The renamed-to page should still exist
        # after the revert and should still have its own files and
        # FK'ed items pointed at it.
        ###########################################################
        p = Page(name="Page With FKs", slug="page with fks")
        # get the version right before it was deleted
        v_before_deleted = len(p.versions.all()) - 1
        p_h = p.versions.as_of(version=v_before_deleted)
        p_h.revert_to()
        p = Page.objects.get(name="Page With FKs")
        self.assertEqual(len(MapData.objects.filter(page=p)), 1)
        self.assertEqual(len(PageFile.objects.filter(slug=p.slug)), 1)

        p2 = Page.objects.get(name="New Page With FKs")
        self.assertEqual(len(MapData.objects.filter(page=p2)), 1)
        self.assertEqual(len(PageFile.objects.filter(slug=p2.slug)), 1)

        self.assertEqual(len(Redirect.objects.filter(destination=p2)), 1)

        ###########################################################
        # Renaming a page and then renaming it back.
        ###########################################################
        # 1. Simple case
        p = Page(name="Page X", content="<p>Foobar</p>")
        p.save()
        p.rename_to("Page Y")
        self.assertEqual(len(Page.objects.filter(name="Page X")), 0)
        self.assertEqual(len(Page.objects.filter(name="Page Y")), 1)

        p_new = Page.objects.get(name="Page Y")
        p_new.rename_to("Page X")
        self.assertEqual(len(Page.objects.filter(name="Page X")), 1)
        self.assertEqual(len(Page.objects.filter(name="Page Y")), 0)

        # 2. If we have FKs pointed at the page this shouldn't be
        # totally f****d.
        p = Page(name="Page X2", content="<p>Foo X</p>")
        p.save()
        points = GEOSGeometry("""MULTIPOINT (-122.4378964233400069 37.7971758820830033, -122.3929211425700032 37.7688207875790027, -122.3908612060599950 37.7883584775320003, -122.4056240844700056 37.8013807351830025, -122.4148937988299934 37.8002956347170027, -122.4183270263600036 37.8051784612779969)""")
        map = MapData(points=points, page=p)
        map.save()
        # Create a file that points at the page.
        pf = PageFile(file=ContentFile("foooo"), name="file_foo.txt", slug=p.slug)
        pf.save()

        p.rename_to("Page Y2")
        p_new = Page.objects.get(name="Page Y2")
        # FK points at the page we renamed to.
        self.assertEqual(len(MapData.objects.filter(page=p_new)), 1)
        self.assertEqual(len(PageFile.objects.filter(slug=p_new.slug)), 1)

        # Now rename it back.
        p_new.rename_to("Page X2")
        p = Page.objects.get(name="Page X2")
        # After rename-back-to, FK points to the renamed-back-to page.
        self.assertEqual(len(MapData.objects.filter(page=p)), 1)
        self.assertEqual(len(PageFile.objects.filter(slug=p.slug)), 1)

        ###########################################################
        # Renaming a page but keeping the same slug
        ###########################################################
        p = Page(name="Foo A", content="<p>Foo A</p>")
        p.save()
        p.rename_to("FOO A")

        # Name has changed.
        self.assertEqual(len(Page.objects.filter(name="FOO A")), 1)
        # Has the same history, with a new entry for the name change.
        p = Page.objects.get(name="FOO A")
        p1, p0 = p.versions.all()
        self.assertEqual(p1.name, 'FOO A')
        self.assertEqual(p0.name, 'Foo A')
        self.assertEqual(p0.content, p1.content)

        ###########################################################
        # Renaming a page twice (A -> B -> C) and then revert A to
        # an existing state.
        ###########################################################
        p = Page(name="Bar A", content="<p>Bar A</p>")
        p.save()
        p.rename_to("Bar B")
        p = Page.objects.get(name="Bar B")
        p.rename_to("Bar C")

        p = Page(name="Bar A", slug="bar a")
        p_h = p.versions.as_of(version=1)
        p_h.revert_to()

        ###########################################################
        # Renaming a page back and forth and reverting.
        ###########################################################
        p = Page(name="Zoo A", content="<p>Zoo A</p>")
        p.save()
        p.rename_to("Zoo B")
        p = Page.objects.get(name="Zoo B")
        p.rename_to("Zoo A")
        p = Page.objects.get(name="Zoo A")
        p.rename_to("Zoo B")

        p = Page(name="Zoo A", slug="zoo a")
        p_h = p.versions.as_of(version=1)
        p_h.revert_to()

        ###########################################################
        # page A, rename to B, then create new A, rename B to C,
        # rename C to B, then revert C to first version
        ###########################################################
        p = Page(name="Mike A", content="<p>A</p>")
        p.save()
        p.rename_to("Mike B")
        new_a = Page(name="Mike A", content="<p>A new</p>")
        new_a.save()
        p = Page.objects.get(name="Mike B")
        p.rename_to("Mike C")
        p = Page.objects.get(name="Mike C")
        p.rename_to("Mike B")

        p_c = Page(name="Mike C", slug="mike c")
        p_h = p_c.versions.as_of(version=1)
        p_h.revert_to()
Exemple #48
0
def edit_listing(request, listing_id):
    listing_form = ListingsForms()
    listing = Listings.objects.get(id=listing_id, user_id=request.user.id)

    if not request.user.id == listing.user_id:
        messages.add_message(request, messages.ERROR,
                             'You are not allowed to do this')
        return HttpResponseRedirect(
            reverse('listing_management:manage_listings'))

    if not listing:
        messages.add_message(request, messages.ERROR,
                             'No listing has been found with this id')
        return HttpResponseRedirect(
            reverse('listing_management:manage_listings'))
    if request.method == 'POST':
        form = ListingsForms(request.POST, request.FILES)
        if form.is_valid():
            listing.listing_type = form.cleaned_data['listing_type']
            listing.title = form.cleaned_data['title']
            listing.description = form.cleaned_data['description']
            listing.price = form.cleaned_data['price']
            listing.subcategories = form.cleaned_data['subcategories']
            if form.cleaned_data["photo"]:
                listing.photo = form.cleaned_data['photo']
            elif listing.photo:
                listing.photo = listing.photo
            else:
                listing.photo = ""
            listing.save()

            tags_list = form.cleaned_data['tag'].split(',')
            if tags_list and tags_list[0] == u'':
                tags_to_delete = listing.tag.all()
                if tags_to_delete:
                    for each_tag_delete in tags_to_delete:
                        Tag.objects.filter(id=each_tag_delete.id).delete()
                    messages.add_message(request, messages.SUCCESS,
                                         'Listing edited with success.')
                    return HttpResponseRedirect(
                        reverse('listing_management:manage_listings'))
            else:
                listing.tag.all().delete()
                for tag in tags_list:
                    new_tag = Tag(name=tag)
                    try:
                        new_tag.save()
                        new_tag.listings_set.add(listing)
                    except IntegrityError as e:
                        existing_tag = Tag.objects.get(name=tag)
                        existing_tag.listings_set.add(listing)
                messages.add_message(request, messages.SUCCESS,
                                     'Listing edited with success.')
                return HttpResponseRedirect(
                    reverse('listing_management:manage_listings'))
        else:
            messages.add_message(
                request, messages.ERROR,
                'An error has occurred, please try again later.')
            return render(request, 'listing_management/manage_listings.html', {
                'form': form,
                'listings_form': listing
            })
    else:
        tags_to_template = ''
        tags = listing.tag.all().values('name')
        if tags:
            for each_tag in tags:
                tags_to_template = tags_to_template + each_tag['name'].encode(
                ) + ','
        form = ListingsForms(instance=listing,
                             initial={
                                 'listing_type': listing.listing_type,
                                 'title': listing.title,
                                 'description': listing.description,
                                 'price': listing.price,
                                 'subcategories': listing.subcategories,
                                 'tag': tags_to_template
                             })
        return render(request, 'listing_management/edit_listing.html', {
            'form': form,
            'listing_id': listing_id
        })

    messages.add_message(request, messages.ERROR, form.errors)
    form = ListingsForms(
        initial={
            'listing_type': listing.listing_type,
            'title': listing.title,
            'description': listing.description,
            'price': listing.price,
            'subcategories': listing.subcategories,
            'photo': listing.photo
        })
    return render(request, 'listing_management/edit_listing.html', {
        'form': form,
        'listings_form': listing
    })
Exemple #49
0
def initialize_page(request):
  tags = {}
  errors = {}
  user = request.user
  count_tags = False
  highlights = 0

  if request.POST:
    url = process_url(request.POST.get('url'))
    favIconUrl = request.POST.get('favIconUrl')
    domain_name = request.POST.get('domain_name')
    title = request.POST.get('title')
    add_usertags = request.POST.get('add_usertags')

    domain = '{uri.netloc}'.format(uri=urlparse(url))
    errors['add_page'] = []

    title = url if title == "" else title

    # Add domain
    d, d_created = Domain.objects.get_or_create(url=domain)
    if domain_name is not None:
      d.name = domain_name
    d.save()

    # Add page
    try: 
      p = Page.objects.get(url=url)
      p.title = title
      p.save()
    except:
      if len(Page.objects.filter(url=url)) == 0:
        p = Page(url=url, domain=d)
        p.title = title
        p.save()
        count_tags = True
      else:
        errors['add_page'].append("More than one page exists")

    if len(errors['add_page']) == 0:
      highlights = len(Highlight.objects.filter(page__url=url))
      vts = Tag.objects.filter(page__url=url, highlight=None)
      if len(vts) == 0:
        count_tags = True
      
      for vt in vts:
        vt_info = {
          'user_voted': False,
          'name': vt.common_tag.name,
          'color': vt.common_tag.color,
          'description': vt.common_tag.description,
          'is_private': vt.is_private,
          'vote_count': len(Vote.objects.filter(tag=vt)),
        }

        tags[vt.common_tag.name] = vt_info

        # Add tag to user
        if add_usertags == "true":
          uti, created = UserTagInfo.objects.get_or_create(user=user, page=p, tag=vt)
          uti.save()

      if count_tags:
        errors['get_tc'] = []
        try:
          tc = TagCollection.objects.get(subscribers=user)
          trie = json.loads(tc.trie_blob)
        except: 
          errors['get_tc'].append('User not subscribed')

        if len(errors['get_tc']) == 0:
          # Count value tags for page
          r = requests.get(url, verify=False)
          emotes = countEmote(r.text, trie)
          ts = [(e, emotes[e]) for e in emotes if e]
          sorted(ts, key=lambda x: x[1], reverse=True)

          errors['add_valuetags'] = []

          if len(ts) == 0:
            errors['add_valuetags'].append('No tags counted')

          count = 3
          for tag in ts:
            if tag[1] > 2 and count > 0:
              count -= 1
              name = tag[0]

              # Add tag to page
              try:
                vt = Tag.objects.get(page__url=url, common_tag__name=name, highlight=None)
              except Tag.DoesNotExist:
                try:
                  common_tag = CommonTag.objects.get(name=name)
                  vt = Tag(page=p, common_tag=common_tag, word_count=tag[1])
                  vt.save()

                  # Add tag to user
                  if add_usertags == "true":
                    uti, created = UserTagInfo.objects.get_or_create(user=user, page=p, tag=vt)
                    uti.save()
                except CommonTag.DoesNotExist:
                  errors['add_valuetags'].append("Could not get base tag")

              if len(errors['add_valuetags']) == 0:
                tags[name] = {
                  'name': name,
                  'color': vt.common_tag.color,
                  'description': vt.common_tag.description,
                }

      success = True
      for error_field in errors:
        if errors[error_field] != []:
          success = False

    return {
      'success': success,
      'errors': errors,
      'tags': tags,
      'highlights': highlights,
    }
Exemple #50
0
    def obj_create(self, bundle, request=None, **kwargs):
        url = bundle.data['url']
        domain = url_domain(url)

        bundle.data['domain'] = domain

        title = bundle.data.get('title')
        start_time = bundle.data.get('start_time')
        start_event = bundle.data.get('start_event')
        end_time = bundle.data.get('end_time')
        end_event = bundle.data.get('end_event')
        favicon_url = bundle.data.get('favIconUrl')
        bundle.data['favicon_url'] = favicon_url
        src = bundle.data.get('src')
        tags = bundle.data.get('tags')

        if tags:
            tags = json.loads(tags);

        if end_time and start_time:
            end_time = datetime.datetime.strptime(
                end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)
            start_time = datetime.datetime.strptime(
                start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)
        else:
            end_time = datetime.datetime.now().replace(tzinfo=pytz.utc)
            start_time = datetime.datetime.now().replace(tzinfo=pytz.utc)

        message = bundle.data.get('message')
        highlight = bundle.data.get('highlight')
        parent_comment = bundle.data.get('parent_comment')

        if message and message.strip() == '':
            message = None

        if message:
            bundle.data.pop('message', None)
        if highlight:
            bundle.data.pop('highlight', None)
        if parent_comment:
            bundle.data.pop('parent_comment', None)

        try:
            exists = EyeHistory.objects.filter(user=request.user, url=url,
                                               title=title, src=src, favicon_url=favicon_url,
                                               start_time__gt=start_time -
                                               datetime.timedelta(minutes=1),
                                               start_event=start_event)
            if exists.count() > 0:
                eye_his = exists[0]
                eye_his.end_time = end_time
                eye_his.end_event = end_event
                elapsed_time = end_time - start_time
                eye_his.total_time = int(round(
                    (elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
                eye_his.humanize_time = humanize_time(elapsed_time)
                eye_his.save()
                if message:
                    eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                        eyehistory=eye_his, message=message)
                    notify_message(message=eye_message)
            else:
                # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url)
                dup_histories = EyeHistory.objects.filter(
                    user=request.user, url=url, title=title, end_time__gt=start_time - datetime.timedelta(minutes=5))
                if dup_histories.count() > 0:
                    obj = merge_histories(dup_histories, end_time, end_event)
                    if message:
                        eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                            eyehistory=obj, message=message)
                        notify_message(message=eye_message)
                else:
                    bundle_res = super(EyeHistoryResource, self).obj_create(
                        bundle, request, user=request.user, **kwargs)
                    check_bumps(request.user, start_time, end_time, url)
                    if message:
                        eye_message = None
                        if parent_comment:
                            h = Highlight.objects.get(id=highlight)
                            eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                                eyehistory=bundle_res.obj, message=message, highlight=h, parent_comment=parent_comment)
                        elif highlight:
                            h = Highlight.objects.get(id=highlight)
                            eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                                eyehistory=bundle_res.obj, message=message, highlight=h)
                        else:
                            eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                                eyehistory=bundle_res.obj, message=message)

                        if tags:
                            for tag in tags:
                                if len(Tag.objects.filter(comment=eye_message, common_tag__name=tag)) == 0:
                                    try:
                                        common_tag = CommonTag.objects.get(name=tag)
                                        vt = Tag(
                                            common_tag=common_tag,
                                            user=request.user,
                                            comment=eye_message,
                                        )
                                        vt.save()
                                    except CommonTag.DoesNotExist:
                                        pass


                        notify_message(message=eye_message)
                    return bundle_res
        except MultipleObjectsReturned as e:
            logger.info(e)
            # multiple items created, delete duplicates
            call_command('remove_duplicate_history')

        return bundle
Exemple #51
0
 def test_titles_substring_do_not_collide(self):
     G(Tag, title='django')
     t = Tag(title='go')
     t.save()
     self.assertEqual(t.title, 'go')
Exemple #52
0
from faker import Faker

from tags.models import Tag

# Flush data.
management.call_command('flush', '--noinput')
print("Flushed db.")

faker = Faker()

NUM_TAGS = 200

all_tags = []
for tag_num in range(NUM_TAGS):
    new_tag = Tag(text=f"{faker.word()} {tag_num}")
    new_tag.save()
    all_tags.append(new_tag)

print(f"Saved {NUM_TAGS} new tags.")

# Assign last 80% tags one of the first 20% as parents.
parent_tags = all_tags[:NUM_TAGS // 3]
child_tags = all_tags[NUM_TAGS // 5:]
# assert len(parent_tags) + len(child_tags) == NUM_TAGS
# for ct in child_tags:
#     assert ct not in parent_tags

print('parent_tags:', parent_tags)
print('child tags:', child_tags)

for child_tag in child_tags:
Exemple #53
0
 def test_tag_title_is_unique_and_slug(self):
     t = Tag(title='a title')
     t.save()
     self.assertEqual(t.title, 'a-title')
     t2 = Tag(title='a title')
     self.assertRaises(IntegrityError, lambda: t2.save())
Exemple #54
0
def make_new_tag(name):
    tag = Tag(name=name)
    tag.save()
    return tag