User:GeneaBot/Code/module title

From Wikidata
Jump to navigation Jump to search
# -*- coding: utf-8  -*-
import pywikibot
from object_display import *
from object_source  import *
from object_title   import *
from object_human   import *




class ManagementTitle:
    #
    def __init__(self):
        DisplayMessages.call("O", "ManagementTitle..__init__", 5, "" )
        self.field = dict()
        self.field['person'] = []
        self.field['succession'] = True
    #
    def setField(self, Index, Value):
        DisplayMessages.call("O", "ManagementTitle..setField", 5, "Index = " + Index + ", Value = " + repr(Value))
        self.field[Index] = Value
    #
    def addPerson(self, Item, Source):
        DisplayMessages.call("O", "ManagementTitle..addPerson", 5, "Index = " + repr(Item) + ", Source = " + repr(Source))
        n = len(self.field['person'])
        DisplayMessages.debug("O", "ManagementTitle..addPerson", 7, "self.field['person'] = " + str(self.field['person']))
        if n == 0:
            if self.field['succession']:
                if 'first' in self.field:
                    DisplayMessages.debug("O", "ManagementTitle..addPerson", 7, "self.field['first'] = " + str(self.field['first']))
                    Item.currentTitle.previous = self.field['first']
                else:
                    DisplayMessages.debug("O", "ManagementTitle..addPerson", 7, "self.field['first'] not present")
        else:
            if self.field['succession']:
                DisplayMessages.debug("O", "ManagementTitle..addPerson", 7, Item.disp[True] + " is successor of " + self.field['person'][n-1].disp[True])
                self.field['person'][n-1].SetSuccessorForTitle(Item)
            self.field['person'][n-1].RecordTitle(Source)
        self.field['person'].append(Item)
    #
    def lastPerson(self, Source):
        DisplayMessages.call("O", "ManagementTitle..lastPerson", 5, "")
        n = len(self.field['person'])
        DisplayMessages.debug("O", "ManagementTitle..lastPerson", 7, "self.field['person'] = " + str(self.field['person']))
        if n >= 1:
            if self.field['succession']:
                if 'last' in self.field:
                    DisplayMessages.debug("O", "ManagementTitle..lastPerson", 7, "self.field['last'] = " + str(self.field['last']))
                    self.field['person'][n-1].currentTitle.next = self.field['last']
                else:
                    DisplayMessages.debug("O", "ManagementTitle..lastPerson", 7, "self.field['last'] not present")
            self.field['person'][n-1].RecordTitle(Source)
    #
    def getTitle(self):
        DisplayMessages.call("O", "ManagementTitle..getTitle", 5, "")
        return self.field['title']
    #
    def getDomain(self):
        DisplayMessages.call("O", "ManagementTitle..getDomain", 5, "")
        if 'domain' in self.field:
            return self.field['domain']
        else:
            return ''
    #
    def getPerson(self):
        DisplayMessages.call("O", "ManagementTitle..getPerson", 5, "")
        return self.field['person']
    #
    def getField(self, Index):
        DisplayMessages.call("O", "ManagementTitle..getField", 5, "Index = " + Index )
        if Index == 'person':
            n = len(self.field['person'])
            if n >= 1:
                return self.field['person'][n-1]
        else:
            if Index in self.field:
                return self.field[Index]
            else:
                return ""
    #
    def display(self, Format, Run):
        for key in [ 'first', 'last', 'list', 'title', 'domain']:
            if key in self.field:
                print( self.field[key].display(Format, Run) )
        if 'person' in self.field:
            for item in self.field['person']:
                print( item.display(Format, Run) )









#======================================================
# Fonction TitleSet
#
def TitleSet(curRequest):
    DisplayMessages.call("A", "TitleSet", 1, "curRequest=" + curRequest )
    DisplayLog.AppendRequest( curRequest )
    EmptySource = Source()
    Ident = ""
    Params = dict()
    IdentList = ""
    ParamsList = dict()
    mngtTitle = ManagementTitle()
    curRequest = curRequest[:len(curRequest)-2]  # suppress '}}' at the end request
    listArgs = curRequest.split("|")
    iArg = 1
    while iArg < len(listArgs):
        Statement = listArgs[iArg].split("=")
        Property = Statement[0].strip()
        try :
            Value = Statement[1].strip()
        except IndexError:
            DisplayMessages.warning("A", "TitleSet", "parameter '" + Property + "' without argument")
            iArg += 1
            continue
        if not Value == '':
            if Property == 'title':
                Ident = Value
                if not IdentList == '':
                    ParamsList['P360'] = [ Ident ]
            elif Property == 'domain':
                mngtTitle.setField('domain', Value)
            elif Property == 'subclass of':
                Params['P279'] = [ Value ]
            elif Property == 'list':
                Params['P2354'] = [ Value ]
                IdentList = Value
                if not Ident == '':
                    ParamsList['P360'] = [ Ident ]
            elif Property == 'first':
                mngtTitle.setField('first', Value) 
            elif Property == 'last':
                mngtTitle.setField('last',  Value)
            elif Property == 'succession':
                if Value == 'off' or Value == 'false' or Value == 'no' :
                    mngtTitle.setField('succession',  False)
                else:
                    mngtTitle.setField('succession',  True)
            else:
                DisplayMessages.warning("A", "TitleSet", "unknown parameter '" + Property + " = " + Value + "'")
        iArg += 1
    DisplayMessages.debug("A", "TitleSet", 4, "Params=" + str(Params) )
    #
    if not Ident == "":
        DisplayMessages.debug("A", "TitleSet", 7, "Creating object Title with ident = " + Ident + " and claims wanted = " + str(Params) )
        mngtTitle.setField( 'title', Title.Get(Ident, Params, EmptySource) )
    #
    if not IdentList == '':
        List = Item.Get(IdentList, ParamsList, [ ['P31', 'Q12148816' ] ], EmptySource)
    #
    return mngtTitle

    


