📺 Develpreneur YouTube Episode

Video + transcript

Introduction To Swagger With Python

2023-10-03 •Youtube

Detailed Notes

This video looks at one piece of our URL shortener solution. We have an API that we built and want to be able to provide documentation easily. We do this by embracing Swagger.

You can find out more through our online classes at https://school.develpreneur.com and register for free. Registration will add you to our email list and you will periodically receive coupons for courses as well as notifications of the latest releases.

Transcript Text
well hello and welcome back and we are
continuing messing around with our
shortener and we're specifically going
to be doing some updates to our API and
specifically we're going to cover a
couple of things that we want to do
which is basically answering the
question how do I document my API and
we're going to do a thing deal with a
thing called Swagger which is
a very useful tool as you're going to
see fairly quickly we're going to do
this into two parts because it's going
to take a little bit because we're first
going to have to actually tweak our code
a little bit to make it more say Swagger
friendly and then we're going to talk a
little bit more about how we can make
our stuff really look clean
so now last summer round we had our API
look roughly like this we've actually
updated it on the delete but I'm just
sort of going back to our essentially
the problem here being that our format
is we have this shorten and within that
we basically just look at the request
method and we say Okay within that how
are we going to handle it so if it's a
post we're going to go do that if it's a
get we're going to do that
when we switch over to Swagger it is
going to want to what it's going to do
is it's going to give us something
that looks like this and actually let me
blow this up a little bit
so what we've got is it and it is
documentation so if we click on this
we're going to see here's what all of
our endpoints are and we can actually
click on it and we can see
what it looks like we can actually even
test it this is currently running so I
can do try it out if I do a Hello and I
execute it there's no parameters for it
then it says okay so here's roughly what
a curl would look like
here's what the response over the
request URL looks like boom here's what
the response was
and I can do it and play around with it
but here everything is a Json response
so we're just gonna that's what it's
going to kick it back and it says hey
here's a response code much like if we
went over to our Postman and we just did
a uh I believe this is
hello we just call it hello
then yep you're going to get the same
thing
get that back there so there you go
so
this documentation and I can clear it
this allows us to very quickly as we're
going to see document our API and make
it useful for other people
now in our case there's not a whole lot
we need to do but as you get a more
complicated API this becomes incredibly
valuable
it is very useful to have a way to go in
in particular things like this so I
could go in and I can actually run a
query
and try it out and see what it looks
like without having to set up Postman
without having to set up all of this
other stuff as long as the API is out
there running I can test it and I can
test it live as it is this is
automatically updating documentation and
if you say wow that's awesome well
that's what we're going to talk about
that's what we're going to do it so
the first thing I want to mention is
that when we first did this with the
apis we took this approach we are going
to actually change it and it's not that
we're going to change it a lot
so this is what we had
and what we're going to do is we're
going to change it over to this and
we're going to use some decorators
because this is going to now become very
important for how we call our make our
API calls we had them before but we're
going to tweak them just the slightest
bit
and we're going to be able to add some
documentation
so that's our first step and all we have
to do is each of these IFS
is going to become a function with that
name
so for example here since we have very
simple stuff all we have to do is we're
going to take this post we're going to
create a function called post
we're going to have resource that's
going to be sent to it
and they're going to return the Json of
the result so as you can see here before
we were saying if the method's post
which is going to come in here shorten
is our class and this is our endpoint
and it's got methods of get post and
delete so we've got for example post
we're going to come in and all we're
going to do is going to retrieve the New
York URL based off the form jsonify the
result convert that to Json and return
it which is almost exactly what we did
before
and we're going to do that for each of
our methods I'm not going to
and what we did here if you remember you
know we'd come through and everything we
called it and then we jsonify it but now
it's we're going to just do that at each
level so it's just the slightest bit of
code change for us to do this
that gives us now that we've got a class
for basically each endpoint and then
we've got so we've got our heartbeat
which is hello and this is our route and
then we've got within it we we don't
actually say anything we're going to
assume to get but we could
just easily
do it this way and say that it has a get
a post and a delete
and if you look at our documentation by
default it has a get
if we change it to specifically state
that it has a get
and we come back and run it
then yeah we see the same thing
now if we wanted to do a uh let's do a
delete
let's see is here if we do a delete
and return
let's say sorry
delete is not available
and we reset it
then we're gonna see here
delete is now available notice they're
actually color coded we could go in here
we could try it out execute it
delete is not available there you go and
we can even you know there's a bunch of
stuff we can do with this but the key
here is that we get to do our
um where I want to oh I'll roll that
back up
I want to do is be able to see our
endpoints and our documentation and it's
as you can see fairly full featured it's
like okay what are the parameters what
are the responses now you'll note
we have as we've seen before there's
like a default there's no problem
parameters and you have a code of 200.
now there may be other ones that it
returns but we'll talk about that in
essentially in part two
I want to do is just get us started on
this for this part
now the thing that we need to do before
is we had flask
and we had jsonify and we had requests
and we were using shortener and flask
CRS I believe we talked about that and
it was basically just to avoid uh
cross-site issues what we're going to do
is we're going to bring in this thing
called flask rest X and all you have to
do to bring it in is do a pip 3 install
flask underscore rest x r e s t x and
when you do that boom you're going to be
able to do it
go run through your stuff it'll install
and you're going to want resource which
is this thing that we see here you're
going to want API
now before
we used app equals flash name just gets
us going it's like boom we've got our
API remember flask is super easy so we
use app and we're off and running
however
what we're going to do for the
documentation side of it is we're going
to create this new thing called API and
we're going to use the flashed risk the
flask rest X very difficult to say
quickly API and we're going to use app
we're going to stuff it in there so
we're basically just going to wrap
around
our app this API stuff
and we're still going to do the cores on
the app not the API API itself now you
can do
uh the most basic version
is if you just wrap it you're going to
get
a bunch of default stuff
so I'm going to come in here if I go
look at my documentation then it's just
API it assumes version 1.0
there you go
I know there's some things that we can
add here which is what I did so here I
add that hey this is going to be version
1.0
the title is a shorty API and a
description I'm going to say like okay
I'll change a little bit but here are
the
calls and examples for the shorty API
dplink.us
for more information
so we can do that
and when we do that let's see so we'll
go look at what that looks like
and now what we're going to see is now
our title is shorty API instead of just
API we have a base URL we have a version
that we did and then we've got this
little documentation section now we can
get pretty complex with this
um I believe we can do let's do this
um I'll just do this
just because
but we're going to look a little bit
more at some of the tags and stuff that
you can do so if I do this I think I can
do straight up HTML
and if we do so
there we go so I've got author I've got
this is HTML text so I can actually get
pretty impressive with that base URL
I believe is just base URL
so I could say if for reasons it's
something else
let's just say it was last it was Slash
shorty
I think that'll work
I'm playing around with this a little
bit but as you whoops as you can see
oh that wasn't it okay
however we're not going to mess with
that we'll come back with a little bit
some more ways that we can do it but
it's basically we can like do some
fairly you know complicated stuff here I
wonder if author
apologies as I'm thinking through this
but there's a lot of little things in
here as you see with most Auto
documenting things
oh okay
uh oh I forgot my comma
if I go here
yeah this author doesn't give me
anything but there's probably some tags
in there if I go look at the
Swagger API then I can look at there's
going to be other tags that I can do to
that
if you want to look to swagger.json this
tells you
basically everything that's come through
so this is how it generated
this Swagger dock so you could actually
generate something you know you could
make some changes and do some funky
stuff if you want to that's not
something we're going to talk about
right now so
documentation wise you can now see
what it is that all these endpoints are
and we can actually get into some of the
specifics Now by default
we notice that there aren't any
parameters so I do
so we can get something useful I want to
get you tell you how I got to this one
because I'm going to do that actually
through all of these so this is uh the
get
and notice here it's like here it says
hey this is a short URL you want to
decode and it's a string
that it's looking for and if I try it
out
I can enter a URL
yeah
let me go enter a URL that makes sense
um
I think six will give me
something yeah
so if I use this as my URL
I'll come back over here I kick that in
then I'm going to see right here
uh here we go here's my output
so code was 200 there you go if I do
something it doesn't like
um let's see if I do this I think it'll
blow it up yeah
so if I take
this
I'm also going to see if I go here V
execute then I see data
negative one error so I'm gonna get I
can actually play around with this like
I said just like if I'm sitting in
Postman
I can make the calls and actually get
something you know fairly useful out of
it so I can do a lot of testing before I
even set up anything else I can do it
right in here with swagger and notice
that
basically all I'm doing is that all I
did is I just basically have my routes
now the exceptions are
we went ahead here and we created
methods for each of them and so we did
two you know we did it a little bit
differently but not much
and now here is where so we've got this
at API dock so I can do this pretty much
anywhere that I want to
so what I could do is I could say that
I'm sending a URL for each of these but
I'm not going to because I'm going to
well actually let's do it that way
so if I want to cheat
I can do this and now this is going to
be up at that level
let's take a look at what this looks
like
so when I do it up at the class level
so each of the shortens now
have URL
as the
as a parameter so if I try it out
with post
there we go okay so if I want to do a
HTTP colon
my cool URL
.com and I execute it
and in this case it's because my it's a
post as opposed to just a regular
parameter so it's actually going to blow
up because it didn't come up as a form
so what I really want to do is I want to
take this down
and I'm going to do it on the get
post
but now here I'm going to need a form
URL
that I'm going to have to deal with in
order to actually post it properly
because here
uh let's see yeah see it just it did it
as a parameter as opposed to a a form
parameter a form param so we're going to
talk about that next time around let me
get a little deeper into it but right
now what we've got is something that
we've really changed almost nothing and
we have some pretty good you know
documentation that we can do here now we
can also do some other stuff like uh
here
uh API dock
there's a lot that we can do here but we
could basically say
um
and I've got to remember what it is but
let's just do well let's just do like a
straight up
which is a test
Bit O
documentation I think it has to have a
name I don't think it does it as a
straight up string I don't think it's
going to like that we're going to find
out
if we come back
yeah so it's not going to give us
anything terribly useful we just didn't
it doesn't know where to assign it
so we're going to step into this a
little bit more next time around I want
to give us just a basic so right now you
could sit here and
create a pretty solid document
next time around we're going to add some
more things show you where to look to
add your own features because a lot of
this as you've seen is pretty full
featured it's just a matter of knowing
what those features are so we will get
back to you next time thanks a lot for
your time if you have any questions send
it out to email at info
developmentor.com you can see some links
around this YouTube site as well as some
of the other places check out
school.developreneur.com if you want to
get a little more involved in some of
this kind of stuff and uh definitely let
us know what your you know some of the
maybe the apis that you're building and
some of your little documentation things
that you've figured out and uh stick
around next episode we're going to get a
little deeper into it have yourself a
great day we will talk to you next time
[Music]
thank you
Transcript Segments
0.24

