Your first question, given a unit, how to call functions on it, is answered generally by gc.getXYZ(). For example, given a player int "iPlayer", to get the CyPlayer object "pPlayer":
pPlayer = gc.getPlayer(iPlayer)
To find appropriate promotions, I always just scan through the python API descriptions to find something that looks relevant. So, I found CyUnit.canAcquirePromotion(ePromotion). However, I suppose at this point you have not created an actual unit, all you have is a unit type such as UNIT_WARRIOR. Is that correct? If you have an actual unit, get the pUnit pointer with write a loop over getNumPromotions; for each one call pUnit.canAcquirePromotion, and if it passes, add it to the list.
If you have only a unit type, it may not be easy to find the legal promotions. You can check for matching unitcombats, and make sure the promotion has no prereqs, but there could still be complex cases where for example, a unit has a free promotion due to traits or due to the unit itself. Then a promotion such as Combat II might actually be available.
Baldyr suggested buying experience instead. Dune Wars has a "homeworld reinforcements" screen which does something similar. Some random percentage of units are declared as "elite". They come with 5 XP, you can use the normal promotion buttons once they are purchased. This avoids having to figure out which promotions are possible.