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())
    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 #3
0
    def save(self):
        addon = self.instance
        persona = addon.persona
        data = self.cleaned_data

        # Update Persona-specific data.
        persona_data = {
            'license': int(data['license']),
            'accentcolor': data['accentcolor'].lstrip('#'),
            'textcolor': data['textcolor'].lstrip('#'),
            'author': self.request.amo_user.username,
            'display_username': self.request.amo_user.name
        }
        changed = False
        for k, v in persona_data.iteritems():
            if v != getattr(persona, k):
                changed = True
                setattr(persona, k, v)
        if changed:
            persona.save()

        if self.changed_data:
            amo.log(amo.LOG.EDIT_PROPERTIES, addon)
        self.instance.modified = datetime.now()

        # Update Addon-specific data.
        changed = (
            set(self.old_tags) != data['tags'] or  # Check if tags changed.
            self.initial['slug'] != data['slug'] or  # Check if slug changed.
            transfield_changed('description', self.initial, data)
            or transfield_changed('name', self.initial, data))
        if changed:
            # Only save if addon data changed.
            super(EditThemeForm, self).save()

        # Update tags.
        tags_new = data['tags']
        tags_old = [slugify(t, spaces=True) for t in self.old_tags]
        # Add new tags.
        for t in set(tags_new) - set(tags_old):
            Tag(tag_text=t).save_tag(addon)
        # Remove old tags.
        for t in set(tags_old) - set(tags_new):
            Tag(tag_text=t).remove_tag(addon)

        # Update category.
        if data['category'].id != self.initial['category']:
            addon_cat = addon.addoncategory_set.all()[0]
            addon_cat.category = data['category']
            addon_cat.save()

        # Theme reupload.
        if not addon.is_pending():
            if data['header_hash'] or data['footer_hash']:
                save_theme_reupload.delay(data['header_hash'],
                                          data['footer_hash'], addon)

        return data
Exemple #4
0
    def save(self, addon, commit=True):
        if (self.cleaned_data.get('DELETE')
                and 'upload_hash' not in self.changed_data and self.promo.id):
            self.promo.delete()
        elif self.promo and 'upload_hash' in self.changed_data:
            self.promo.delete()
        elif self.cleaned_data.get('upload_hash'):
            super(AdminSettingsForm, self).save(addon, True)

        contact = self.cleaned_data.get('mozilla_contact')
        if contact:
            addon.update(mozilla_contact=contact)

        tags = self.cleaned_data.get('tags')
        if tags:
            tags_new = self.cleaned_data['tags']
            tags_old = [slugify(t, spaces=True) for t in self.get_tags(addon)]

            add_tags = set(tags_new) - set(tags_old)
            del_tags = set(tags_old) - set(tags_new)

            # Add new tags.
            for t in add_tags:
                Tag(tag_text=t).save_tag(addon)

            # Remove old tags.
            for t in del_tags:
                Tag(tag_text=t).remove_tag(addon)

        # Content ratings.
        ratings = self.cleaned_data.get('app_ratings')
        if ratings:
            ratings = [ALL_RATINGS()[int(i)] for i in ratings]

            # Delete content ratings with ratings body not in new set.
            r_bodies = set([rating.ratingsbody.id for rating in ratings])
            addon.content_ratings.exclude(ratings_body__in=r_bodies).delete()

            # Set content ratings, takes {<ratingsbody class>: <rating class>}.
            addon.set_content_ratings(
                dict((rating.ratingsbody, rating) for rating in ratings))
        else:
            addon.content_ratings.all().delete()

        geodata = addon.geodata
        geodata.banner_regions = self.cleaned_data.get('banner_regions')
        geodata.banner_message = self.cleaned_data.get('banner_message')
        geodata.save()

        toggle_game(addon)
        uses_flash = self.cleaned_data.get('flash')
        af = addon.get_latest_file()
        if af is not None:
            af.update(uses_flash=bool(uses_flash))

        index_webapps.delay([addon.id])

        return addon