well hello and welcome back and we are

3.6

continuing messing around with our

5.22

shortener and we're specifically going

7.379

to be doing some updates to our API and

10.8

specifically we're going to cover a

13.62

couple of things that we want to do

14.759

which is basically answering the

16.5

question how do I document my API and

19.32

we're going to do a thing deal with a

20.699

thing called Swagger which is

22.92

a very useful tool as you're going to

24.9

see fairly quickly we're going to do

26.939

this into two parts because it's going

28.26

to take a little bit because we're first

29.64

going to have to actually tweak our code

32.579

a little bit to make it more say Swagger

36.3

friendly and then we're going to talk a

38.76

little bit more about how we can make

40.5

our stuff really look clean

43.379

so now last summer round we had our API

48.36

look roughly like this we've actually

51.42

updated it on the delete but I'm just

52.98

sort of going back to our essentially

55.079

the problem here being that our format

57.3

is we have this shorten and within that

60.6

we basically just look at the request

63.18

method and we say Okay within that how

65.519

are we going to handle it so if it's a

66.78

post we're going to go do that if it's a

68.76

get we're going to do that

70.56

when we switch over to Swagger it is

73.5

going to want to what it's going to do

75.36

is it's going to give us something

77.7

that looks like this and actually let me

81.18

blow this up a little bit