def TitleAdd(curRequest, MngtTitle, Reference):
    DisplayMessages.call("A", "TitleAdd", 1, "curRequest=" + curRequest + ", MngtTitle, Reference" )
    DisplayLog.AppendRequest( curRequest )
    Ident = ""
    Qualifiers = dict()
    EmptyDict  = dict()
    Ident       = ''
    BegDate     = ''
    EndDate     = ''
    Predecessor = ''
    Successor   = ''
    Ref         = Reference
    curRequest = curRequest[:len(curRequest)-2]  # suppress '}}' at the end request
    listArgs = curRequest.split("|")
    iArg = 1
    while iArg < len(listArgs):
        Statement = listArgs[iArg].split("=")
        Property = Statement[0].strip()
        try :
            Value = Statement[1].strip()
        except IndexError:
            DisplayMessages.warning("A", "TitleAdd", "parameter '" + Property + "' without argument")
            iArg += 1
            continue
        if not Value == '':
            if Property == 'person':
                Ident = Value
            elif Property == 'date of begin':
                BegDate = Value
            elif Property == 'date of end':
                EndDate = Value
            elif Property == 'page':
                RefPage = Source()
                RefPage.AddReference('P304', Value, True)
                Ref = Reference + RefPage
            else:
                DisplayMessages.warning("A", "TitleAdd", "unknown parameter '" + Property + " = " + Value + "'")
        iArg += 1
        
    DisplayMessages.debug("A", "TitleAdd", 4, "Ident = " + Ident + "\nBegDate = " + BegDate + "\nEndDate = " + EndDate )

    if not Ident == '':
        PersonTitled = Human.Get(Ident, {}, Ref)
        PersonTitled.SetTitle(MngtTitle.getTitle(), MngtTitle.getDomain(), BegDate, EndDate)
        DisplayMessages.debug("A", "TitleAdd", 4, "create item : '" + str(PersonTitled))
        LastTitled = MngtTitle.getField('person')
        MngtTitle.addPerson( PersonTitled, Ref )
        
    return MngtTitle        






def TitleEnd(MngtTitle, Reference):
    DisplayMessages.call("A", "TitleEnd", 3, "MngtTitle, Reference" )
    MngtTitle.lastPerson( Reference )
        









def TestTitleSet(curRequest, Format, Run):
    print( "" )
    print( "---------------------------" )
    print( "test TitleSet(curRequest=" + curRequest + ")" )
    print( "" )
    MngtTitle = TitleSet(curRequest)
    MngtTitle.display(Format, Run)
    return MngtTitle



def TestTitleAdd(curRequest, MngtTitle, Reference, Format, Run):
    print( "" )
    print( "---------------------------" )
    print( "test TitleAdd(curRequest=" + curRequest + ", MngtTitle, Reference)" )
    print( "" )
    TitleAdd(curRequest, MngtTitle, Reference)
    Persons = MngtTitle.getPerson()
    if len(Persons) >=2:
        print( Persons[len(Persons)-2].display(Format, Run) )



def TestTitleEnd(MngtTitle, Reference, Format, Run):
    print( "" )
    print( "---------------------------" )
    print( "test TitleAdd(MngtTitle, Reference)" )
    print( "" )
    TitleEnd(MngtTitle, Reference)
    Persons = MngtTitle.getPerson()
    if len(Persons) >=2:
        print( Persons[len(Persons)-1].display(Format, Run) )



def mainTestModuleTitle(*args):
    param = CallParameter(*args)
    NumCase   = param.GetValue('case', 0)
    Display = param.GetValue('display', 'short')
    
    ListDisplay = Display.split(':')
    Format = ListDisplay[0]
    if len(ListDisplay) >= 2:
        Run = ListDisplay[1]
    else:
        Run = 'simu'
    
    if NumCase == 0 or NumCase == 1:
        print( "=====================   TEST 1   =====================" )
        source = Source()
        source.AddReference('P248', 'Q13419312', True)
        source.AddReference('P854', 'http://fmg.ac/Projects/MedLands/GASCONY.htm', True)
        mngtTitle = TestTitleSet('{{/TitleSet|title for man=Q21123038 |title for woman=Q21513679 |man subclass of=Q3519259 |woman subclass of=Q21101501 |part of=Q612322}}', Format, Run)
        request = '{{/TitleAdd|person=Q2506439 |date of begin= |date of end= }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        request = '{{/TitleAdd|person=Q4155186 |date of begin= |date of end= }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        request = '{{/TitleAdd|person=Q4269614 |date of begin= |date of end= }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        request = '{{/TitleAdd|person=Q2509451 |date of begin= |date of end=956 }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        request = '{{/TitleAdd|person=Q4268340 |date of begin=956 |date of end=1000  }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        request = '{{/TitleAdd|person=Q4133930 |date of begin=1000 |date of end= }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        request = '{{/TitleAdd|person=Q11923812 |date of begin= |date of end=1032 }}'
        TestTitleAdd(request, mngtTitle, source, Format, Run)
        TestTitleEnd(mngtTitle, source, Format, Run)


if __name__ == "__main__":
    mainTestModuleTitle()