Esempio n. 1
0
	def modifyCampaign(self, idCampaign, columna, inputUser):
		c = Connector.retornarCampaignBD(idCampaign)
		if c == []:
			return 404		#No existe
		if c.isActive():	
			return 412		#Campaign activa
		#Campaign NO esta activa:
		wasModified = Connector.modificarCampaignBD(idCampaign, columna, inputUser)
		if wasModified: 
			return 200	#OK
		return 400		#Columna inexistente
Esempio n. 2
0
    def deleteCampaignporid(self, idCampaign):
        #Se puede eliminar la campaña sólo si esta NO está iniciada:
        campaignRetornada = Connector.retornarCampaignBD(idCampaign)

        if campaignRetornada == []:
            return 404
        if campaignRetornada.isActive():
            return 412
        else:
            Connector.eliminarTweetsxIDC(idCampaign)
            Connector.eliminarCampaignBDxID(idCampaign)
            return 200
Esempio n. 3
0
    def reportRawData(self, idC):  #OK
        campaign = Connector.retornarCampaignBD(
            idC
        )  #Objeto campaign, NO desempaquetamos el JSON, esto lo hace directamente flask.
        tweets = Connector.returnTweetsByIDC(
            idC)  #Busca tweets de determinada campaña

        if (campaign == []
                or tweets == []):  #Revisa que exista campaña con esa ID
            return 404
        if (campaign.finDate > datetime.now()):  #la campana no finalizo aun
            return 412

        rawData = {"campaign": campaign.to_dict(), "tweets": tweets}
        return (rawData)
Esempio n. 4
0
    def returnCampaignsInProgress(self):
        #Obtenemos TODAS las Campañas y vemos una por una si la fecha de inicio de campaign es MENOR a
        #la fecha actual y la fecha de fin de la campaña es MAYOR a la fecha actual. Y si sucede esto la agregamos a una nueva lista.
        listaCampaigns = configTables.session.query(
            configTables.Campaign).all()
        print(listaCampaigns)
        listaNuevaCampaigns = []
        for c in listaCampaigns:
            #Cada c es un: <Campaign(idC='1', startDate='28 11 2018 18:02:00', finDate='02 12 2018 19:26:22', email='*****@*****.**', hashtags='#test-#mock', mentions='@testCampaign-@mockOK')>
            #Y accedo a los atributos con c.atributo (el atributo está en la tabla Campaign dentro de configTables), osea asi: print (c.id)
            idCampaign = c.id
            print(idCampaign)
            campaignRetornada = Connector.retornarCampaignBD(idCampaign)
            fecha_inicio_campaign = campaignRetornada.startDate
            fecha_fin_campaign = campaignRetornada.finDate
            fecha_actual = datetime.now()
            if (
                (fecha_inicio_campaign < fecha_actual)
                    and (fecha_fin_campaign > fecha_actual)
            ):  #La campaña está en curso. Agrego la campaña a la nueva lista a devolver.
                listaNuevaCampaigns.append(c)
            #Si la campaña no inició no hago nada.

        return (
            listaNuevaCampaigns
        )  #Devolvemos la lista de campañas en curso (que todavía no finalizaron)
Esempio n. 5
0
    def deleteCampaignporuser(self, email_user):
        campaigns = Connector.retornarCampaignsBDxEmail(email_user)

        if campaigns == []:  #No hubo campaigns con ese e-mail
            return 404

        haveDeleted = False  #flag
        for c in campaigns:
            if not c.isActive():
                Connector.eliminarTweetsxIDC(c.idC)
                Connector.eliminarCampaignBDxID(c.idC)
                haveDeleted = True

        if haveDeleted:  #Borro una o mas campaigns
            return 200
        else:
            return 412  #No borro nada porque todas estaban activas
Esempio n. 6
0
	def insertCampaign(self, userInputs):
		#Con los nombres de los campos correspondientes a los del json que nos llegan armamos un objeto campaña.
		#Pero antes de esto como fields["hashtags"] y fields["mentions"] son LISTAS, tenemos que pasarlas a un string para poder añadirlo a la BD como un varchar: 
		stringHashtag = self.listaAString(userInputs["hashtags"]) # #donaldTrump-#G20
		stringMention = self.listaAString(userInputs["mentions"]) # @donaldTrump-@miauricioOK
	
		ObjetoCampaign = Campaign(1, userInputs["email"], stringHashtag, stringMention, userInputs["startDate"], userInputs["endDate"])
		#Llamamos a un metodo de Connector para agregar la campaña a la BD junto con las mentions y los hashtags:
		return Connector.insertarCampaignBD(ObjetoCampaign)
