Did you remove getReligionWeightModifier from CvLeaderHeadInfo? My PythonErr.log file kept having problems with the code Kael used to stop AIs from researching inappropriate religions. I just saw that your mod lacks that code, so I assume that you just moved such AI decisions from python to C++ and felt no need to leave that function exposed to python. Those errors went away when I commended out those lines. The log still inexplicably starts every game with "Can't find type enum for type tag CIVILIZATION_MINOR" though, not that you could tell there was anything wrong from within the game.
Revolutions does seem to be handled in python. RevBuildingUtils.py is what adds up the iRevIdxLocal values of buildings and puts their names in lists based on whether they make a revolution more or less likely. I don't completely understand all the other python files yet.
For now I set Unyielding Order and The Tower of Complacency to have a iRevIdxLocal of -100. I could easily mod it so that with either of those buildings makes RevBuildingUtils.py ignore any negative buildings, but I'm not so sure how to make them negate other contributors to revolutions. For now I'll just assume that -100 is sufficiently large to offset them.
I'm a bit concerned about RevCivicUtils, as it seems to be referencing the civics of vanilla civ. It does not have anything like gc.getInfoTypeForString('CIVIC_COMMUNISM') but does have def isCommunism( iPlayer ) : and if( kCivic.isCommunism() and pPlayer.isCivic(i) ) :. I wonder how well this works with FfH's civics.
Since having an occupation timer is a major contributing factor to revolts, I'll probably be fine leaving those religion with occupation timers at least until I understand Revolutions more fully. Plus, the presence of any non state religions contributes to revolts anyway.
I can see how to tell it what civs to use in the case of religious revolts in RebelTypes.py. Telling it to make White Hand rebels Illian or Doviello, Children of the One rebels Grigori, and Cult of the Dragon rebels Kuriotates or Sheaim seems easy enough. I'm not quite sure yet if BlockedReligiousRebels[iReligion] is to prevent the new rebel civ of being of certain civilization types or to prevent religious rebellions from happening against those civs. Actually, I'm not sure it does anything, as it seems all other references to it outside of this file are commented out.
Why is the Calabim civilization in RebelTypes.py defined along with the minor leaders instead of with all the other civilizations? I'm thinking that is a mistake.
Thanks for the Embassy python code. I don't think I really need the python for right of passage agreements. I did have it set up to grant open borders, and would rather keep it that way, but think that this was not working with the advanced diplomacy game option because embassies are prerequisites for open borders. I haven't tested it yet, but suspect that using python to establish an embassy first may solve this.