86.46

so what we've got is it and it is

88.5

documentation so if we click on this

90.06

we're going to see here's what all of

91.92

our endpoints are and we can actually

94.08

click on it and we can see

97.439

what it looks like we can actually even

99.06

test it this is currently running so I

100.74

can do try it out if I do a Hello and I

103.259

execute it there's no parameters for it

105.84

then it says okay so here's roughly what

108.18

a curl would look like

109.68

here's what the response over the

112.02

request URL looks like boom here's what

114.42

the response was

116.1

and I can do it and play around with it

118.14

but here everything is a Json response

120.54

so we're just gonna that's what it's

121.74

going to kick it back and it says hey

123.119

here's a response code much like if we

126.24

went over to our Postman and we just did

129.899

a uh I believe this is

133.02

hello we just call it hello

136.62

then yep you're going to get the same

138.66

thing

140.58

get that back there so there you go

142.86

so

144.3

this documentation and I can clear it

146.94

this allows us to very quickly as we're

150.12

going to see document our API and make

153.48

it useful for other people

155.34

now in our case there's not a whole lot

156.959

we need to do but as you get a more

159.18

complicated API this becomes incredibly

162.239

valuable

163.319

it is very useful to have a way to go in

165.36

in particular things like this so I

167.58

could go in and I can actually run a

