Pylint för att göra statisk kodanalys av din kod

  • Författare
  • Meddelande
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Pylint för att göra statisk kodanalys av din kod

Inlägg21 aug 2014, 08:44

Statisk kodanalys är när ett program analyserar din kod och ser om det följer vissa regler. I kursen python används Pylint som verktyg för att kolla din kod.

Pylint kan göra med än att analysera din kod, men det är mest därför den används i kursern. Däremot kan det vara en god idé att du själv kollar in Pylint och lär dig använda det. Om inte annat kan du använda det till att generera dina UML-diagram för koden.

Nåväl, Pylint analyserar din kod enligt Pythons kodningsstandard PEP8. Dessutom har Pylint lagt till lite egna regler. Pylint kontrollerar också om ditt program är korrekt strukturerat och inte innehåller några uppenbara felaktigheter.

Ibland vill man se en översikt av de tester som Pylint gör, varje test har en id-siffra som kan användas för att referera till en test. Till exempel så innebär koden C0111 att du har glömt kommentaren, docstring, överst i Python-filen.

Så här kan det se ut när du får felmeddelandet (på studentservern):
Kod: Markera allt
sweet~/dbwebb-kurser/python: pylint -r n --rcfile ./.pylintrc --include-ids y me/kmom01/hello/hello.py
************* Module hello                                                                             
C0111:  1,0: Missing docstring                                                                         


Normalt använder du bin/dbwebb validate för att köra valideringen. Men det är bra att veta hur pylint-kommandot körs i bakgrunden.

Ibland tycker man att pylint inte skall bry sig om hur man skriver sin kod. Då kan man ignorera vissa av reglerna i en pylintrc-fil. Det gör vi och vår variant av pylintrc finns i kursrepot. Den filen uppdateras efterhand som vi lyckas uppfostra Pylint.

Om du får ett valideringsmeddelande som du inte tycker är fullständigt relevant och röstar för att det skall in i pylintrc - då skriver du ett foruminlägg här och förklarar din syn på saken. Pylint skall vara en hjälp, men det är också ett verktyg som styr oss så att vi skriver kod som andra kan känna igen, läsa och underhålla.

Så, frågor eller funderingar?
...
..:
.... /mos
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg21 aug 2014, 08:46

På studentservern körs en äldre version av Pylint. Jag har bett dem att uppdatera den.

Kod: Markera allt
sweet~/dbwebb-kurser/python: pylint --version       
No config file found, using default configuration   
pylint 0.25.1,                                       
astng 0.23.1, common 0.58.0                         
Python 2.7.3 (default, Mar 14 2014, 11:57:14)       
[GCC 4.7.2]                                         
...
..:
.... /mos

grni14

html-kodare

  • Inlägg: 19
  • Blev medlem: 31 aug 2014, 20:04

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg12 sep 2014, 11:24

Har pylint uppdaterats nu? Till skillnad från igår så får jag nya varningar idag, särskilt om jag kör validate me
Warning: option include-ids is deprecated and ignored.
Trailing Whitespace
Anomalous backslash in string
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg12 sep 2014, 11:52

grni14 skrev:Har pylint uppdaterats nu? Till skillnad från igår så får jag nya varningar idag, särskilt om jag kör validate me
Warning: option include-ids is deprecated and ignored.
Trailing Whitespace
Anomalous backslash in string


Japp, lite bryskt så.

Vi behöver se över kodbasen nu, kanske måste pylint uppfostras så att vissa felmeddelanden ignoreras.

Dyker sånt upp så visa gärna koden och pylints felmeddelande så kikar jag på det direkt.
...
..:
.... /mos
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg12 sep 2014, 11:55

Shit. Mycket fel blir det.

Jag börjar se över exempel-katalogens felmeddelanden och supresser de jag inte anser vara rimliga.
...
..:
.... /mos
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg12 sep 2014, 15:37

Okey. Pylint uppgraderades på studentservern. Tidigare hade vi en (äldre) version som var kopplad mot python2. Nu finns en nyare version som är kopplad mot python3.

Det innebar att det blev en del valideringsfel i kursrepot och det innebär troligen att du får en del nya valideringsfel att rätta till.