Esempio n. 7
0
    def test_InsertTweets(self):
        #Precondición: deben haber 3 campañas creadas e insertadas en la BD.
        configTables.BD.metadata.create_all(
            configTables.engine
        )  #Se crea la BD (en caso que ya está creada no hace nada)

        userInputs = '{"email":"*****@*****.**","hashtags": ["#test", "#mock"], "mentions": ["@testCampaign", "@mockOK"], "startDate":"28 11 2018 18:02:00", "endDate":"25 12 2018 19:26:22"}'
        fields = json.loads(
            userInputs
        )  #Pasa de json a diccionario, esto lo hace flask por eso no hace falta hacerlo en el insertCampaign() del manager.
        #Insertamos 3 campañas en la BD:
        manager.Manager().insertCampaign(fields)
        manager.Manager().insertCampaign(fields)
        id3erCampaign = manager.Manager().insertCampaign(fields)

        #Ejemplo de los lista de diccionario de tweets en formato JSON que el Fetcher le manda a Manager (tweetsJson).
        self.tweet1 = {
            "id_str": "12366",
            "user": {
                "name": "NASAOk",
                "id_str": "789456"
            },
            "entities": {
                "hashtags": ["#mars", "#venus", "#earth"],
                "user_mentions": ["@NASA", "@planets"]
            },
            "created_at": "Sun Mar 20 15:11:01 +0000 2018"
        }
        self.tweet2 = {
            "id_str": "12477",
            "user": {
                "name": "MiauricioOK",
                "id_str": "451325"
            },
            "entities": {
                "hashtags": ["#DonaldNoMeDejes"],
                "user_mentions": ["@donaldTrump", "@G20"]
            },
            "created_at": "Sun Mar 20 21:08:01 +0000 2018"
        }
        tweetsJson = [json.dumps(self.tweet1), json.dumps(self.tweet2)]
        #Insertamos 2 tweets en la 3er campaign.
        manager.Manager().insertTweets(tweetsJson, id3erCampaign)
        #Obtengo el 2do Tweet:
        tweetRetornado = Connector.returnTweetByIDT("12477")
        #Asserto los datos del 2do Tweet:
        print(tweetRetornado.ID)
        self.assertEqual(tweetRetornado.ID, "12477")
        self.assertEqual(tweetRetornado.userName, "MiauricioOK")
        self.assertEqual(tweetRetornado.userid, "451325")
        self.assertEqual(tweetRetornado.hashtags, "#DonaldNoMeDejes")
        self.assertEqual(tweetRetornado.mentions, "@donaldTrump-@G20")
        self.assertEqual(tweetRetornado.date, "Sun Mar 20 21:08:01 +0000 2018")
Esempio n. 8
0
    def reportSummary(self, idC):  #OK
        campaign = Connector.retornarCampaignBD(
            idC
        )  #Objeto campaign, NO desempaquetamos el JSON, esto lo hace directamente flask.
        tweets = Connector.returnTweetsByIDC(idC)  #Lista de diccionarios tweet

        if (campaign == []
                or tweets == []):  #Revisa que exista campaña con esa ID
            return 404
        if (campaign.finDate > datetime.now()):  #la campana no finalizo aun
            return 412

        summary = {
            "campaign": campaign.to_dict(
            ),  #como diccionario para que se pueda acceder a los campos mas facil
            "cant_tweets": len(tweets),
            "moreTwUser":
            self.getUserWithMoreTw(tweets),  #Autor con mas tweets
            "userQuantity":
            self.getUserQuantity(tweets),  #Cantidad diferente de usuarios
        }
        return (summary)
    def test_InsertCampaign(self):
        #Entrada de ejemplo, lo que el usuario ingresa en la Interfaz Web en Alta Campaña (en formato JSON llegaria):
        userInputs = '{"email":"*****@*****.**","hashtags": ["#test", "#mock"], "mentions": ["@testCampaign", "@mockOK"], "startDate":"28 11 2018 18:02:00", "endDate":"25 12 2018 19:26:22"}'
        fields = json.loads(
            userInputs
        )  #Pasa de json a diccionario, esto lo hace flask por eso no hace falta hacerlo en el insertCampaign() del manager.
        idCampaign = manager.Manager().insertCampaign(fields)
        campaignRetornada = Connector.retornarCampaignBD(idCampaign)

        #Asserto todos los atributos del objeto Campaign:
        self.assertEqual(campaignRetornada.emailDueño, "*****@*****.**")
        self.assertEqual(campaignRetornada.hashtags, "#test-#mock")
        self.assertEqual(campaignRetornada.mentions, "@testCampaign-@mockOK")
        self.assertEqual(campaignRetornada.startDate,
                         datetime(2018, 11, 28, 18, 2))
        self.assertEqual(campaignRetornada.finDate,
                         datetime(2018, 12, 25, 19, 26, 22))
Esempio n. 10
0
    def test_ModifyCampaign(self):
        #Precondicion: tener 2 campaigns en la BD.
        userInputs = '{"email":"*****@*****.**","hashtags": ["#test", "#mock"], "mentions": ["@testCampaign", "@mockOK"], "startDate":"18 12 2018 18:02:00", "endDate":"02 12 2018 19:26:22"}'
        fields = json.loads(
            userInputs
        )  #Pasa de json a diccionario, esto lo hace flask por eso no hace falta hacerlo en el insertCampaign() del manager.
        #Creamos e insertamos 2 campaign:
        manager.Manager().insertCampaign(fields)
        id2daCampaign = manager.Manager().insertCampaign(fields)

        #Datos que ingresara el usuario (además de la id2daCampaign):
        columna = "email"
        inputUser = "******"

        manager.Manager().modifyCampaign(id2daCampaign, columna, inputUser)
        campaignRetornada = Connector.retornarCampaignBD(id2daCampaign)
        #Si imprimo (campaignRetornada.startDate) me imprime: 2018-11-28 18:02:00.
        #Pero si lo retorno es este tipo de dato--> datetime.datetime(2018, 11, 28, 18, 2)
        self.assertEqual(campaignRetornada.emailDueño, "*****@*****.**")
Esempio n. 11
0
 def returnCampaign(self, idCampaign):
     return Connector.retornarCampaignBD(idCampaign)
Esempio n. 12
0
 def insertTweet(self, TweetInput, idC):
     Connector.insertTweet(TweetInput, idC)
Esempio n. 13
0
 def test_ReturnTweetsByIDC(self):
     #Retornamos los tuits con IDC 3 (de la 3ra campaña)
     tweets = Connector.returnTweetsByIDC(3)
     print(tweets)
Esempio n. 14
0
 def test_ReturnCampaignBD(self):
     #Le pasamos la ID de Campaign 2
     objetoCampaign = Connector.retornarCampaignBD(2)
     print(objetoCampaign)