Aktywne Wpisy

DomBrataAlberta +38
Na wykopie oczywiwci najwybitniejsi specjaliście twierdzą, że nie ma sensu próbować ratować dziecka bo to tylko eksperymentalny lek. Najlepiej po prostu dać zdechnąć, albo jeszcze lepiej, dobić. Zazdroszczę waszym przyszłym dzieciom. A nie, przecież tu 80% społeczności nie zamieniło nawet 3 zdań z kobietą.
#latwogang
#latwogang

Siedzę se w majtach i podkoszulce owinięty kurtką i robię pranie . Koszt to $2.75 plus suszenie $0.25 za 8 minut . Jest tu umywalka więc chętnie bym się przemył ale za dużo ludzi i kamery są ( ͡° ʖ̯ ͡°)
#zlomkiemprzezswiat #opierunek
#zlomkiemprzezswiat #opierunek
źródło: image_picker_96CF1EE0-3920-4E16-AD2B-E0432AA3CF85-18008-0000024F685C47A4
Pobierz




Ma to sens pod kątem budowy? Wiadomo, nic tu napisane za bardzo nie jest ale robię mały refactor kodu z całkowicie odmiennym podejściem gdzie sama funkcjonalność jest ale wymaga dobrego wzoru.
Docelowo widzę to tak, że user z listy wybiera jakąś opcję, tworzy sie obiekt klasy Document, w zależnosci co chce tak naprawdę zrobić są używane określone metody, dostaje pytanie czy chce wygenerować docx, odpowiada tak więc mamy orange.generate() czy tam czy chce wysłać maila no to orange.sendemail(). I wiadomo ja kwybierze Orange no to są dodawane poszczególne replacementy jak w tym przykładzie, zapewne można to zrobić jakąś jedną komendą zamiast powtarzać .addreplacement (jak wiecie jak to dajcie znać) ale nie jest to jakoś bardzo istotne na tą chwilę.
import os
from urllib.parse import quote
import docx
from python_docx_replace import docx_replace
import docx2pdf
class Document:
def __init__(self, help_name, file_name, template_file, directory_path):
self.help_name = help_name
self.file_name = file_name
self.template_file = template_file
self.directory_path = directory_path
self.replacements = {}
self.wp_req = False
self.pelnomocnictwo_req = False
self.pdf_req = False
def add_replacement(self, key, value):
self.replacements[key] = value
def generate(self):
doc = docx.Document(self.template_file)
docx_replace(doc, **self.replacements)
output_path = "wypelnione.docx"
doc.save(output_path)
if self.pdf_req == True:
docx2pdf.convert(output_path)
else:
pass
def save(self):
# Logic to save the generated document to the specified directory.
pass
def send_email(self, initial_name: str, toaddrs: str, subject: str, msg_content: str, attachment_list: list[str]):
pass
wnioski_number = 7
orange = Document("Zarząd Drogowy", "PR do ZD - Wniosek o uzgodnienie lokalizacji ", "template.docx", os.path.join(f"{wnioski_number}. Wnioski", "ZD"))
orange.add_replacement("today_date", "2023-10-23")
orange.add_replacement("title", "Budowa drogi")
orange.add_replacement("city", "Kraków")
orange.add_replacement("street", "Sławkowska")
orange.wp_req = True
orange.pelnomocnictwo_req = True
orange.generate()
to samo co wyżej na https://pastebin.com/MdUHeM6k
Jak nikt tego potem nie modyfikuje to zawsze używam
https://handlebarsjs.com/
I template jest w HTML i wrzucam wszystkie dane jako slownik do renderowania.
https://refactoring.guru/pl/design-patterns/creational-patterns
Dobra rozrywka może być próba przełożenia tych wzorców na swoje potrzeby bo że tak powiem tylko ty widzisz szerszy kontekst swojego programu.
Co do samej klasy to zmieniłbym tylko nazwę metody z add_replacements na samo replace
@szubke panie zaczynam dopiero, robię to póki co hobbistycznie więc takie uwagi niewiele wnoszą...
@FredOnizuka yep,
jednak tego nie rozumiem, o co dokładnie Ci chodzi? możesz mi jakiś snipp kodu wkleić?
Im mniej w init tym lepiej. Pomyśl z perspektywy testowania.
Chcesz sobie przetestować
add_replacement. Na prawdę chcesz ładować te wszystkie argumenty do klasy, aby ją zainicjować iOk, rozumiem.
To, że klasa BaseTemplate jest "pusta" jest OK. Poczytaj o interface - https://realpython.com/python-interface/. Co prawda jest to termin bardziej z Javy, ale Python to dalej język obiektowy.
Ogólnie traktuj BaseTemplate jako wzorzec/templatke dla klas dziedziczących.
Nie musisz na każdą logikę