Refactorings

Comme je disais ailleurs, j'ai fait du PEP8, du *docstring* et du *refactoring* évident. J'ai aussi rajouté un certain nombre de TODO sur des trucs à faire ou pas, à discuter.

Comme je disais aussi, il faudrait aussi pouvoir se débarrasser des

```python
tutorial = get_object_or_404(Tutorial, pk=tutorial_pk)
[...]
repo = Repo(tutorial.get_path())
manifest = get_blob(repo.commit(sha).tree, "manifest.json")
mandata = json_reader.loads(manifest)
tutorial.load_dic(mandata, sha)
[...]
for part in mandata['parts'] :
  [...]
tutorial.save()
maj_repo_tuto(...)
```

Pour moi, ce `mandata` doit devenir un objet, qui n'as plus rien à voir avec la BDD et qui doit contenir tout ce que la ZEP-12 a défini (*container* et *extract*), tandis que `tutorial` deviendrait l'actuel `PublishableContent` qui serait le lien avec la BDD et contiendrai les *metadata* (auteurs, images, notes, versions ...). Au final, on aurait un code du genre :

```python
tutorial = get_object_or_404(PublishableContent, pk=tutorial_pk)
# [...]
versionned = tutorial.load_version(sha, public=False)
# [...]
for child in versioned.childreen :
  # [... perform action on the versionned version : view or modify]
# if modification
versionned.maj_content_and_repository(tutorial, [...])
``` 

Avec

```python
class Container:
  title = ''
  slug = ''
  introduction = ''
  conclusion = ''
  parent = ''
  position_in_parent = 0
  childreen = []
  
  # [...]
  
class VersionnedContent(Container) :
  sha = ''
  def __init__(self, sha):
    self.sha = sha
# [...]
```

et 

```python
# in class PublishableContent :
def load_version(sha, public=False):
  versionned = VersionnedContent(sha)
  json = self.load_json(sha, public)
  for child in json[childreen']:
    if child['type'] == 'container' :
      new_container = Container()
      new_container.title = child['title']
      new_container.parent = versionned
      # [...]
      versionned.childreen.append(new_container)
      for sub_child in child['childreen']:
         # [... fill new_container.childreen]
    elif child['type'] == 'extract' :
      new_extract  = Extract()
      new_extract.title = child['title']
      new_extract.parent = versionned
      # [...]
      versionned.childreen.append(new_extract)

  return versionned
```

Un truc du genre :)