170.459

query

171.66

and try it out and see what it looks

174.18

like without having to set up Postman

175.8

without having to set up all of this

178.019

other stuff as long as the API is out

179.459

there running I can test it and I can

181.2

test it live as it is this is

184.56

automatically updating documentation and

187.68

if you say wow that's awesome well

190.86

that's what we're going to talk about

192

that's what we're going to do it so

194.58

the first thing I want to mention is

195.78

that when we first did this with the

198

apis we took this approach we are going

200.64

to actually change it and it's not that

202.26

we're going to change it a lot

205.14

so this is what we had

208.14

and what we're going to do is we're

210.12

going to change it over to this and

212.04

we're going to use some decorators

213.3

because this is going to now become very

215.159

important for how we call our make our

218.7

API calls we had them before but we're

221.159

going to tweak them just the slightest

223.14

bit

224.06

and we're going to be able to add some

226.2

documentation

227.94

so that's our first step and all we have

230.34

to do is each of these IFS

233.879

is going to become a function with that

237.42

name

238.62

so for example here since we have very

241.56

simple stuff all we have to do is we're

242.94

going to take this post we're going to

244.26

create a function called post

246.36

we're going to have resource that's

247.799

going to be sent to it

249.36

and they're going to return the Json of

252.239

the result so as you can see here before

254.34

we were saying if the method's post

257.04

which is going to come in here shorten

258.9

is our class and this is our endpoint

262.32

and it's got methods of get post and

264.3

delete so we've got for example post

266.639

we're going to come in and all we're

268.5

going to do is going to retrieve the New

269.759

York URL based off the form jsonify the

273.06

result convert that to Json and return

275.46

it which is almost exactly what we did

277.5

before

279.479

and we're going to do that for each of

282

our methods I'm not going to

286.8

and what we did here if you remember you

288.96

know we'd come through and everything we

290.4

called it and then we jsonify it but now

292.38

it's we're going to just do that at each

293.94

level so it's just the slightest bit of

296.34

code change for us to do this

300.139

that gives us now that we've got a class

303.24

for basically each endpoint and then

306.18

we've got so we've got our heartbeat

307.68

which is hello and this is our route and

310.74

then we've got within it we we don't

312.66

actually say anything we're going to

314.04

assume to get but we could

316.5

just easily

319.139

do it this way and say that it has a get

321.9

a post and a delete

323.759

and if you look at our documentation by

326.58

default it has a get

328.44

if we change it to specifically state

330.479

that it has a get

333.84

and we come back and run it

337.8

then yeah we see the same thing

341.1

now if we wanted to do a uh let's do a

345.18

delete

349.139

let's see is here if we do a delete

353.1

and return

355.919

let's say sorry

358.02

delete is not available

368.28

and we reset it

371.46

then we're gonna see here

374.88

delete is now available notice they're

377.34

actually color coded we could go in here

379.44

we could try it out execute it

382.38

delete is not available there you go and

384.6

we can even you know there's a bunch of

386.039

stuff we can do with this but the key

387.96

here is that we get to do our

390.96

um where I want to oh I'll roll that

394.259

back up

395.52

I want to do is be able to see our

398.1

endpoints and our documentation and it's

400.8

as you can see fairly full featured it's

404.039

like okay what are the parameters what

405.539

are the responses now you'll note

407.699

we have as we've seen before there's

409.68

like a default there's no problem

411.36

parameters and you have a code of 200.

414.72

now there may be other ones that it

416.039

returns but we'll talk about that in

418.44

essentially in part two

420.72

I want to do is just get us started on

422.94

this for this part

424.56

now the thing that we need to do before

428.52

is we had flask

430.979

