import pywikibot
from pywikibot import pagegenerators
from datetime import date

stopset=['|','=','{','}','\n','<','>']
bron='sl'
bronwiki=bron+'wiki'
updatewiki='nl'
updatezoektekst='Infobox plaats in Slovenië'
broninwonertext='prebivalstvo'
updateinwoners='inwoners'
updatecensus='census'
updatecensusjaar='2018'
updatecategorie='Categorie:Plaats in Slovenië'
oudebron='{{Bronvermelding inwonertal plaats Slovenië/2002}}'
nieuwebron='{{Bronvermelding inwonertal plaats Slovenië/2018}}'
Pinwonertal='P1082'
Ptijdstip='P585'
tijdstip=2018
Pgeimporteerd='P143'
Qbronwiki='Q14380'

repo=pywikibot.Site('wikidata','wikidata').data_repository()
upsite=pywikibot.Site(updatewiki,'wikipedia')
bronsite=pywikibot.Site(bron,'wikipedia')

def find_parameter(txt,src):
  end=start=txt.find(src)
  if (start>0):
    start=start+len(src)
    while (txt[start:start+1] not in stopset):
      start+=1  
    start+=1
    end=start+1    
    while (txt[end:end+1] not in stopset):
      end+=1
  return start,end

def ClaimQty(pval,qval):
  newclaim=pywikibot.Claim(repo,pval)
  newtarget=pywikibot.WbQuantity(qval,site=bronsite)
  newclaim.setTarget(newtarget)
  return newclaim

def update_one_page(plaats):
  wd=plaats.data_item()
  wd.get(get_redirect=True)
  if (bronwiki in wd.sitelinks):
    bronpagina=pywikibot.Page(bronsite,wd.sitelinks[bronwiki])
    start,stop=find_parameter(bronpagina.text,broninwonertext)
    ds,dt=find_parameter(plaats.text,updateinwoners)
    print(f'{bronpagina.title()}-{bronpagina.text[start:stop]}-{plaats.text[ds:dt]}')
    broninwoneraantal=int(bronpagina.text[start:stop])
    
    if (not(Pinwonertal) in wd.claims) and (broninwoneraantal>0):
      citizenClaim=ClaimQty(Pinwonertal,broninwoneraantal)
      
      statedin=pywikibot.Claim(repo,Pgeimporteerd)
      src_is=pywikibot.ItemPage(repo,Qbronwiki)  
      statedin.setTarget(src_is)  
      retrieved=pywikibot.Claim(repo,Ptijdstip)
      #impdat=date.today()   
      #rtrved=pywikibot.WbTime(year=impdat.year,month=impdat.month,day=impdat.day,site=upsite,precision='day')
      #retrieved.setTarget(rtrved)
        
      citizenClaim.addQualifier(statedin)
      #citizenClaim.addQualifier(retrieved)  
      wd.addClaim(citizenClaim,summary='einwohner eingefügt')

def all_pages_from_category(uc):
  cat=pywikibot.Category(upsite,uc)
  gen=pagegenerators.CategorizedPageGenerator(cat,12)
  for page in gen:
    if (page.text.find(updatezoektekst)>=0):
      yield(page)

print('Start')    
if (False):
 for plaats in all_pages_from_category(updatecategorie):
    update_one_page(plaats)
else   :
  berinjek=pywikibot.Page(upsite,'Berinjek')  
  update_one_page(berinjek)  
print('Klaar')    
Start
Berinjek-9-

Klaar