Git Product home page Git Product logo

klubjagiellonski / pola-backend Goto Github PK

View Code? Open in Web Editor NEW
35.0 13.0 11.0 87.88 MB

Pola pomoże Ci odnaleźć polskie wyroby. Zabierając Polę na zakupy odnajdujesz produkty “z duszą” i wspierasz polską gospodarkę.

Home Page: https://www.pola-app.pl

License: BSD 3-Clause "New" or "Revised" License

Python 41.20% HTML 9.73% JavaScript 31.18% Shell 1.72% CSS 12.64% Dockerfile 0.76% SCSS 2.77% Procfile 0.01%
poland product python python-app django-application django-app madeinpoland polska gospodarka patriotyzm

pola-backend's Introduction

pola-backend's People

Contributors

ad-m avatar bpaszcza avatar dependabot-preview[bot] avatar dependabot[bot] avatar dzakus avatar jakubadamw avatar jakublipinski avatar koduj-z-kj avatar matperowicz avatar mik-laj avatar pazikkamil avatar pwilkin avatar pyup-bot avatar rodkiewicz avatar wezsietato avatar zyzik1248 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pola-backend's Issues

SSL na Heroku

Szanowni,

Zauważyłem, że w Heroku wykupujemy SSL Endpoint, ale od marca jest wsparcie dla Heroku SSL, czyli darmowych certyfikatów, które są automatycznie odnawiane. Należy przejść na nowy mechanizm, aby obniżyć niesieczne koszty o 20$ miesięcznie, czyli....900 zł w ciągu roku.

Przydatne linki:
Migrate from SSL:Endpoint to Heroku SSL

Z wyrazami szacunku.

Nie jest możliwe dodanie produktu przez ProductCreate

Szanowni.

Nie jest możliwe dodanie produktu z poziomu panelu CMS, ponieważ pole code jest zablokowane przed edycją.
Co w związku z tym robimy? Kasujemy ten widok, czy wprowadzamy inny mechanizm?

Z wyrazami szacunku

BRIN index

Szanowni,

Należy dodać migracje, która doda BRIN index w bazie danych na pola created_at/timestamp.

Z wyrazami szacunku

Bardzo wolne statystyki

Szanowni,

Aktualnie statystyki działają bardzo wolno, ponieważ za każdy wejściem próbują wykonać bardzo dużo złożonych zapytań. Trzeba by pomyśleć, aby to jakoś przyspieszyć. Może warto spróbować starsze metryki zapisywać w bazie danych? Dane sprzed miesiąca są przydatne, ale już nigdy się nie zmienia. Spowoduje to, że nowe statystyki będą się generować z krótkiego okresu, co może drastycznie przyspieszyć. Przydatne może być w tym wypadku partycjonowanie ( https://medium.com/@StreamBright/creating-partitions-automatically-in-postgresql-7006d68c0fbb )

Z wyrazami szacunku.

Automatyczne uzupełnienie marek producentów na podstawie nazw produktów

Zadanie polega na stworzeniu algorytmu który przeanalizuje nazwy produktów i na ich podstawie wygeneruje nazwy marek producentów. Marki moga być jedno lub wielo-wyrazowe (n-grams). Kandydatem na markę producenta jest taki n-gram, który pojawia się w kilku produktach, ale tylko u jednego producenta.

Docelowo produkt powinien działać jako komenda python mange.py, tak aby można ją uruchamiać każdej nocy.

Przykładowy naiwny algorytm ("działa" tylko z pojedyńczymi wyrazami):

# products - lista produktów z polami (name - nazwa, company - producent)

 words={}

    for prod in products:
        for w in prod.name.split():
            word = words.setdefault(w, {'count':0, 'companies':{}})
            word['count'] += 1
            word['companies'].setdefault(prod.company, 0)
            word['companies'][prod.company] += 1

    sorted_words = sorted(words.items(), key=lambda x: x[1]['count'],
                          reverse=True)

    i=0
    k=0
    while k<100:
        if len(sorted_words[i][1]['companies']) <= 1:
            print u'{} - {}, {}'.format(repr(sorted_words[i][0]),
                                    sorted_words[i][1]['count'],
                                    len(sorted_words[i][1]['companies']))
            k+=1
        i+=1

Historia zmian widoczna w profilu producenta

Na profilu producenta, można (po kliknięciu w jakiś mały link) otworzyć stonę z historią wszystkich zmian (edycji) danego producenta. Historię zmian wyciągamy z reversion

Wymaga #42

Zwiększyć ilości testów

Szanowni,

Aktualnie aplikacja posiada bardzo mało ilość testów, które automatycznie sprawdzają funkcjonowanie aplikacji. Warto podjąć działania, aby testów było więcej i były lepszej jakości. Usprawni to dalszy rozwój aplikacji. Zwłaszcza podczas tworzenia nowych algorytmów np. #41

Z wyrazami szacunku.

Statystyki unikalnych użytkowników w ciągu miesiąca, tygodnia, rooku

Pomocny kod:

from pola.models import Query
from django.models import Func, F, Count, IntegerField

    def get_unique_users_count_by_week():
        return Query.\
            objects.\
            annotate(
                week=Func(
                    F('timestamp'),
                    function='week',
                    template="EXTRACT('%(function)s' FROM %(expressions)s)",
                    output_field=IntegerField()
                )
            ).\
            values('week').\
            annotate(
                count=Count('client')
            ).\
            values('week', 'count').\
            all()

Informacja zwrotna - uwagi dotyczące instalacji

Dzień dobry,

Poniżej informacja zwrotna z procesu instalacji:

a) system operacyjny: GNU/Linux
b) środowisko:

  • Python v. 3.7.2

  • pip v. 18.1

  • virtualenv v. 16.4.1

  • postgres (PostgreSQL) 10.7

  • ustawienia bazy danych:

    Name | Owner | Encoding | Collate | Ctype | Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
    pola | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
    | | | | | postgres=CTc/postgres+
    | | | | | myuser=CTc/postgres

  • Polecenie: "pip install -r requirements/local.txt --user"
    wymusiło aktualizację w "requirements/base.txt": django-filter==2.1.0

  • Polecenie: "python manage.py migrate" zwróciło:

