Example #1
0
    def test_mitaPuuttuu(self):
        # Resepti
        test_data = u"Reseptitiedosto\n"\
          + u"Makaroonilaatikko\n"\
          + u"1 Vuoka\n"\
          + u"RAAKA-AINEET\n"\
          + u"\tSipulia\t150g\n"\
          + u"\tMakaronia\t150g\n"\
          + u"\tMaitoa\t3dl\n"\
          + u"OHJEET\n"\
          + u"vlablalsa\n"\
          + u"asdasd"
        self.input_file = StringIO(test_data)
        kirja = reseptiMod.ReseptiKirja()
        try:
            kirja.lataaResepti(self.input_file)
        except IOError:
            self.fail(
                "Loading a correctly structured file caused an exception")
        self.input_file.close()
        resepti = kirja.haeNimi("makaroonilaatikko")

        # Jääkaapin sisältö
        test_data = u"Jääkaappitiedosto versio 1.0\n"\
          + u"# Matin jääkaappi\n"\
          + u"JÄÄKAAPIN SISÄLTÖ\n"\
          + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\
          + u"Makarooni\t500\tg"
        self.input_file = StringIO(test_data)
        kaappi = JaaKaappi()
        try:
            kaappi.lataaJaakaappi(self.input_file)
        except IOError:
            self.fail(
                "Loading a correctly structured file caused an exception")
        self.input_file.close()
        # Mitä puuttuu
        #print(resepti,"reseptinä")
        puuttuu = kaappi.mitaPuuttuu(resepti)  # TODO
        self.assertEqual("Sipulia", puuttuu[0][0].nimi,
                         "identifying missing failed")
        self.assertEqual(1, len(puuttuu), "identifying missing amount failed")
        # TODO lisää sipuli ja tarkista uudestaan

        #Lisätään sipuli
        sipuli = ainesMod.ruokaAines("sipuli")
        test_data += u"\nSipuli\t150\tg"
        self.input_file = StringIO(test_data)
        try:
            kaappi.lataaJaakaappi(self.input_file)
        except IOError:
            self.fail(
                "Loading a correctly structured file caused an exception")
        #puuttuuko vielä?
        puuttuu = kaappi.mitaPuuttuu(resepti)  # TODO
        self.assertEqual(0, len(puuttuu), "identifying missing amount failed")
