artragis/zds-site — pull request #7 by pierre-24 (2014-12-26 13:18:45+00:00)
Title: 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 :)