ERRORS:
ai_pics.AIAttachment: (auth.E005) The permission codenamed 'view_aiattachment' clashes with a builtin permission for model 'ai_pics.AIAttachment'.
ai_pics.AIPics: (auth.E005) The permission codenamed 'view_aipics' clashes with a builtin permission for model 'ai_pics.AIPics'.
company.Brand: (auth.E005) The permission codenamed 'view_brand' clashes with a builtin permission for model 'company.Brand'.
company.Company: (auth.E005) The permission codenamed 'view_company' clashes with a builtin permission for model 'company.Company'.
product.Product: (auth.E005) The permission codenamed 'view_product' clashes with a builtin permission for model 'product.Product'.
report.Report: (auth.E005) The permission codenamed 'view_report' clashes with a builtin permission for model 'report.Report'.

  • W związku z powyższym, w plikach "base.txt local.txt production.txt test.txt" zaktualizowałem wersje używanych modułów do najnowszych stabilnych oraz w plikach:

ai_pics/models.py: permissions = (
ai_pics/models.py: permissions = (
company/models.py: permissions = (
company/models.py: permissions = (
product/models.py: permissions = (
report/models.py: permissions = (

zakomentowałem permissions, czyli wiersze:

("view_aipics", "Can see all AIPics"),
("view_aiattachment", "Can see all AIAttachment"),
("view_company", "Can see all company"),
("view_brand", "Can see all brands"),
("view_product", "Can see all product"),
("view_report", "Can see all report"),

  • Ponownie uruchomiłem polecenie: "python manage.py migrate", które utworzyło strukturę bazy danych, chociaż zwróciło błąd:

"psycopg2.IntegrityError: duplicate key value violates unique constraint "auth_permission_content_type_id_codename_01ab375a_uniq"
DETAIL: Key (content_type_id, codename)=(16, view_product) already exists."

  • Po utworzeniu superużytkownika, uruchomieniu serwera i zalogowaniu się na stronie http://127.0.0.1:8000/cms jako superużytkownik, otrzymałem wiadomość:

"Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject:
=?utf-8?q?=5Bexample=2Ecom=5D_Prosz=C4=99_potwierd=C5=BA_adres_e-mail?=
From: webmaster@localhost
To: [email protected]
Date: Sun, 24 Feb 2019 15:40:33 -0000
Message-ID: [email protected]

Hello from example.com!

You're receiving this e-mail because user admin has given yours as an e-mail address to connect their account.

To confirm this is correct, go to http://127.0.0.1:8000/accounts/confirm-email/MQ:1gxvtJ:j_BtfDFu6fm-ZLBFXCD5BYpkkho/

Dziekuje z example.com!
example.com:"

  • Po potwierdzeniu adresu e-mail, mogłem się zalogować na stronie http://127.0.0.1:8000/cms

  • Cookies zapisane w przeglądarce umożliwiły skorzystanie ze strony http://127.0.0.1:8000/admin/ bez potrzeby ponownego logowania, czyli dobrze.

  • Uzyskany stan porównałem ze stronami produkcyjnymi:

https://www.pola-app.pl/cms
oraz
https://www.pola-app.pl/admin

Jeśli strona internetowa jest rozwijana, w kontekście #46 polecałbym cypress i w trybie headless wpięcie testów do pipeline, np. "npm run:cy" w celu uruchomienia: "cypress run --reporter mocha-multi-reporters --reporter-options configFile=config.json"
base.txt
local.txt
production.txt
test.txt

Firmy ze zbyt długimi nazwami

Jeśli firma ma zbyt długą nazwę nie wyświetla się ona w całości w aplikacji. Sprawdzić ile jest takich firm, czy przypadkiem nie można skrócić nazw i jeśli tak, zrobić dodatek do CMS'a aby redakcja widziała które nazwy są za długie.

Przyjaciele Poli - API

Dodać do CMS'a możliwość oznaczenia producenta jako "przyjaciel Poli"
Dodać do API informację o tym, że producent jest "przyjacielem Poli"

Alerty o podejrzanych akcjach

Szanowni,

Przydało by się po zaimplementowaniu #52 dodanie mechanizmu analizy tych statystyk

Przykład 1.
Mechanizm statystyk może wyliczać ile najwięcej zapytań złożył użytkownik/IP w ciągu dnia. Potem mechanizmów alertów może wysyłać powiadomienie, gdy ta liczba przekroczy wartość np. 30. Pozwoli to zareagować na próby pobrania bazy danych.

Przypadek 2:
Mechanizm statystyk może analizować ilość zapytań w ciągu dnia. Mechanizm alertów może wysyłać powiadomienie, gdy odchylenie od średniej z 7 dni było powyżej 10%, co oznacza, że pewnie jesteśmy w mediach, albo jest rozproszona na różne IP próba pobrania bazy danych.

Z wyrazami szacunku.

API wspierajace wielu producentów

Witam,

Po realizacji biletu: #176 my mamy możliwość przygotowania API, które będzie wspierać wielu producentów:

W tym celu należy:

  • przygotować specyfikacji nowego API jako przykładowy JSON lub lepiej OpenAPI
  • przygotować widoki, które są zgodne z specyfikaacja
  • upewnić się, że widoki są bezpieczne

Z wyrazami szacunku

Wiele producentów dla produktu

Witam,

W celu wsparcia dla marek własnych np. Lidl, my musimy dodać możliwość powiązania produktu z wieloma markami.

W tym celu należy:

  • zmienić relacje w product.models.Product.company na wiele-do-wielu
  • przygotować migracje bazy danych
  • zaktualizować panele CMS/administracyjny, aby poprawnie wyświetlały te przypadki
  • zaktualizować bieżace API:
    • gdy jest jeden producent, to można zwrócić tak jak jest aktualne
    • gdy jest kilka producentów, to zwrócić komunikat o konieczności aktualizacji aplikacji

W dalszej perspektywie, my musimy zbudować nowe API, które będzie wspierać kilka producentów.

Z wyrazami szacunku,
Kamil Breguła

Możliwość zgłoszenia zmian w opisie/danych firmy

Użytkownik może zgłosić zmianę w opisie/danych firm (również w markach). Propozycja zmian rozpatrywana jest przez redakcję i może być odrzucona/częściowo zaakceptowana/całkowicie zaakceptowana.

Aby zgłosić zmianę, użytkownik musi rozwiązać np. reCaptchę. Historia zgłoszeń zmian i ew. akceptacji dostępna jest w historii zmian (#43)

Wymaga #42

Lepsza strona startowa CMS'a

Pokazać:

  • Produkty z nierozpatrzonymi zgłoszeniami zamiast Najnowsze nierozpatrzone zgłoszenia
  • Firmy z najdłuższymi nazwami (patrz #36)
  • Popularne produkty bez nazw

Mechanizm do kasowania pustych zgłoszeń

Usuwaj zgłoszenia jeśli są puste (brak tekstu i brak poprawnie załadowanego zdjęcia[trzeba sprawdzać przez S3 boto])
Mechanizm powinien uruchamiać się co noc jako manage.py command

Marki producentów (brands) - baza danych i CMS

Chcemy wiedzieć jakie marki należą do poszczególnych producentów.

Trzeba stworzyć tabelę company_brands (name, company_id). Zmiany w tabeli company_brands powinny być rejestrowane (przez reversion).

Trzeba stworzyć interfejs do CMS do dodawania, edycji i usuwania marek - najprościej jako pole tekstowe multiline.

Lista kroków:

  • stworzyć encje brands
  • stworzyć widok tworzenia, edycji, listy, kasowania
  • dodać do formularza CompanyForm pole wprowadzania marek. Najlepiej z natychmiastowym powiadamianiem(JS) o duplikatach, ale to opcjonalne. Może być również w formie pola wielolinijkowego i walidacja po stronie serwera.
  • zadbać, aby były zapisywane zmiany w rewizjach. (Najprawdopodobniej zapisując zmiany w polu JSON w Company)

Automatyczne sprawdzanie jakości kodu

Szanowni,

Mamy już trochę testów, a więc jest już coś do monitorowania, aby ta aplikacja nie zestarzała się zbyt szybko.
Proponuje uruchomienie następujących usług:

  • Travis-CI - testy automatyczne kodu.
  • CodeClimat - szukanie słabych błędów w kodzie, pomiar pokrycia testami
  • PyUp - automatyczne bezpieczeństwa i zależności

Z wyrazami szacunku

Ps. Wołam @ad-m aby wyraził swoje zdanie. Może on poleca inne aplikacje

Wyszukiwarka na głównej stronie i profil firmy

Pasek wyszukiwania na głównej stronie, w którym będzie można wpisać: kod kreskowy, nazwę produktu, markę lub nazwę firmy. Wyszukiwarka ma być super-szybka i powinna dopełniać wyniki. Wyszukanie prowadzi do profilu firmy, który wyświetla te same informacje co aplikacja mobilna (i może podobnie wyglądać).

Wymaga wcześniej zrobienia #40

Przyjaciele Poli - strona

Nowa strona www i strona mobilna: przyjaciele Poli:

  • informacja kim są przyjaciele Poli
  • lista firm wraz z opisem i logiem
  • jak zostać przyjacielem Poli

Scheduler Exception

2017-08-13 05:02:08.000
138 <190>1 2017-08-13T05:02:07.335602+00:00 app scheduler.1295 - - .Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/hooks/framework_django.py", line 909, in _nr_wrapper_BaseCommand_run_from_argv_
    return wrapped(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute
    output = self.handle(*args, **options)
  File "/app/.heroku/python/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/api/function_trace.py", line 104, in literal_wrapper
    return wrapped(*args, **kwargs)
  File "/app/pola/management/commands/delete_rare_products.py", line 56, in handle
    [product_id])
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/hooks/database_dbapi2.py", line 22, in execute
    *args, **kwargs)
django.db.utils.IntegrityError: update or delete on table "product_product" violates foreign key constraint "ai_pics_aipic_product_id_45918407312df2b2_fk_product_product_id" on table "ai_pics_aipics"

Podmiana logotypów

Na tej stronie podmieniamy logotypy Klubu Jagiellońskiego (logo_kj.png) i Centrum Analiz Klubu Jagiellońskiego (logo_cakj.png).
KJ_logo
KJ_logo_CAKJ

Initial Update

Hi 👊

This is my first visit to this fine repo, but it seems you have been working hard to keep all dependencies updated so far.

Once you have closed this issue, I'll create separate pull requests for every update as soon as I find one.

That's it for now!

Happy merging! 🤖

Zmiana serwerodawcy

Szanowni,

Migrujemy do mydevil.net? Jestem z nich zadowolony. Dostrzegam ból związany z wysokimi kosztami Heroku. Wspierają hostowanie aplikacji Python, a jednocześnie wszystkimi pracami sysadminia się zajmują. Oferują m. in.redisa, postgres i django. Musielibyście sobie tylko skonfigurować np. fabrica do deploymentu, albo hook gita tzw. "git push to deploy", bo nie ma mają out-of-the-box takich takich rozwiazań jak heroku w tym zakresie.

Na wszelki wypadek daje reflink: http://www.mydevil.net/pp/B2TSQR2WUD bo dostaniecie 20% zniżki. Dodatkowo wrzucają na mirko kody zniżkowe ( http://www.wykop.pl/ludzie/MyDevil/ ), gdzie można ich wyrwać jeszcze taniej.

Z wyrazami szacunku,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.