Scriptbooker

Doc


The Scriptbooker defines template of Mardown and Code Scriptbooks for readming a Module.


View the Scriptbooker notebook on [NbViewer](http://nbviewer.ipython.org/url/shareyoursystem.ouvaton.org/Scriptbooker.ipynb)

Code



# -*- coding: utf-8 -*-
"""


<DefineSource>
@Date : Fri Nov 14 13:20:38 2014 \n
@Author : Erwan Ledoux \n\n
</DefineSource>


The Scriptbooker defines template of Mardown and Code Scriptbooks for readming a Module.

"""

#<DefineAugmentation>
import ShareYourSystem as SYS
BaseModuleStr="ShareYourSystem.Guiders.Guider"
DecorationModuleStr="ShareYourSystem.Standards.Classors.Classer"
SYS.setSubModule(globals())
#</DefineAugmentation>

#<ImportSpecificModules>
import os
Guider=BaseModule
#</ImportSpecificModules>

#<DefineClass>
@DecorationClass()
class ScriptbookerClass(BaseClass):

    #Definition
    RepresentingKeyStrsList=[
                                'ScriptbookingGuideTuplesList',
                                'ScriptbookedFileKeyStrsList',
                                'ScriptbookedNewGuideTuplesList',
                                'ScriptbookedOldGuideTuplesList'
                            ]

    def default_init(self,
                        _ScriptbookingGuideTuplesList=[
                            ('001','Document','Markdown'),
                            ('002','Github','Markdown'),
                            #('003','Ouvaton','Markdown')
                        ],
                        _ScriptbookedFileKeyStrsList=None,
                        _ScriptbookedNewGuideTuplesList=None,
                        _ScriptbookedOldGuideTuplesList=None,
                        **_KwargVariablesDict
                    ):

        #Call the parent __init__ method
        BaseClass.__init__(self,**_KwargVariablesDict)

    def do_scriptbook(self):

        #debug
        '''
        self.debug(('self.',self,['FolderedDirKeyStrsList']))
        '''

        #Definition
        self.ScriptbookedFileKeyStrsList=SYS._filter(
                lambda __DirKeyStr:
                any(
                    map(
                        lambda __ExtensionStr:
                        __DirKeyStr.endswith(
                            self.GuidingBookStr+__ExtensionStr
                        ),
                        ['.py','.md','.tex']
                )),
                self.FolderedDirKeyStrsList
        )

        #Definition
        ScriptbookedPageStrsList=map(
                                    lambda __ScriptbookerScriptbookFileKeyStr:
                                    Guider.GuidingSortStr.join(
                                        __ScriptbookerScriptbookFileKeyStr.split(
                                            Guider.GuidingSortStr)[1:]
                                        ),
                                    self.ScriptbookedFileKeyStrsList
                                )

        #set
        self.ScriptbookedSortDict=dict(
                zip(ScriptbookedPageStrsList,self.ScriptbookedFileKeyStrsList)
            )

        #debug
        '''
        self.debug(('self.',self,['ScriptbookedSortDict']))
        '''

        #Check
        if len(self.ScriptbookingGuideTuplesList)>0:

            #map
            ScriptbookedGuideTuplesList=map(
                    lambda __ScriptbookingGuideTuple:
                    list(__ScriptbookingGuideTuple)+[
                        __ScriptbookingGuideTuple[1]+self.GuidingBookStr+dict(
                        Guider.ScriptStrAndExtensionStrTuplesList
                        )[
                            __ScriptbookingGuideTuple[2]
                        ]
                    ],
                    self.ScriptbookingGuideTuplesList
                )

            #groupby
            [
                self.ScriptbookedNewGuideTuplesList,
                self.ScriptbookedOldGuideTuplesList
            ]=SYS.groupby(
                lambda __ScriptbookedGuideTuple:
                __ScriptbookedGuideTuple[3] not in self.ScriptbookedSortDict,
                ScriptbookedGuideTuplesList,
            )

            #debug
            '''
            self.debug(('self.',self,[
                            'ScriptbookedNewGuideTuplesList',
                            'ScriptbookedOldGuideTuplesList'
                        ]))
            '''

            #map a guide for the news
            map(
                lambda __ScriptbookingNewGuideTuple:
                self.guide(__ScriptbookingNewGuideTuple[0],
                            __ScriptbookingNewGuideTuple[1],
                            self.GuidingBookStr,
                            __ScriptbookingNewGuideTuple[2]),
                self.ScriptbookedNewGuideTuplesList
            )

            #check if we rewrite for the olds
            map(
                lambda __ScriptbookingOldGuideTuple:
                self.close() 
                if "#FrozenIsBool True" in self.load(
                    _FormatStr='txt',
                    **{
                        'FilingKeyStr':self.ScriptbookedSortDict[
                        __ScriptbookingOldGuideTuple[3]
                        ],
                        'FilingModeStr':'r'
                    }).LoadedReadVariable
                else self.close().guide(
                            __ScriptbookingOldGuideTuple[0],
                            __ScriptbookingOldGuideTuple[1],
                            self.GuidingBookStr,
                            __ScriptbookingOldGuideTuple[2],
                        ),
                self.ScriptbookedOldGuideTuplesList
            )

        #Return self
        #return self

#</DefineClass>

View the Scriptbooker sources on [Github](https://github.com/Ledoux/ShareYourSystem/tree/master/Pythonlogy/ShareYourSystem/Guiders/Scriptbooker)

Example

Let's create an empty class, which will automatically receive special attributes from the decorating ClassorClass, specially the NameStr, that should be the ClassStr without the TypeStr in the end.


In [3]:
#ImportModules
import ShareYourSystem as SYS
from ShareYourSystem.Guiders import Scriptbooker

#Definition of a Scriptbooker
MyScriptbooker=Scriptbooker.ScriptbookerClass(
    ).package(
        "ShareYourSystem.Standards.Objects.Object"
    ).scriptbook(
        **{
            'GuidingBookStr':'Doc'
        }
    )

#Definition the AttestedStr
SYS._attest(
    [
        'MyScriptbooker is '+SYS._str(
                MyScriptbooker,
                **{
                'RepresentingBaseKeyStrsListBool':False,
                'RepresentingAlineaIsBool':False
                }
        )
    ]
) 

#Print



*****Start of the Attest *****

MyScriptbooker is < (ScriptbookerClass), 4540655568>
   /{ 
   /  '<New><Instance>IdInt' : 4540655568
   /  '<New><Instance>ScriptbookedSortDict' : 
   /   /{ 
   /   /  'DocumentDoc.md' : 001_DocumentDoc.md
   /   /  'ExampleDoc.md' : 00_ExampleDoc.md
   /   /  'ExampleDoc.py' : 01_ExampleDoc.py
   /   /  'GithubDoc.md' : 002_GithubDoc.md
   /   /}
   /  '<Spe><Class>ScriptbookingGuideTuplesList' : 
   /   /[
   /   /  0 : ('001', 'Document', 'Markdown')
   /   /  1 : ('002', 'Github', 'Markdown')
   /   /]
   /  '<Spe><Instance>ScriptbookedFileKeyStrsList' : ['001_DocumentDoc.md', '002_GithubDoc.md', '00_ExampleDoc.md', '01_ExampleDoc.py']
   /  '<Spe><Instance>ScriptbookedNewGuideTuplesList' : []
   /  '<Spe><Instance>ScriptbookedOldGuideTuplesList' : 
   /   /[
   /   /  0 : ['001', 'Document', 'Markdown', 'DocumentDoc.md']
   /   /  1 : ['002', 'Github', 'Markdown', 'GithubDoc.md']
   /   /]
   /}

*****End of the Attest *****