Exemple #5
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 #6
0
    def save(self):
        addon = self.instance
        persona = addon.persona
        data = self.cleaned_data

        # Update Persona-specific data.
        persona_data = {
            'license': int(data['license']),
            'accentcolor': data['accentcolor'].lstrip('#'),
            'textcolor': data['textcolor'].lstrip('#'),
            'author': self.request.amo_user.username,
            'display_username': self.request.amo_user.name
        }
        changed = False
        for k, v in persona_data.iteritems():
            if v != getattr(persona, k):
                changed = True
                setattr(persona, k, v)
        if changed:
            persona.save()

        if self.changed_data:
            amo.log(amo.LOG.EDIT_PROPERTIES, addon)
        self.instance.modified = datetime.now()

        # Save the Addon object.
        super(EditThemeForm, self).save()

        tags_new = data['tags']
        tags_old = [slugify(t, spaces=True) for t in self.get_tags(addon)]

        # Add new tags.
        for t in set(tags_new) - set(tags_old):
            Tag(tag_text=t).save_tag(addon)

        # Remove old tags.
        for t in set(tags_old) - set(tags_new):
            Tag(tag_text=t).remove_tag(addon)

        # Update category.
        try:
            old_cat = (addon.addoncategory_set
                       .exclude(category_id=data['category'].id))[0]
        except IndexError:
            # The category has remained unchanged.
            pass
        else:
            old_cat.category = data['category']
            old_cat.save()

        # Theme reupload.
        save_theme_reupload.delay(data['header_hash'], data['footer_hash'],
                                  addon)

        return data
Exemple #7
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 #8
0
 def populate(self):
     self.instance = Addon.objects.create(type=amo.ADDON_PERSONA,
         status=amo.STATUS_PUBLIC, slug='swag-overload',
         name='Bands Make Me Dance', summary='tha summary')
     self.cat = Category.objects.create(
         type=amo.ADDON_PERSONA, name='xxxx')
     self.instance.addoncategory_set.create(category=self.cat)
     self.license = amo.LICENSE_CC_BY.id
     Persona.objects.create(persona_id=0, addon_id=self.instance.id,
         license=self.license, accentcolor='C0FFEE', textcolor='EFFFFF')
     Tag(tag_text='sw').save_tag(self.instance)
     Tag(tag_text='ag').save_tag(self.instance)
