User:GeneaBot/Code/module title
< User:GeneaBot | Code
# -*- 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()