and we had jsonify and we had requests

435.479

and we were using shortener and flask

438.479

CRS I believe we talked about that and

441.3

it was basically just to avoid uh

443.639

cross-site issues what we're going to do

446.099

is we're going to bring in this thing

447.18

called flask rest X and all you have to

450.539

do to bring it in is do a pip 3 install

453.479

flask underscore rest x r e s t x and

457.319

when you do that boom you're going to be

459.3

able to do it

460.5

go run through your stuff it'll install

462.86

and you're going to want resource which

465.479

is this thing that we see here you're

467.58

going to want API

469.38

now before

470.88

we used app equals flash name just gets

473.819

us going it's like boom we've got our

475.259

API remember flask is super easy so we

478.56

use app and we're off and running

480

however

482.16

what we're going to do for the

484.199

documentation side of it is we're going

486.9

to create this new thing called API and

489.78

we're going to use the flashed risk the

492.36

flask rest X very difficult to say

495.06

quickly API and we're going to use app

498.419

we're going to stuff it in there so

499.86

we're basically just going to wrap

501.12

around

502.319

our app this API stuff

505.5

and we're still going to do the cores on

507.18

the app not the API API itself now you

510.3

can do

512.58

uh the most basic version

515.039

is if you just wrap it you're going to

517.2

get

518.039

a bunch of default stuff

520.56

so I'm going to come in here if I go

522.599

look at my documentation then it's just

525.12

API it assumes version 1.0

528.42

there you go

530.459

I know there's some things that we can

531.779

add here which is what I did so here I

535.32

add that hey this is going to be version

536.76

1.0

538.5

the title is a shorty API and a

542.88

description I'm going to say like okay

545.22

I'll change a little bit but here are

547.2

the

548.279

calls and examples for the shorty API

552.12

dplink.us

556.22

for more information

561.42

so we can do that

563.22

and when we do that let's see so we'll

565.98

go look at what that looks like

571.44

and now what we're going to see is now

573.48

our title is shorty API instead of just

575.519

API we have a base URL we have a version

578.1

that we did and then we've got this

579.899

little documentation section now we can

582.18

get pretty complex with this

585.3

um I believe we can do let's do this

590.279

um I'll just do this

593.76

just because

595.8

but we're going to look a little bit

597

more at some of the tags and stuff that

598.68

you can do so if I do this I think I can

600.54

do straight up HTML

603.18

and if we do so

605.1

there we go so I've got author I've got

607.32

this is HTML text so I can actually get

610.62

pretty impressive with that base URL

614.399

I believe is just base URL

618.839

so I could say if for reasons it's

621.839

something else

623.06

let's just say it was last it was Slash

626.1

shorty

629.76

I think that'll work

631.32

I'm playing around with this a little

632.519

bit but as you whoops as you can see

638.519

oh that wasn't it okay

643.32

however we're not going to mess with

645.06

that we'll come back with a little bit

646.079

some more ways that we can do it but

647.22

it's basically we can like do some

648.779

fairly you know complicated stuff here I

651.6

wonder if author

653.519

apologies as I'm thinking through this

655.62

but there's a lot of little things in

657.66

here as you see with most Auto

659.04

documenting things

660.899

oh okay

664.019

uh oh I forgot my comma

669.3

if I go here

672

yeah this author doesn't give me

673.68

anything but there's probably some tags

675.18

in there if I go look at the

677.399

Swagger API then I can look at there's

681

going to be other tags that I can do to

682.62

that

684.06

if you want to look to swagger.json this

686.7

tells you

688.56

basically everything that's come through

691.26

so this is how it generated

694.32

this Swagger dock so you could actually

696.36

generate something you know you could

697.98

make some changes and do some funky

699.72

stuff if you want to that's not

702.12

something we're going to talk about

702.959

right now so

704.899

documentation wise you can now see

709.019

what it is that all these endpoints are

711.6

and we can actually get into some of the

713.399

specifics Now by default

716.22

we notice that there aren't any

717.66

parameters so I do

720.06

so we can get something useful I want to

722.459

get you tell you how I got to this one

724.74

because I'm going to do that actually

726.12

through all of these so this is uh the

729.48

get

730.26

and notice here it's like here it says

732.12

hey this is a short URL you want to

733.68

decode and it's a string

737.459

that it's looking for and if I try it

739.32

out

740.04

I can enter a URL