Ta det som en bra sak. Vi låter pylint styra upp vår kod så att den blir bättre och bättre. Det skadar inte med en extra hjälpreda (pylint) som hjälplärare.

Exempelmappen hade en del valideringsfel och det fanns valideringsfel i me/default/mos-me-filerna.

För att fixa ditt kursrepo gör du så här:

Kod: Markera allt
# Ställ dig i rooten av kursrepot
bin/dbwebb update
rm me/mos-me.cgi
rm me/mos-me.py
bin/dbwebb init


Kommandona hämtar hem de senaste ändringarna från GitHub, tar bort de filerna som är berörda i din me-katalog och kopierar sedan tillbaka de nya versionerna från katalogen me/default.

Kvar är nu valideringsproblem med dina egna filer.

Det "största" problemet är troligen relaterat till ascii-bilden på Marvin. Du får kika i koden för me/mos-me.py och i koden example/marvin/marvin.py för att se hur jag ändrade hanteringen av strängen som blir bilden på Marvin.

Med hjälp av det löser du säkert de valideringsfelen. Annars hojta.
...
..:
.... /mos

grni14

html-kodare

  • Inlägg: 19
  • Blev medlem: 31 aug 2014, 20:04

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg27 nov 2014, 11:07

Kod: Markera allt
Too many instance attributes (8/7) (too-many-instance-attributes)
Too many arguments (6/5) (too-many-arguments)
Too many public methods (21/20) (too-many-public-methods)


Jag hade problem med detta tidigare, men i synnerlighet i kmom10 är detta ett rätt stort problem för mig pga alla rum och objekt som blir, samt pga alla olika kommandon som man kan göra på objekten.

Skulle man kunna stänga av dessa?
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg01 dec 2014, 11:14

Ja, du kan stänga av dem i projektet, gör det per fil med en kommentar som ser ut (ungefär) så här, överst i varje fil:
Kod: Markera allt
# pylint: disable=wildcard-import, method-hidden


Skriv sedan i din redovisning att du gjort det och varför.
...
..:
.... /mos
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg12 dec 2014, 15:21

Jag disablade too-many-instance-attributes i python-kursens .pylintrc.
...
..:
.... /mos

erbc15

javascriptare

  • Inlägg: 31
  • Blev medlem: 20 jan 2015, 12:11

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg17 feb 2015, 17:30

Pylint gnäller att "final newline missing" och jag begriper inte riktigt när. Nån som har koll?

Dessutom tycker den inte om att jag använder tabbar istället för mellanslag för indentering. Är det verkligen så pass strikt med det? Jag föredrar större mellanrum.
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg17 feb 2015, 17:50

Du kan ställa in hur många mellanslag som ska använda som indentering när du kör softtabs. Men jag tror att vi i kursen och med jslint ska använda 4 spaces, vilket även är default för en vanlig tab-storlek.

Om du saknar en newline så betyder det att du alltså saknar en ny rad på sista raden i dokumentet. Lägg till en ny rad där och se om det löser sig.
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."
Användarvisningsbild

maulinglawns

html-guru

  • Inlägg: 64
  • Blev medlem: 19 jan 2015, 11:11

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg17 feb 2015, 21:18

Installerade pylint lokalt för att slippa validera mot servern hela tiden. Det funkar finfint om man bara använder samma
Kod: Markera allt
.pylintrc

