airlog / flavority-api

RESTful API for the tastiest website
0 stars 1 forks source link

Sprawdźcie linię 352 #36

Open V-I-S opened 10 years ago

V-I-S commented 10 years ago

Moje doświadczenie z Pythonem i SQLAlchemy jest widocznie zbyt małe, bo nie wiem na czym polega tam błąd - na ilist jest lista nazw składników - chcę pobrać id potraw do których się odnoszą, może robię zbyt wiele przejść w jednym mapowaniu, nie wiem...Siedzę i siedzę, a może Wy znając tę bibliotekę lepiej znajdziecie błąd w trymiga, więc wrzucam.

illa commented 10 years ago

Moja propozycja jest następująca: napisać to w nawet i w 100 linijkach - ale czytelnie krok po kroku. Bo mówiąc szczerze to ja nawet nie wiem za bardzo co ma się dziać w tej funkcji.

Pierwsza rzecz to znalezienie składników - napisałam co jest tam nie tak. Druga to jak rozumiem znalezienie przepisów, w których jest pojawiają się te składniki - proponuje zrobić nawet i normalną pętlę i apendować listę wynikami.

recipes +=  Recipe.query\
    .join(IngredientAssociation, Recipe.id == IngredientAssociation.columns.recipe_id)\
        .join(IngredientUnit, IngredientUnit.id == IngredientAssociation.columns.ingredient_unit_id)\
        .join(Ingredient, IngredientUnit.ingredient_id == Ingredient.columns.id)\
        .filter(Ingredient.id == ity_skladnik_z_listy)\
        .all() 
V-I-S commented 10 years ago

Spoko, rozpiszę i rano wrzucę. Masz rację, to może być tylko pierwszy element, to by wiele mówiło...

V-I-S commented 10 years ago

Kurdę, może nie tak "rano", bo muszę wyskoczyć na PWr i nie zdążyłem, ale niedługo będzie.

V-I-S commented 10 years ago

Ejj..Mam prośbę, Próbuję wykonać taką linię kodu:

Ingredient.query.get(1)

Mi po utworzeniu bazy niestety wyskakuje None dla każdego id 1,2,3... Dla:

Ingredient.query.all()

zwraca pustą listę...

Bazę wygenerowałem ze skryptów, nazwa jest domyślna 'test.db', przeniosłem ją do katalogu w którym jest plik 'runserver.py'. Co jeszcze może być nie tak?

robin92 commented 10 years ago

Ścieżka to bazy to domyślnie <miejsce wywołania>/test.db. Jak masz problem z tym to możesz ręcznie ścieżkę ustawić tutaj. Tylko nie commituj tej zmiany.

robin92 commented 10 years ago

Dotyczy #21

V-I-S commented 10 years ago

Ok, generalnie już wszystko ogarnięte, oprócz synchronizacji z webapp, a nie chcę wrzucać bez tego. Jak możecie rozwiać moją wątpliwość, bo nie wiem co za cuda dzieja się w backbonie, jednakże, gdy pobieram zapytanie w api, np. dla produktów "tasty potato", ..., otrzymuję zapytanie GET:

/recipes/?advanced=true&limit=30&short=true&sort_by=rate&query=%5B%22tasty+potato%22%2C%22mmmm+onion%22%2C%22lovely+peanuts%22%5D&page=1

W związku z tym dwie sprawy:

  1. Rozumiem, że to jest lista produktów zakodowana tak, aby przekazać ją w postaci ['tasty potato',...]. Nie wiem co to za kodowanie, ale nie jest to raczej b64? Mogę to parsować ręcznie, ale domyślam się, że jest coś sensownego do zdekodowania tego, skoro jakoś jest kodowane? b64decode(args['query']) oczywiście nie działa.
  2. W webapp zapytanie jest wysyłane (jak widać zresztą powyżej) na /recipes/, jest więc przechwytywane przez Recipes. Asia o tym nawet dziś wspominała. Czy możemy zamienić adresację zapytania na /recipes/advanced, jak mówiliśmy wcześniej, czy mam kombinować, aby to stamtąd przekierować?
robin92 commented 10 years ago

Podobny mechanizm wykorzystujemy przy normalnym wyszukiwaniu. Z tego co pamiętam to Flask sam odkodowuje Base64 w standardowych przypadkach. Najlepiej jeśli przetestujesz to z webapp.

Tak w ogóle to nie wiem czy jest sens się z tym bawić dalej. Jeśli teraz coś przestanie działać to rano będzie problem. To pokazuje, że na ostatnią chwilę nie robi się ficzurów tylko jakieś pierdoły.

EDIT. Teraz tak patrzymy z Asią to jednak nie kodujemy tego na Base64. Kodowanie, które tam to zwykłe url-encoding i parser argumentów RequestParser sobie z tym poradzi.

illa commented 10 years ago

Dokładnie, jednak nie kodujemy w base64. Ponieważ arsg['query'] po parsowaniu argumentów to string to aby mieć listę wystarczy json.loads(args['query']).

V-I-S commented 10 years ago

tak, masz rację, już to działa:) właśnie testuję. Wrzucę na brancha jak wszystko sprawdzę i ocenicie, czy coś może zepsuć i czy jest sens dodawać, jeśli będziecie chcieli.