Example #2
0
  def test_search_allergy_nofile( self):
    # LATAA JÄÄKAAPPI
    test_data = u"Jääkaappitiedosto versio 1.0\n"\
      + u"# Matin jääkaappi\n"\
      + u"JÄÄKAAPIN SISÄLTÖ\n"\
      + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\
      + u"Pähkinä\t1\tkpl\ta\t1g\tP\n"\
      + u"Sipuli\t1\tkpl"
    self.input_file = StringIO(test_data)
    kaappi = jaakaappiMod.JaaKaappi()
    try:
      kaappi.lataaJaakaappi(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()
    # LATAA ALLERGIATIEDOT
    test_data = u"Allergiatiedot\n"\
      + u"# test comment\n"\
      + u"Maito\t\tL\n"\
      + u"Pähkinä\t\tP\n"\
      + u"Snickers\tP"
    self.input_file = StringIO(test_data)
    try:
      kaappi.lataaAllergiat(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured allergy file caused an exception")
    self.input_file.close()

    # LATAA RESEPTIT
    test_data = u"Reseptitiedosto\n"\
      + u"Pähkinävuoka\n"\
      + u"1 Vuoka\n"\
      + u"RAAKA-AINEET\n"\
      + u"\tPähkinä\t150g\n"\
      + u"\tJauhoja\t150g\n"\
      + u"\tSipulia\t3dl\n"\
      + u"OHJEET\n"\
      + u"Peanut butterr"\
      + u"Jelly time\n"
    self.input_file = StringIO(test_data)
    kirja = reseptiMod.ReseptiKirja()
    try:
      kirja.lataaResepti(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()

    # SUORITA HAKU, ei pähkinää (['P'])
    tulos = haeValmistettavat( kirja, kaappi,4,['P'])
    self.assertEqual( len(tulos), 0)
    # Normaali haku
    tulos = haeValmistettavat( kirja, kaappi,4)
    self.assertEqual( len(tulos), 1)
Example #3
0
  def test_search_nofile( self):
    # LATAA JÄÄKAAPPI
    test_data = u"Jääkaappitiedosto versio 1.0\n"\
      + u"# Matin jääkaappi\n"\
      + u"JÄÄKAAPIN SISÄLTÖ\n"\
      + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\
      #+ u"Sipuli\t1\tkpl"
      #+ u"Sipuli\t1\tkpl\ta\t100g"
    self.input_file = StringIO(test_data)
    kaappi = jaakaappiMod.JaaKaappi()
    try:
      kaappi.lataaJaakaappi(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()

    # LATAA RESEPTIT
    test_data = u"Reseptitiedosto\n"\
      + u"Makaroonilaatikko\n"\
      + u"1 Vuoka\n"\
      + u"RAAKA-AINEET\n"\
      + u"\tSipulia\t150g\n"\
      + u"\tMakaronia\t150g\n"\
      + u"\tMaitoa\t3dl\n"\
      + u"OHJEET\n"\
      + u"Tee jotainn"\
      + u"Ruokaa\n"
    self.input_file = StringIO(test_data)
    kirja = reseptiMod.ReseptiKirja()
    try:
      kirja.lataaResepti(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()

    # SUORITA HAKU
    tulos = haeValmistettavat( kirja, kaappi,4)
    # TULOSTA
    for t in tulos:
      print (t[0], "puuttuu",t[1],"ainesta")
      puuttuvat = []
      for a in t[2]: #käy läpi puuttuvat ainekset
        print("\t",a[0],a[1],a[2],a[3])
        puuttuvat.append(a[0])
      #print("\t",puuttuvat)
    # Puuttuu makaronit ja sipuli, eli kaksi asiaa.
    self.assertEqual( tulos[0][0:2], ("makaroonilaatikko",2))
Example #4
0
 def alusta(self):
     # LATAA
     try:
         # Reseptit
         self.kirja = reseptiMod.ReseptiKirja()
         self.kirja.lataaKansio("./reseptit/")
         # Jääkaappi
         self.kaappi = jaakaappiMod.JaaKaappi()
         try:
             # sisältö
             buf = open("./jaakaappi.txt")
             self.kaappi.lataaJaakaappi(buf)
             buf.close()
             # allergiatiedot
             buf = open("./allergiat.txt")
             self.kaappi.lataaAllergiat(buf)
             buf.close()
         except IOError as e:
             raise
     except FileNotFoundError as e:
         print("Tiedostoa ei löytynyt", str(e)[str(e).index("'"):])
     #LAITA UI:n reseptit
     for resepti in self.kirja.reseptit:
         self.reseptilista.insert(tkinter.END, resepti.nimi)
Example #5
0
  def test_search_subrecipe_nofile( self):
    # LATAA JÄÄKAAPPI
    test_data = u"Jääkaappitiedosto versio 1.0\n"\
      + u"# Matin jääkaappi\n"\
      + u"JÄÄKAAPIN SISÄLTÖ\n"\
      + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\
      + u"Voi\t1\tpurkki\ta\t400g\tVL\t5.4.2016\n"\
      + u"Sipuli\t1\tkpl" #TODO fix when no todMaara is defined
      #+ u"Sipuli\t1\tkpl\ta\t100g"
    self.input_file = StringIO(test_data)
    kaappi = jaakaappiMod.JaaKaappi()
    try:
      kaappi.lataaJaakaappi(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()

    # LATAA RESEPTIT
    #piiras
    test_data = u"Reseptitiedosto\n"\
      + u"Kombopiiras\n"\
      + u"1 Vuoka\n"\
      + u"RAAKA-AINEET\n"\
      + u"\tSipulia\t150g\n"\
      + u"\tJauhelihaa\t150g\n"\
      + u"\tVoitaikinaa\t1vuoka\n"\
      + u"OHJEET\n"\
      + u"Tee jotainn"\
      + u"Ruokaa\n"
    self.input_file = StringIO(test_data)
    kirja = reseptiMod.ReseptiKirja()
    try:
      kirja.lataaResepti(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()
    #voitaikina
    test_data = u"Reseptitiedosto\n"\
      + u"Voitaikina\n"\
      + u"1 Vuoka\n"\
      + u"RAAKA-AINEET\n"\
      + u"\tVoi\t150g\n"\
      + u"\tJauhot\t150g\n"\
      + u"OHJEET\n"\
      + u"Tee diipadaa"\
      + u"Ruokaa\n"
    self.input_file = StringIO(test_data)
    try:
      kirja.lataaResepti(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()
    #mitäs on kirjassa
    #print(kirja.reseptit, "reseptiejäa")
    # SUORITA HAKU
    tulos = haeValmistettavat( kirja, kaappi,40)
    # TULOSTA
    for t in tulos:
      print (t[0], "puuttuu",t[1],"ainesta")
      if( len(t[3]) != 0):
        print ("\t","Ainekset, jotka tehdään aliresepteistä:",",".join(t[3]))
      puuttuvat = []
      for a in t[2]:
        print("\t",a[0],a[1],a[2],a[3])
        puuttuvat.append(a[0])
      #print("\t",puuttuvat)
    # Puuttuu makaronit ja sipuli, eli kaksi asiaa.
    self.assertEqual( tulos[1][0:2], ("kombopiiras",2))
Example #6
0
  def test_erotus( self):
    # Ladataan resepti
    test_data = u"Reseptitiedosto\n"\
      + u"Makaroonilaatikko\n"\
      + u"1 Vuoka\n"\
      + u"RAAKA-AINEET\n"\
      + u"\tSipulia\t150g\n"\
      + u"\tJauhoja\t2dl\n"\
      + u"\tMakaroni\t4dl\n"
    self.input_file = StringIO(test_data)
    kirja = reseptiMod.ReseptiKirja()
    try:
      kirja.lataaResepti(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()
    # Ladataan Kaappi
    test_data = u"Jääkaappitiedosto versio 1.0\n"\
      + u"# Matin jääkaappi\n"\
      + u"JÄÄKAAPIN SISÄLTÖ\n"\
      + u"Sipuli\t150\tg\n"
      #+ u"Sipuli\t150\tg"
    self.input_file = StringIO(test_data)
    kaappi = jaakaappiMod.JaaKaappi()
    try:
      kaappi.lataaJaakaappi(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()

    #testit g - g
    kaine = kaappi.ruokaAineet[0]
    raine = kirja.haeNimi('makaroonilaatikko').ainekset[0]

    #print(raine,kaine)
    ero = erotus(raine, kaine)
    self.assertEqual((0,'g') , ero)
    
    # Ladataan Kaappi uudelleen
    test_data = u"Jääkaappitiedosto versio 1.0\n"\
      + u"# Matin jääkaappi\n"\
      + u"JÄÄKAAPIN SISÄLTÖ\n"\
      + u"Sipuli\t50\tg\n"\
      + u"Jauhoja\t1\tkg\n"\
      + u"Makaronia\t150\tg\n"
    self.input_file = StringIO(test_data)
    kaappi = jaakaappiMod.JaaKaappi()
    try:
      kaappi.lataaJaakaappi(self.input_file)
    except IOError:
      self.fail("Loading a correctly structured file caused an exception")
    self.input_file.close()

    #testit sipuli g - g
    kaine = kaappi.ruokaAineet[0]
    raine = kirja.haeNimi('makaroonilaatikko').ainekset[0]
    #print(raine,kaine)
    ero = erotus(raine, kaine)
    self.assertEqual((100,'g') , ero)

    # NYT jauhoilla dl - kg
    kaine = kaappi.ruokaAineet[1]
    raine = kirja.haeNimi('makaroonilaatikko').ainekset[1]
    ero = erotus(raine, kaine)
    self.assertEqual((0,'dl') , ero)

    # NYT makaroineilla dl - g
    kaine = kaappi.ruokaAineet[2]
    raine = kirja.haeNimi('makaroonilaatikko').ainekset[2]
    ero = erotus(raine, kaine)
    self.assertEqual((50.0,'g') , ero)
Example #7
0
def paaohjelma():
    # LATAA
    # Asetukset
    try:
        asetukset = Asetukset('./asetukset.txt')
    except BaseException as e:
        raise
        if (len(e.args) == 1):
            print("Virhe,", e.args[0])
        else:
            print("Virhe", e.message)
        return

    # MUUT
    try:
        # Reseptit
        kirja = reseptiMod.ReseptiKirja()
        kirja.lataaKansio(asetukset.reseptikansio)
        # Jääkaappi
        kaappi = jaakaappiMod.JaaKaappi()
        try:
            # sisältö
            buf = open(asetukset.jaakaappitiedosto)
            kaappi.lataaJaakaappi(buf)
            buf.close()
            # allergiatiedot
            buf = open(asetukset.allergiatiedosto)
            kaappi.lataaAllergiat(buf)
            buf.close()
        except IOError as e:
            raise
    except FileNotFoundError as e:
        print("Virhe, Tiedostoa ei löytynyt", str(e)[str(e).index("'"):])
    except BaseException as e:
        if (len(e.args) == 1):
            print("Virhe,", e.args[0])
        else:
            print("Virhe", e.message)
        return

    # TULOSTA
    """print ("X==================X")
  print ("|   RESEPTIKIRJA   | HAE")
  print ("|       0.7        | OHJEET")
  print ("|                  | LISTAA")
  print ("|                  | ASETUKSET")
  print ("|                  | LOPETA")
  print ("X==================X")"""
    komento = ''
    try:
        while komento != 'lopeta':
            # Käsittele komennot
            if (komento == 'HAE'):
                # Tarkista allergia-asetukset
                if (asetukset.allergiatSet == False):
                    print(
                        "Et ole määritellyt vielä allergiatietojasi, haluatko asettaa ne?"
                    )
                    vastaus = str(input(">:(K/E)")).upper()
                    if (vastaus == 'K'):
                        print("Anna allergiatietosi pilkuilla erotettuna.")
                        ok = False
                        while (ok == False):
                            print("Allergiatiedot annetaan kirjaimin:\n"\
                                  +" L = laktoosi\tG = gluteeni\n"\
                                  +" P = pähkinä")
                            vastaus = str(input(">:")).upper()
                            try:
                                parsitut = ainesMod.parsiAllergiat(vastaus)
                            except ainesMod.AinesParseError as e:
                                print("Virhe,", e.message)
                            else:
                                ok = True
                                #Tallennetaan
                                print(
                                    'Allergia-asetuksesi tallennetaan tiedostoon "asetukset.txt", voit muokata niitä myöhemmin'
                                )
                                with open("asetukset.txt", "a") as tiedosto:
                                    tiedosto.write("allergiat " +
                                                   ",".join(parsitut) + "\n")
                # Valikko
                vastaus = valikko(
                  'Haluatko hakea:\n'\
                      +'1) Jääkaapin sisällön perusteella\n'\
                      +'2) Ainesosan perusteella\n'\
                      +'2) Nimen perusteella\n', 1,3)
                #print("Haetaanko jääkaapin sisällön perusteella?")
                #vastaus = str(input(">:(K/E)")).upper()

                if (vastaus == 1):
                    print("Kuinka monta puuttuvaa ainesta saa olla?")
                    vastaus = str(input(">:(numero)")).upper()
                    try:
                        puuttuvia = int(vastaus)
                    except ValueError:
                        print("Numero ei kelpaa, oletetaan 0")
                        puuttuvia = 0
                    valmistettavat = hakuMod.haeValmistettavat(
                        kirja, kaappi, puuttuvia, kaappi.allergiat)
                    if (len(valmistettavat) == 0):
                        print(
                            "Et voi valmistaa mitään jääkaapin sisällöllä (ei löytynyt yhtään reseptiä jonka aineista on väh. yksi aines)"
                        )
                    else:
                        print("Löytyi", len(valmistettavat), "kpl tuloksia:")
                        for resepti in valmistettavat:
                            print("\t", resepti[0], "(Puuttuu", resepti[1],
                                  "ainesosaa)")
                            #print(resepti[2])
                            print("\t\tPuuttuvat:")
                            for p in resepti[2]:  #puuttuvat
                                print("\t\t  {0:23} {1} {2} {3}".format(
                                    p[0].nimi, p[1], p[2], p[3]))
                                #print("\t\t",p[0].nimi,"\t\t\t"+p[1],p[2],p[3])
                            print("\t\tEi puutu:")
                            #print(resepti[4])
                            for p in resepti[4]:  #puuttuvat
                                try:
                                    print(
                                        "\t\t  {0:23} {1} {2} ( Kaapissa {3} )"
                                        .format(p[0].nimi, p[1], p[2],
                                                p[0].todMaara))
                                except:
                                    print(
                                        "\t\t  {0:23} {1} {2} ( Kaapissa {3} {4})"
                                        .format(p[0].nimi, p[1], p[2],
                                                p[0].maara, p[0].yksikko))
                elif (vastaus == 2):
                    print("Anna hakusana")
                    vastaus = str(input(">:"))
                    try:
                        tulos = kirja.haeNimella(vastaus, 0.6)
                    except functionsMod.NotFoundError:
                        print("Ei tuloksia")
                    else:
                        print("Löytyi", len(tulos), "kpl tuloksia:")
                        for t in tulos:
                            print(" " + t[0].nimi)

                elif (vastaus == 3):
                    print("Anna ainesosa")
                    vastaus = str(input(">:"))
                    try:
                        tulos = kirja.haeNimella(vastaus, 0.6)
                    except functionsMod.NotFoundError:
                        print("Ei tuloksia")
                    else:
                        print("Löytyi", len(tulos), "kpl tuloksia:")
                        for t in tulos:
                            print(" " + t[0].nimi)

                else:
                    pass

            elif (komento == 'LISTAA'):
                vastaus = valikko(
                  'Haluatko listata:\n'\
                      +'1) Jääkaapin\n'\
                      +'2) Reseptit\n'\
                      +'3) Tietyn reseptinsisällön\n', 1,3)
                if (vastaus == 1):
                    kaappi.listaaKaikki()
                elif (vastaus == 2):
                    kirja.listaaKaikki()
                elif (vastaus == 3):
                    print("Anna reseptin nimi")
                    vastaus = str(input(">:"))
                    #autocorrect :D
                    try:
                        nimi = kirja.haeNimi(vastaus, 0.6).nimi
                    except functionsMod.NotFoundError:
                        nimi = vastaus
                    # itse haku
                    try:
                        tulos = hakuMod.haeReseptiPuuttuvat(
                            kirja, kaappi, nimi)
                    except functionsMod.NotFoundError:
                        print("Ei tuloksia")
                    else:
                        print("\t", nimi)
                        print("\t\tPuuttuvat:")
                        for p in tulos[2]:  #puuttuvat
                            print("\t\t  {0:23} {1} {2} {3}".format(
                                p[0].nimi, p[1], p[2], p[3]))
                        print("\t\tEi puutu:")
                        for p in tulos[4]:  #puuttuvat
                            try:
                                print("\t\t  {0:23} {1} {2} ( Kaapissa {3} )".
                                      format(p[0].nimi, p[1], p[2],
                                             p[0].todMaara))
                            except:
                                print(
                                    "\t\t  {0:23} {1} {2} ( Kaapissa {3} {4})".
                                    format(p[0].nimi, p[1], p[2], p[0].maara,
                                           p[0].yksikko))
                        #for aines in tulos.ainekset:
                        #  print("\t",aines[0].nimi+"\t"+aines[1]+" "+aines[2])
                    """
          try:
            tulos = kirja.haeNimi(vastaus, 0.6)
          except functionsMod.NotFoundError:
            print("Ei tuloksia")
          else:
            print(tulos.nimi)
            for aines in tulos.ainekset:
              print("\t",aines[0].nimi+"\t"+aines[1]+" "+aines[2])
          """
            elif (komento == 'OHJE'):
                print("""Reseptiohjelma v.10 2016
              Ohjelma lataa reseptit ja jääkaapin ja kertoo mitä voidaan valmistaa.

              Asetukset tiedostossa asetukset.txt 
              """)
                print("""
            HAE
              Ohjelma siiryy hakutilaan.
              Mikäli et ole määrittänyt allergioita, tulee ohjelma kysymään allergiatietosi. Ne tallennetaan asetustiedostoon.

              Käyttäjä voi hakea:
              (1)Jääkaapin sisällön perusteella
              (2)Ainesosan perusteella
              (3)Nimen perusteella

              Hauissa otetaan allergiatiedot huomioon.

              (1) Kohdassa listataan myös mitä reseptin aineista puuttuu ja kuinka paljon.

            OHJE
              Tulostaa ohjeen

            LISTAA
              Ohjelma siiryy listaustilaan.

              Käyttäjälle voi listata:
              (1)jääkaapin sisällön
              (2)ladatut resptit
              (3)Tietyn reseptin sisällön

              (3) Kohdassa listataan myös mitä reseptin aineista puuttuu ja kuinka paljon.

            ASETUKSET
              Ohjelma tulostaa ladatut asetukset

          LOPETA
              Ohjelman suoritus loppuu.
              Ohjelmasta voi myös poistua ctrl+d yhdistelmällä""")

            elif (komento == 'ASETUKSET'):
                print(
                    'Asetukset ladataan ohjelman käynnistyessä "asetukset.txt"-tiedostosta'
                )
                print('Nykyiset asetukset')
                print(' allergiat\t\t', ", ".join(asetukset.allergiat))
                print(' allergiatiedosto\t', asetukset.allergiatiedosto)
                print(' jaakaappitiedosto\t', asetukset.jaakaappitiedosto)
                print(' reseptikansio\t\t', asetukset.reseptikansio)
            elif (komento == 'LOPETA'):
                break
            else:
                print("X==================X")
                print("|   RESEPTIKIRJA   | HAE")
                print("|       0.7        | OHJEET")
                print("|                  | LISTAA")
                print("|                  | ASETUKSET")
                print("|                  | LOPETA")
                print("X==================X")

            # lue uusi komento
            komento = str(input(">:")).upper()
    except KeyboardInterrupt:
        print("\nHyvästi!")
    except EOFError:
        print("\nHyvästi!")
    except BaseException as e:
        raise
        if (len(e.args) == 1):
            print("Virhe,", e.args[0])
        else:
            print("Virhe", e.message)
        return