Som används för kursen (https://raw.githubusercontent.com/mosbt ... /.pylintrc)

Kod: Markera allt
cd $HOME
wget https://raw.githubusercontent.com/mosbth/python/master/.pylintrc


Dock är det bra om man då slår på rapporter, annars blir det tämligen meningslöst. Ändra från:
Kod: Markera allt
reports=no

till
Kod: Markera allt
reports=yes

med...
Kod: Markera allt
sed -i".bak" 's/reports=no/reports=yes/' .pylintrc

eller en editor. Sen är det bara att köra.

Med bästa hälsningar
Användarvisningsbild

maulinglawns

html-guru

  • Inlägg: 64
  • Blev medlem: 19 jan 2015, 11:11

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg19 feb 2015, 10:12

Hmm... av någon underlig anledning får jag inte pylint att fungera med Debian (Wheezy). Bara med mitt Arch Linux-system.

Spelar ingen roll om jag installerar med pip eller apt-get, blir en rejäl krasch när jag försöker använda programmet.

Orkar inte riktigt gräva i det här nu, men om någon annan har en idé om varför pylint + Wheezy inte spelar ihop får ni gärna hojta till.

Med bästa hälsningar
Användarvisningsbild

gostal

css-guru

  • Inlägg: 77
  • Blev medlem: 05 sep 2014, 10:37

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg03 mar 2015, 17:00

Nu börjar jag närma mig taket för antal rader i modulen marvin. Jag kan lösa det genom att dela upp marvin i marvin1 och marvin2 om det är OK. Det borde väl gå att köra t.ex. bin/dbwebb validate marvin1 och marvin2 respektive.
gostal
:-^^-:
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg03 mar 2015, 17:05

gostal skrev:Nu börjar jag närma mig taket för antal rader i modulen marvin. Jag kan lösa det genom att dela upp marvin i marvin1 och marvin2 om det är OK. Det borde väl gå att köra t.ex. bin/dbwebb validate marvin1 och marvin2 respektive.


Vad heter det felmeddelandet? Jag kan tänka mig att avvaktivera det i .pylintrc. Jag vet att några fått bekymmer med det i projektet. Egentligen är det säkert en rimlig gräns på felet som det är men inom ramen för kursen kan jag ändå tänka mig att ta bort det.
...
..:
.... /mos
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg03 mar 2015, 17:07

maulinglawns skrev:Hmm... av någon underlig anledning får jag inte pylint att fungera med Debian (Wheezy). Bara med mitt Arch Linux-system.

Spelar ingen roll om jag installerar med pip eller apt-get, blir en rejäl krasch när jag försöker använda programmet.

Orkar inte riktigt gräva i det här nu, men om någon annan har en idé om varför pylint + Wheezy inte spelar ihop får ni gärna hojta till.


Jag kör Debian/Sid och jag vill minnas att jag installerade via apt-get. Vad jag minns hade jag inget bekymmer att få det att fungera (men man/jag glömmer snabbt...)
...
..:
.... /mos
Användarvisningsbild

gostal

css-guru

  • Inlägg: 77
  • Blev medlem: 05 sep 2014, 10:37

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg03 mar 2015, 20:47

mos skrev:Vad heter det felmeddelandet? Jag kan tänka mig att avvaktivera det i .pylintrc. Jag vet att några fått bekymmer med det i projektet. Egentligen är det säkert en rimlig gräns på felet som det är men inom ramen för kursen kan jag ändå tänka mig att ta bort det.


Nu bantade jag ner filen genom att ta bort en bunt med kommentarer som jag sparat av inlärningsskäl. Jag ligger nu på 986 rader vilket får mig att gissa att gränsen låg någonstans kring 1000 rader. Ska försöka komma ihåg att meddela namnet på felet när jag slår i taket igen. Känns lite onödigt att lägga in en bunt med rader enkomt.
gostal
:-^^-:
Användarvisningsbild

maulinglawns

html-guru

  • Inlägg: 64
  • Blev medlem: 19 jan 2015, 11:11

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg04 mar 2015, 11:23

mos skrev:
maulinglawns skrev:Hmm... av någon underlig anledning får jag inte pylint att fungera med Debian (Wheezy). Bara med mitt Arch Linux-system.

Spelar ingen roll om jag installerar med pip eller apt-get, blir en rejäl krasch när jag försöker använda programmet.

Orkar inte riktigt gräva i det här nu, men om någon annan har en idé om varför pylint + Wheezy inte spelar ihop får ni gärna hojta till.


Jag kör Debian/Sid och jag vill minnas att jag installerade via apt-get. Vad jag minns hade jag inget bekymmer att få det att fungera (men man/jag glömmer snabbt...)

Ah... det är möjligt att det funkar i unstable. Jag kör stable (Wheezy).
Men, inget problem, jag kan validera via mitt Arch-system.

För övrigt... ja tack, ta gärna bort den övre gränsen i pylint vad gäller antal rader om det är okej.

Edit: Det är uppenbarligen C0302 som ska ändras/tas bort i sådana fall:
http://pylint-messages.wikidot.com/messages:c0302

Med bästa hälsningar
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg04 mar 2015, 14:06

Oki, ökade gränsen till 5000 rader:
https://github.com/mosbth/python/blob/m ... rc#L19-L21
...
..:
.... /mos
Användarvisningsbild

maulinglawns

html-guru

  • Inlägg: 64
  • Blev medlem: 19 jan 2015, 11:11

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg04 mar 2015, 15:54

mos skrev:Oki, ökade gränsen till 5000 rader:
https://github.com/mosbth/python/blob/m ... rc#L19-L21

Tack. Fixade iofs till min fil och lade ut lite grejer externt till en modul, men det känns skönt i alla fall.

nist

html-guru

  • Inlägg: 66
  • Blev medlem: 01 sep 2014, 15:18

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg26 mar 2015, 17:37

Jag använder mig av x som open-mode med open() för att skapa en ny fil om det inte redan finns en vilket fungerar men det går inte igenom Pylint. Jag har testat köra min kod genom den senaste versionen av Pylint lokalt vilket inte ger något felmeddelande. Antar att Pylint som används på servern behöver uppdateras för att x ska accepteras som open mode. Är detta något ni skulle kunna göra eller ska jag skriva om koden på ett annat sätt?

Kod: Markera allt
with open(filename, 'x') as file:
    file.write(req.text)

Ger felmeddelandet:
"x" is not a valid mode for open. (bad-open-mode)
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg26 mar 2015, 18:32

nist skrev:Jag använder mig av x som open-mode med open() för att skapa en ny fil om det inte redan finns en vilket fungerar men det går inte igenom Pylint. Jag har testat köra min kod genom den senaste versionen av Pylint lokalt vilket inte ger något felmeddelande. Antar att Pylint som används på servern behöver uppdateras för att x ska accepteras som open mode. Är detta något ni skulle kunna göra eller ska jag skriva om koden på ett annat sätt?

Kod: Markera allt
with open(filename, 'x') as file:
    file.write(req.text)

Ger felmeddelandet:
"x" is not a valid mode for open. (bad-open-mode)


Hmm. Felet är korrekt för python2, men inte för python3. Jag får kolla upp om det är en versions-grej på servern eller varför det uppkommer.
http://docs.pylint.org/features.html#id24
https://docs.python.org/2/library/functions.html#open
https://docs.python.org/3.4/library/functions.html#open

På studservern kör vi:
Kod: Markera allt
seekers~: pylint --version
No config file found, using default configuration
pylint 1.3.1,
astroid 1.2.1, common 0.62.1
Python 3.2.3 (default, Feb 20 2013, 17:02:41)
[GCC 4.7.2]


Vilken version kör du lokalt? (ska kolla på min egen maskin när jag kommer hem).

Du kan göra locally disable på meddelandet, om du vill, eller bara låt det vara. Det är ju inget fel.
http://docs.pylint.org/faq.html#is-it-p ... ar-message
...
..:
.... /mos

nist

html-guru

  • Inlägg: 66
  • Blev medlem: 01 sep 2014, 15:18

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg26 mar 2015, 19:04

Ser nu att Python 3.2.3 används på servern och att open mode x inte kom förrän version 3.3. Det kanske är därför den varnar?

https://docs.python.org/release/3.2.3/l ... =open#open
https://docs.python.org/release/3.3.0/w ... -and-types

Jag kör:
pylint 1.4.3,
astroid 1.3.6, common 0.63.2
Python 3.4.2 (default, Jan 7 2015, 11:57:48)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)]
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg29 mar 2015, 02:31

