Using and Mastering Cookiecutter Transcripts
Chapter: Programmatic Cookiecutter: Using the API
Lecture: Gathering game maker data
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
Okay let's begin having this program, which if I run it does nothing so far. Let's begin by having it have a cool little output here,
0:09
so I'll call this print_welcome() or something like that, we'll create this function, and we'll put that there, let's move that below main, okay,
0:18
now if we run it, it says welcome to the game creator, we'll create either hi-lo, pacman, or pong for you,
0:23
so this is slightly better experience, I understand this is not that big of a deal, but, it's still cool that we have a little bit of a
0:32
welcome to the game creator type thing going on here, the first thing that we're going to do is we're going to gather the inputs,
0:38
so we want to ask them questions like hey what's your name, and what kind of game do you want to make,
0:43
basically the things that Cookiecutter would ask and potentially other ones as well, but remember, in Cookiecutter, we have the Cookiecutter defaults
0:50
so it already knows what my name is, it already knows what my GitHub username is, things like that.
0:56
So as much as possible, we would like to just leverage the defaults and not even ask, right, just go hey we got the default values,
1:01
but how do we do that, well, that's the first step into the Cookiecutter API. So when I come over here and say import cookiecutter
1:09
and there is a bunch of stuff here, we're going to get the cookiecutter.config Now, let's go down here at the gather inputs,
1:15
and we're going to say the config = cookiecutter.config.get_user_config() Now, it seems like that is what you might want to have here,
1:24
okay, you might want to say this, but it turns out if we just print this out, this is actually not what we're looking for, if we look here,
1:32
this is the, it's like the full thing, and then down here, there is this default context and in the default context we have our name,
1:38
our email and so on, so it's really the default context that we want, so let's maybe say something like this, ctx = config.get('default_context')
1:48
this is just the dictionary, so now, if we print out our context, I think that's what we're looking for, perfect,
1:54
so we can grab like full name and store it. So once we have this, we can start writing code like this,
2:00
so we can say if, we'll say full_name = ctx.get('full_name') right and this get function on a dictionary in Python will return none if it's not there,
2:11
or it will return value for this, so we'll just say if we found a full name, let's say if we didn't find the full name, then we'll say full_name =
2:20
and we'll have to ask and let's see, what else do we need to do that for. We have to figure out what type of game it is,
2:27
so we can ask a similar type of question, this time, I don't really think there is a reasonable default
2:33
like somebody doesn't always want to make Pacman or something and let me just tell PyCharm this is not misspelled, so it doesn't look wrong to you.
2:39
So we can figure out the game type that's going to be fun, and let's figure out the package name,
2:46
so we'll say do an input('What do you call your game?') Now, they might have spaces, a punctuation, all that kind of stuff,
2:54
so I wrote a function here that we can take and transform package name and we'll say to package style, right,
3:01
what this is going to do if you just look down here, it's going to get rid of all the white space and double spaces and things like that,
3:07
it's going to kind of normalize it, it's like what we've seen before with the project slug but this is actually more robust than that.
3:13
We can also ask questions like where do you want to create it, so let's come down here and ask this, we can even ask it in a loop,
3:18
in case it get it wrong, now, this I am not sure how great of a user experience this is, but I am pointing this out
3:24
because this is not possible in Cookiecutter, and it is possible here, so we can ask like this, we can come down here
3:30
and say what is the full path to where your project, where you are going to create it, give us a directory,
3:35
and if they give us something wrong, instead of just trying to create it and fail,
3:39
we can go no, no, actually that directory you gave us, that didn't work, let's try it again, give us another directory, right,
3:46
so because we're doing this in our own code, we have our own flexibility, and just to be clear, this doesn't have to be Python code,
3:50
this could be any code, any code that we want to write this in as long as we can somehow shell out to interact with Python for the API.
3:57
Okay, so let's add that to the top there, okay, so we have our working directory, and then I think we'll have everything we need to create the game.
4:06
Now, one final thing I'd like to do is package this up a little bit, and I really like returning a bunch of data in the form we would have to there
4:13
so let's go and create using a named collection here, let's go and create a game create info, and it's going to have a project name,
4:22
full name, game type, a working dir, surprise, those are the things we needed and let's have that function here return it.
4:28
so we can come down here and just say actually, let's just return this. So we'll need project name, we'll need full name, game type,
4:37
and working dir. package name, not project name. So that is going to create it, and let's just make sure this first part is working,
4:46
I'll just print out the create info and then I want to come back
4:50
and we are going to actually do the building in a minute, let's run it see what we get. So let's come down here I want to play Pong,
4:56
okay great, I am going to call it "The great ping pong", the full path will just be this, boom, we're going to create this directory
5:07
and there is the full name, notice, it didn't ask me what my full name was, right, because it got it from the defaults. the game type is Pong,
5:15
and the working directory is just right here. Okay great, so it looks like we're gathering the inputs perfectly well here.
5:21
The next thing we need to do is actually use those inputs to build the game and this is where we're going to execute the Cookiecutter template.