744.899

yeah

745.86

let me go enter a URL that makes sense

750.779

um

752.04

I think six will give me

755.279

something yeah

756.899

so if I use this as my URL

761.22

I'll come back over here I kick that in

763.579

then I'm going to see right here

767.12

uh here we go here's my output

771

so code was 200 there you go if I do

774.06

something it doesn't like

776.94

um let's see if I do this I think it'll

778.68

blow it up yeah

780.06

so if I take

781.68

this

784.26

I'm also going to see if I go here V

788.579

execute then I see data

791.639

negative one error so I'm gonna get I

795.66

can actually play around with this like

796.98

I said just like if I'm sitting in

800.04

Postman

801.899

I can make the calls and actually get

805.5

something you know fairly useful out of

807

it so I can do a lot of testing before I

808.74

even set up anything else I can do it

810.959

right in here with swagger and notice

813.36

that

815.94

basically all I'm doing is that all I

818.459

did is I just basically have my routes

821.1

now the exceptions are

824.16

we went ahead here and we created

825.839

methods for each of them and so we did

828

two you know we did it a little bit

829.32

differently but not much

831.06

and now here is where so we've got this

833.7

at API dock so I can do this pretty much

837

anywhere that I want to

839.88

so what I could do is I could say that

841.56

I'm sending a URL for each of these but

844.38

I'm not going to because I'm going to

846.18

well actually let's do it that way

848.339

so if I want to cheat

850.56

I can do this and now this is going to

853.5

be up at that level

855.24

let's take a look at what this looks

856.44

like

859.44

so when I do it up at the class level

864.899

so each of the shortens now

867.42

have URL

870.72

as the

873.18

as a parameter so if I try it out

876.3

with post

878.48

there we go okay so if I want to do a

881.82

HTTP colon

884.36

my cool URL

889.139

.com and I execute it

895.32

and in this case it's because my it's a

898.38

post as opposed to just a regular

901.199

parameter so it's actually going to blow

903.06

up because it didn't come up as a form

906.48

so what I really want to do is I want to

908.279

take this down

910.38

and I'm going to do it on the get

913.8

post

917.399

but now here I'm going to need a form

919.92

URL

922.92

that I'm going to have to deal with in

924.72

order to actually post it properly

926.94

because here

928.16

uh let's see yeah see it just it did it

931.56

as a parameter as opposed to a a form

934.38

parameter a form param so we're going to

938.22

talk about that next time around let me

940.019

get a little deeper into it but right

941.76

now what we've got is something that

945.12

we've really changed almost nothing and

947.279

we have some pretty good you know

948.959

documentation that we can do here now we

951.12

can also do some other stuff like uh

954.06

here

955.5

uh API dock

960.66

there's a lot that we can do here but we

962.76

could basically say

964.92

um

966.3

and I've got to remember what it is but

968.1

let's just do well let's just do like a

969.72

straight up

970.98

which is a test

973.199

Bit O

975.42

documentation I think it has to have a

977.699

name I don't think it does it as a

979.139

straight up string I don't think it's

980.459

going to like that we're going to find

982.079

out

983.519

if we come back

986.279

yeah so it's not going to give us

987.899

anything terribly useful we just didn't

989.88

it doesn't know where to assign it

992.88

so we're going to step into this a

994.199

little bit more next time around I want

995.399

to give us just a basic so right now you

997.8

could sit here and

999.839

create a pretty solid document

1002.5

next time around we're going to add some

1004.459

more things show you where to look to

1005.899

add your own features because a lot of

1007.519

this as you've seen is pretty full

1009.68

featured it's just a matter of knowing

1011.18

what those features are so we will get

1013.82

back to you next time thanks a lot for

1015.8

your time if you have any questions send

1017.3

it out to email at info

1019.18

developmentor.com you can see some links

1022.459

around this YouTube site as well as some

1026.54

of the other places check out

1027.819

school.developreneur.com if you want to

1029.419

get a little more involved in some of

1031.76

this kind of stuff and uh definitely let

1033.98

us know what your you know some of the

1035.54

maybe the apis that you're building and

1037.459

some of your little documentation things

1039.26

that you've figured out and uh stick

1041.9

around next episode we're going to get a

1043.579

little deeper into it have yourself a

1045.26

great day we will talk to you next time

1050.02

[Music]

1057.94

thank you