Yepp, där har vi svaret. Det går inte använda 'x' i kursen eftersom det är en äldre version av Python på servern. Ska kolla med IT när de uppgraderar, men det är troligen under sommaren. Så pylint hade "rätt".
...
..:
.... /mos

dreas94

html-kodare

  • Inlägg: 10
  • Blev medlem: 25 mar 2015, 13:08

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg29 mar 2015, 22:59

Jag får dessa felmedelanden när jag försöker validera
C:471, 0: Missing function docstring (missing-docstring)
C:492, 0: Missing function docstring (missing-docstring)
C:516, 0: Missing function docstring (missing-docstring)
koderna som står på dessa rader är
def prod_nr(p1, p2):

def funny_word(word):

def in_range(argument):

Fattar inte varför jag skulle behöva """ där
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg30 mar 2015, 10:10

Varje funktion ska ha en doccomment som förklarar vad funktionen gör och är till för.
T.ex:
Kod: Markera allt
def prod_nr(p1, p2):
   """
   Returns the product of two numbers
   """
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."

Jason

på gång

  • Inlägg: 3
  • Blev medlem: 13 jan 2015, 16:30

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg08 apr 2015, 10:09

So I've hit quite a roadblock with pylint, and things are even more confusing.

For starters, my kmom02 stuff was graded, so I went back and fixed the one minor thing that was wrong and attempted to validate. Suddenly, there are several pylint errors, none of them having to do with the one alteration I made. I assume there was an update between the original post and now. In any case, all of my attempts to fix the problems that it claims to be there, are not helping.

The errors I continue to get are: Wrong continued indentation (bad-continuation)

It doesn't matter what I do, these errors do not go away. Also, there are several other spots that are written exactly the same way, yet do not get those errors. Trust me when I say that the things that have errors do not have added white space in any way, and are literally written in an identical matter to the code that actually works.

In general, I find using pylint a constant frustration with this class even when things go smoothly, as I have to constantly use cygwin to validate instead of getting more instant feedback. I attempted to remedy this by downloading a Visual Studio plugin that lets me code python and also allows me to use pylint directly in the IDE. I'm currently working to make it so that the pylint it uses is the same as this course, although I'm such a n00b when it comes to this stuff.

So yeah, I've spent far more time trying to deal with pylint issues than I actually spend coding python. None of my code has any actual problematic code that pylint is helpful for. It's always minor syntax-control stuff.
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg08 apr 2015, 10:44

Jason skrev:The errors I continue to get are: Wrong continued indentation (bad-continuation)

This sounds like you are mixing softtabs (tabs consisting of spaces) and hardtabs (just tabs, without spaces). Make sure everything is softtabs.
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg08 apr 2015, 12:41

Jason skrev:So I've hit quite a roadblock with pylint, and things are even more confusing.


When in need of help, do like this - validate, publish the result and ask "how to get rid of this message".
Kod: Markera allt
$ bin/dbwebb validate kmom02


At the end of the script a path to a logfile is displayed.
Kod: Markera allt
less -R '/Users/mikaelroos/.dbwebb-validate.log'


Make a gist out of that logfile. Link to the gist.
That gives us all the tools we need to work with.
...
..:
.... /mos

Jason

på gång

  • Inlägg: 3
  • Blev medlem: 13 jan 2015, 16:30

Re: Pylint för att göra statisk kodanalys av din kod

Inlägg09 apr 2015, 10:45

Here is the gist:
https://gist.github.com/MookieRah/0a9653e216305e3b3ffc#file-gistfile1-txt

I gotta mention something first. I re-validated the code and got 4 wrong continued indentation errors (line 80, 105, 148, and 164). I noticed that the line of code that wasn't a problem used three quotations for the print (line 89), so I just stuck three quotations onto the first error I got at line 80. I re-validated and it showed as only one error, on line 89, which was strangely just fine a second ago. So I then go back, remove the triple quote in an attempt to get the original errors, and now it's saying the only error is on line 89. The linked validation is the last attempt, which should have given me multiple errors.

So in recap: I changed a single quote to a triple quote, which turned 4 errors into 1. I switch it back, and I still get only one error. I have no clue what is going on.

I published the code as is on my server: http://www.student.bth.se/~jasm15/dbwebb-kurser/python/me/kmom02/marvin1/marvin.py

I also made a gist of my code here: https://gist.github.com/MookieRah/a001f0ed957c898c2f59#file-marvin1-py

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 19 gäster