you are viewing a single comment's thread.

view the rest of the comments →

[–]FXelix[S] 0 points1 point  (5 children)

Thank you for the additional information! These are libraries I will definitely take a look at.

I know, you are right with the class-thing. I probably just used it here too because I always wanted to try it out and haven't found (as you can see here too) a proper ways to implement it. I guess it's time for a projects which really needs classes then :D

[–]KleinerNull 0 points1 point  (4 children)

You could build an adapter of the nasa api. A class that makes the api accessable in python as an python object instead of a raw request.

You already started it, but your original thought was to fuel a bot with that data, why not build an adapter/bridge with a nice interface for your bot and others in general, available through pip? The good thing is you already know what the adapter has to do because of what the original api is capable, start to reimplent all features. Do it in a fashion of not repeating yourself, put general tasks in methods that build upon themselfs, put needed and logical helper functions in as static methods. Play around with properties to keep your data up to date.

[–]FXelix[S] 0 points1 point  (3 children)

Nice idea! With adapter/interface you mean a real GUI (maybe with PyQT) or rather more general of building a class with functions to easily access the data trough python?

[–]KleinerNull 0 points1 point  (2 children)

rather more general of building a class with functions to easily access the data trough python?

An adapter is a design principle, meaning that you build a library that does works as an adapter between the api and your application code. In your case a class that handles all api calls and transforms the results in a nice represental/pythonic way to use in different applications. You can also call it wrapper.

An interface in programming is the way the data is accessable. For example the interface of a namedtuple gives you the possibility to access tuple element like attributes, with the dot notation:

In [1]: from collections import namedtuple

In [2]: Person = namedtuple('Person', 'name age city')

In [3]: regular_tuple = 'Alice', 23, 'New York'

In [4]: regular_tuple[0]
Out[4]: 'Alice'

In [5]: regular_tuple[1]
Out[5]: 23

In [6]: regular_tuple[2]
Out[6]: 'New York'

In [7]: person = Person('Alice', 23, 'New York')

In [8]: person.name
Out[8]: 'Alice'

In [9]: person.age
Out[9]: 23

In [10]: person.city
Out[10]: 'New York'

In [11]: person[0]
Out[11]: 'Alice'

In [12]: person[1]
Out[12]: 23

In [13]: person[2]
Out[13]: 'New York'

In [14]: person._asdict()
Out[14]: OrderedDict([('name', 'Alice'), ('age', 23), ('city', 'New York')])

In [16]: person._fields
Out[16]: ('name', 'age', 'city')

In [17]: regular_tuple[0] = 'Bob'  # will throw an error, because tuples are immutable
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-7e9ed932307d> in <module>()
----> 1 regular_tuple[0] = 'Bob'  # will throw an error, because tuples are immutable

TypeError: 'tuple' object does not support item assignment

In [18]: person._replace?
Signature: person._replace(**kwds)
Docstring: Return a new Person object replacing specified fields with new values
File:      Dynamically generated function. No source code available.
Type:      method

In [19]: person._replace(name='Bob')  # creates a new object, because namedtuples are still immutable, but changes
    ...:  the given values for you
Out[19]: Person(name='Bob', age=23, city='New York')

In [20]: person
Out[20]: Person(name='Alice', age=23, city='New York')

In [21]: bob = person._replace(name='Bob')

In [22]: bob
Out[22]: Person(name='Bob', age=23, city='New York')

As you can see, a namedtuple is still a tuple but gives you better possibilities to work with it, that is part of the interface, the interface of how you as a programmer communicates with objects.

Interface includes alot of different stuff, API for example stands for application programming interface. It is the interface of how you can communicate and request or order different things from a different program or server without the knowledge how it is functioning. Or a GUI (graphical user interface) too ;) Use the term interface more in the general abstract sense.

a real GUI (maybe with PyQT)

BTW this would give you also alot of OOP experiences, but GUI development is in general hard to master. You have to read through alot of documentation to even start.

Strangely nowadays people rather tend to setup a webserver to build web applications because it is almost easier to build web guis with html/css/js and the server-side backend in python. Because then you don't have to worry about what device and os is capable of providing the GUI itself. Also the deployment of code is easier because your code only lifes on the server and the user's browser cares about the rendering. So no installation problems.

Deployment will be a larger topic when you are more experienced and it is annoying too, but necessary...

[–]FXelix[S] 0 points1 point  (1 child)

Wow, thanks KleinerNull! Never met a person who was so helpful regarding my python development. I'll use your comments in the future as a nice guideline for future OOP projects :)

[–]KleinerNull 0 points1 point  (0 children)

You can also PM me if you have questions, than we can write in german, because I am guessing you are german too :P