Προς το περιεχόμενο

Superkaramba - εορτολόγιο


DIMITRISG

Προτεινόμενες αναρτήσεις

 

Με μία τρελά γρήγορη ματιά. Γιατί χρησιμοποιείς os.system("mkdir -p ...") και όχι os.mkdir κτλ? Επίσης να ξέρεις ότι το subprocess.call() είναι πολύ καλύτερη λύση από το os.system γιατί μπορείς να ελέγξεις αν πέτυχε η εντολή που πήγες να εκτελέσεις. Ομοίως το wget δεν χρειάζεται. Και με urllib(2) κάνεις την δουλειά σου.

 

 

για να πω την αλήθεια δεν ξέρω ούτε εγώ, απλά στην αρχή ξεκίνησα με os.system και μάλλον μου κόλλησε συνήθεια.

αυτό που λες με το subprocess ότι μπορώ να δω αν η εντολή πέτυχε μου δίνει ιδέες...

Αν θυμάμαι καλά πέρυσι είχα χρησιμοποιήσει urllib και μετά από αλλαγή του site δεν μου δούλευε λόγω ότι δεν έκανε αναγνώρηση ως πρόγραμμα περιήγησης. Δοκίμασα με wget να πάρω τη σελίδα και αφού δούλεψε το άφησα έτσι. Θα δοκιμάσω στην Python3 μήπως μπορώ να διαχειριστώ αυτό το πρόβλημα καλύτερα

 

 

Δεν προλαβαίνω να δω περισσότερα τώρα, και περισσότερα θα μπορέσω να δω από Σεπτέμβρη (αν το θυμηθώ· κάνε πότε πότε κανά bump στο thread ;) ). Ωραία δουλίτσα πάντως

 

βάλτο και σε ένα public repo

 

 

 

- αργότερα θα το βάλω στο git repo

 

ευχαριστώ, όποτε βρεις χρόνο κοίταξέ το γιατί παρόλο που διαβάζω δεξιά αριστερά παραδείγματα, καλό είναι και μερικές παρατηρήσεις σε προσωπικό επίπεδο...

 

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η καλύτερη λύση για να ανοίγεις σελίδες είναι η requests, αλλά είναι ένα extra dependency. Πάντως και με σκέτη stdlib κάνεις τη δουλειά σου.

 

Python 2 https://docs.python.org/2/howto/urllib2.html

Python 3 https://docs.python.org/3.4/howto/urllib2.html

 

Πιθανότατα απλά πρέπει να ορίσεις το user-agent

 

IMHO δεν έχεις λόγο να μην το βάλεις σε public repo άμεσα, αλλά περί ορέξεως.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1. Δεν ακολουθείς το PEP8. Δεν είναι υποχρεωτικό φυσικά, αλλά συνηθίζεται. Όποια σύμβαση και αν χρησιμοποιήσεις, απλά προσπάθησε να είσαι consistent.

 

2. Η removeFiles() θα έπρεπε να είναι staticmethod ή τελείως ξεχωριστή function. https://github.com/dglent/sansimera-qt/blob/master/sansimera_fetch.py#L42

 

3. Κάνεις κάτι περίεργο με τα pay και το ponth (αλήθεια τι ρόλο βαράει το "p" ;). Τα ορίζεις και σαν μεθόδους αλλά και σαν instance attributes. Πιθανά αυτό που θες να κάνεις είναι να χρησιμοποιήσεις property, αλλά δεν είμαι σίγουρος ότι έχω καταλάβει τι ακριβώς θέλεις να πετύχεις (δεν έχω τρέξει και τον κώδικα). Προσωπικά θα καταργούσα τα attributes και θα μετονόμαζα τις μεθόδους. Δηλαδή

def calc_pay(self):
        imera = str(datetime.date.today()).split('-')
        imera = imera[1:]
        return imera[1]

4. Που δημιουργείς το cache? Στο φάκελο εγκατάστασης του προγράμματος; Νομίζω ότι η καλύτερη λύση αν θες persistance είναι μέσα στο ~/.config/supercaramba αν και αυτό θα το περιορίζει ανά user. Aν δεν θες peristance τότε στο /tmp οπότε δες και την βιβλιοθήκη tmpfile της standard library.

 

5. Τα αρχεία τα ανοιγοκλείνουμε με την with. Google it

 

6. Πιθανά να θες να προσθέσεις logging για να μπορείς να έχεις feedback αν κάτι πάει στραβά στους χρήστες του προγράμματος.

 

7. "Δεν βρέθηκαν γεγονότα, ελέγξτε τη σύνδεσή σας." Πιστεύω ότι μπορείς να ξεχωρίσεις πότε δεν βρέθηκαν γεγονότα και πότε υπάρχει πρόβλημα με τη σύνδεση ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τα κοιτάω ένα ένα

2: Το έβαλα σε staticmethod

https://github.com/dglent/sansimera-qt/commit/6b8a1f28309d6497ffa2bfcc759e2a1d6955a6ae

 

Πώς καταλαβαίνω ότι μια μέθοδος πρέπει να είναι στατική;

Μήπως όταν δεν περιέχει μεταβλητές που ανήκουν στο namespace της κλάσης;

 

Έψαξα να βρω συγκεκριμένη επεξήγηση αλλά και στο stackoverflow που έχει παρόμοιες ερωτήσεις, καμιά δεν απαντά στην ουσία.

Το μόνο που συμπέραινα είναι ότι δεν χρειάζεται αρχικοποίηση η κλάση αλλά δεν έχω καταλάβει το πλεονέκτημα...

 

To 5 δεν χρειάζεται ανάλυση, έχω δει την εξηγηση σου παλαιότερα στο Προγραμματισμός· το άλλαξα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...

Η staticmethod είναι μια μέθοδος που δεν χρησιμοποιεί τα attributes της class/instance. Τη χρησιμοποιείς όταν θέλεις να κρατήσεις μια συνάρτηση μέσα στο namespace μιας κλάσης για λόγους οργάνωσης του κώδικα.

 

Ένα παράδειγμα χρήσης τους που θα δεις είναι όταν θέλεις να έχεις διαφορετικούς constructors

class Vector(object):
    def __init__(self, x, y, z):
        self.x, self.y, self.z = x, y, z

    @staticmethod
    def from_vectors(v1, v2):
        v = v2 - v1
        return Vector(v.x, v.y, v.z)

    @staticmethod
    def from_coords(coords):
        return Vector(*coords)
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...