Exemple #9
0
    def save(self, addon, commit=True):
        if (self.cleaned_data.get('DELETE')
                and 'upload_hash' not in self.changed_data and self.promo.id):
            self.promo.delete()
        elif self.promo and 'upload_hash' in self.changed_data:
            self.promo.delete()
        elif self.cleaned_data.get('upload_hash'):
            super(AdminSettingsForm, self).save(addon, True)

        contact = self.cleaned_data.get('mozilla_contact')
        if contact:
            addon.update(mozilla_contact=contact)

        tags = self.cleaned_data.get('tags')
        if tags:
            tags_new = self.cleaned_data['tags']
            tags_old = [slugify(t, spaces=True) for t in self.get_tags(addon)]

            add_tags = set(tags_new) - set(tags_old)
            del_tags = set(tags_old) - set(tags_new)

            # Add new tags.
            for t in add_tags:
                Tag(tag_text=t).save_tag(addon)

            # Remove old tags.
            for t in del_tags:
                Tag(tag_text=t).remove_tag(addon)

            if add_tags or del_tags:
                index_webapps.delay([addon.id])

        ratings = self.cleaned_data.get('app_ratings')
        if ratings:
            before = set(
                addon.content_ratings.filter(rating__in=ratings).values_list(
                    'rating', flat=True))
            after = set(int(r) for r in ratings)
            addon.content_ratings.exclude(rating__in=after).delete()
            for i in after - before:
                r = ALL_RATINGS[i]
                ContentRating.objects.create(addon=addon,
                                             rating=r.id,
                                             ratings_body=r.ratingsbody.id)
        else:
            addon.content_ratings.all().delete()
        ban_game_in_brazil(addon)
        uses_flash = self.cleaned_data.get('flash')
        af = addon.get_latest_file()
        if af is not None:
            af.update(uses_flash=bool(uses_flash))
        return addon
    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 #11
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 #12
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 #13
0
    def save(self, commit=False):
        from .tasks import create_persona_preview_image, save_persona_image
        # We ignore `commit`, since we need it to be `False` so we can save
        # the ManyToMany fields on our own.
        addon = super(NewPersonaForm, self).save(commit=False)
        addon.status = amo.STATUS_UNREVIEWED
        addon.type = amo.ADDON_PERSONA
        addon.save()
        addon._current_version = Version.objects.create(addon=addon,
                                                        version='0')
        addon.save()
        amo.log(amo.LOG.CREATE_ADDON, addon)
        log.debug('New persona %r uploaded' % addon)

        data = self.cleaned_data

        header = data['header_hash']
        footer = data['footer_hash']

        header = os.path.join(settings.TMP_PATH, 'persona_header', header)
        footer = os.path.join(settings.TMP_PATH, 'persona_footer', footer)
        dst = os.path.join(settings.PERSONAS_PATH, str(addon.id))

        # Save header, footer, and preview images.
        save_persona_image(src=header, dst=dst, img_basename='header.jpg')
        save_persona_image(src=footer, dst=dst, img_basename='footer.jpg')
        create_persona_preview_image(src=header, dst=dst,
                                     img_basename='preview.jpg',
                                     set_modified_on=[addon])

        # Save user info.
        user = self.request.amo_user
        AddonUser(addon=addon, user=user).save()

        p = Persona()
        p.persona_id = 0
        p.addon = addon
        p.header = 'header'
        p.footer = 'footer'
        if data['accentcolor']:
            p.accentcolor = data['accentcolor'].lstrip('#')
        if data['textcolor']:
            p.textcolor = data['textcolor'].lstrip('#')
        p.license_id = data['license']
        p.submit = datetime.now()
        p.author = user.name
        p.display_username = user.username
        p.save()

        # Save tags.
        for t in data['tags']:
            Tag(tag_text=t).save_tag(addon)

        # Save categories.
        tb_c = Category.objects.get(application=amo.THUNDERBIRD.id,
                                    name__id=data['category'].name_id)
        AddonCategory(addon=addon, category=data['category']).save()
        AddonCategory(addon=addon, category=tb_c).save()

        return addon
Exemple #14
0
def site_add(request):
    """
    :param request:
    :return:
    """
    msg_ok = ""
    msg_err = ""

    form = SiteForm()

    if request.method == 'POST':
        form = SiteForm(request.POST)
        if form.is_valid():
            f = form.save(commit=False)
            f.user = request.user
            f.save()

            Tag(name=f.tags).save()

            # admin
            msg = (u"Hi admin;\n\nNew site submit. {0}\n\n".format(f.title))
            msg += emailmsg
            send_mail("{0} | New web site".format(WEBSITE_NAME), msg,
                      DEFAULT_FROM_EMAIL, TO, True)

            msg_ok = u'Submit site successful.'
        else:
            msg_err = u'Attention! Please correct the mistake!'

    return render(request, "site_add.html", locals())
    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 #16
0
    def update(self, request, pk=None, *args, **kwargs):
        try:
            obj = self.queryset.get(id=pk)
        except Link.DoesNotExist:
            return Response(
                'This link does not exist or you do not have permission to access it',
                status=404,
            )
        serializer = self.serializer_class(obj, data=request.data)

        if serializer.is_valid():
            m = serializer.save()

            try:
                tags_str = request.data['tags_str']
            except MultiValueDictKeyError:
                tags_str = None

            if tags_str:
                tags_list = [s.strip() for s in tags_str.split(',')]
                Tag.objects.bulk_create(
                    [Tag(link=m, name=tag.lower()) for tag in tags_list])

            return Response(LinkSerializer(m).data)

        else:
            return Response(serializer.errors, status=400)
Exemple #17
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 #18
0
    def create(self, request):
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            url = request.data['url']
            parsed_uri = urlparse(url)
            domain = '{uri.netloc}'.format(uri=parsed_uri)
            domain = re.sub(r'(www.|.com)', '', string=domain)

            m = serializer.save(profile=request.user.profile, domain=domain)

            # Parse tags string and create tags for link
            try:
                tags_str = request.data['tags_str']
            except MultiValueDictKeyError:
                tags_str = None

            if tags_str:
                tags_list = [s.strip() for s in tags_str.split(',')]
                Tag.objects.bulk_create(
                    [Tag(link=m, name=tag.lower()) for tag in tags_list])

            return Response(LinkSerializer(m).data)

        else:
            return Response(serializer.errors, status=400)
Exemple #19
0
 def test_q_is_tag(self):
     Tag(tag_text='whatsupp').save_tag(self.webapp)
     self.webapp.save()
     self.refresh('webapp')
     res = self.client.get(self.url + ({'q': 'whatsupp'}, ))
     eq_(res.status_code, 200)
     obj = res.json['objects'][0]
     eq_(obj['slug'], self.webapp.app_slug)
Exemple #20
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 #21
0
    def save(self, addon, commit=True):
        if (self.cleaned_data.get('DELETE') and
            'upload_hash' not in self.changed_data and self.promo.id):
            self.promo.delete()
        elif self.promo and 'upload_hash' in self.changed_data:
            self.promo.delete()
        elif self.cleaned_data.get('upload_hash'):
            super(AdminSettingsForm, self).save(addon, True)

        contact = self.cleaned_data.get('mozilla_contact')
        if contact is not None:
            addon.update(mozilla_contact=contact)

        vip = self.cleaned_data.get('vip_app')
        addon.update(vip_app=bool(vip))

        tags = self.cleaned_data.get('tags')
        if tags:
            tags_new = self.cleaned_data['tags']
            tags_old = [slugify(t, spaces=True) for t in self.get_tags(addon)]

            add_tags = set(tags_new) - set(tags_old)
            del_tags = set(tags_old) - set(tags_new)

            # Add new tags.
            for t in add_tags:
                Tag(tag_text=t).save_tag(addon)

            # Remove old tags.
            for t in del_tags:
                Tag(tag_text=t).remove_tag(addon)

        geodata = addon.geodata
        geodata.banner_regions = self.cleaned_data.get('banner_regions')
        geodata.banner_message = self.cleaned_data.get('banner_message')
        geodata.save()

        uses_flash = self.cleaned_data.get('flash')
        af = addon.get_latest_file()
        if af is not None:
            af.update(uses_flash=bool(uses_flash))

        index_webapps.delay([addon.id])

        return addon
Exemple #22
0
    def save(self, addon, commit=False):
        tags_new = self.cleaned_data['tags']
        tags_old = [slugify(t, spaces=True) for t in self.get_tags(addon)]

        # Add new tags.
        for t in set(tags_new) - set(tags_old):
            Tag(tag_text=t).save_tag(addon)

        # Remove old tags.
        for t in set(tags_old) - set(tags_new):
            Tag(tag_text=t).remove_tag(addon)

        # We ignore `commit`, since we need it to be `False` so we can save
        # the ManyToMany fields on our own.
        addonform = super(AddonFormBasic, self).save(commit=False)
        addonform.save()

        return addonform
Exemple #23
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 #24
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 #25
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 #26
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 #27
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,
  }
Exemple #28
0
    def test_removing_all_tags(self):
        Tag(tag_text='tag one').save_tag(self.webapp)
        eq_(self.webapp.tags.count(), 1)

        self.data.update({'tags': ''})
        form = forms.AdminSettingsForm(self.data, **self.kwargs)
        assert form.is_valid(), form.errors
        form.save(self.webapp)

        eq_(self.webapp.tags.count(), 0)
        self.assertSetEqual(
            self.webapp.tags.values_list('tag_text', flat=True), [])
Exemple #29
0
    def setUp(self):
        self.post = []
        self.tag = []
        self.common_in_tags = 'tag'
        for i in range(100):
            self.post.append(Post(text='It is text%s' % (i+1)))
            self.post[i].save()
            self.tag.append(Tag(tag='tag%s' % (i+1)))
            self.tag[i].save()

        self.browser = webdriver.Chrome()
        self.browser.implicitly_wait(3)
Exemple #30
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)