-
Notifications
You must be signed in to change notification settings - Fork 25
Using Gepsio with Python
Gepsio is built as a .NET assembly, but, thanks to the pythonnet library, Gepsio can be used from Python code.
Since Gepsio is built as a .NET assembly, the machine executing the Gepsio Python code will need to have .NET installed.
Install pythonnet as part of your project. Execute the command pip install pythonnet to get pythonnet installed.
Next, import load from pythonnet, loading and importing the .NET CLR as follows:
from pythonnet import load
load("coreclr")
import clr
Next, load and reference Gepsio as follows:
clr.AddReference("JeffFerguson.Gepsio")
from JeffFerguson.Gepsio
import XbrlDocument
The XbrlDocument class is the only Gepsio class that must be explicitly imported. All of the other classes will be available through property references.
Once Gepsio is imported and referenced, you can use all of Gepsio's methods and properties within Python.
This Python example loads an XBRL instance into Gepsio and outputs the number of facts, units, and context found in the loaded document.
# WHAT YOU'LL NEED
# ================
# .NET
# pythonnet (install with "pip install pythonnet")
# Gepsio (download from https://www.nuget.org/packages/Gepsio)
from pythonnet import load
load("coreclr")
import clr
clr.AddReference("JeffFerguson.Gepsio")
from JeffFerguson.Gepsio
import XbrlDocument
doc = XbrlDocument()
doc.Load("http://xbrlsite.com/US-GAAP/BasicExample/2010-09-30/abc-20101231.xml")
print(doc.XbrlFragments.Count)
firstFragment = doc.XbrlFragments[0]
print(firstFragment.Facts.Count)
print(firstFragment.Units.Count)
print(firstFragment.Contexts.Count)
This more complicated Python example loads an XBRL instance into Gepsio and outputs summation concepts and related information defined by the loaded XBRL document's calculation linkbase.
# WHAT YOU'LL NEED
# ================
# .NET 8
# pythonnet (install with "pip install pythonnet")
# Gepsio (download from https://www.nuget.org/packages/Gepsio)
def PrintFacts(fragment):
print("Number of facts.........: " + str(fragment.Facts.Count))
def PrintUnits(fragment):
print("Number of units.........: " + str(fragment.Units.Count))
def PrintContexts(fragment):
print("Number of contexts......: " + str(fragment.Contexts.Count))
def PrintSummationConcept(summationConcept):
print("+-------------------+")
print("| Summation Concept |")
print("+-------------------+")
print("Name: " + summationConcept.SummationConceptLocator.HrefResourceId)
for currentContributingConceptLocator in summationConcept.ContributingConceptLocators:
print("Contributor: " + currentContributingConceptLocator.HrefResourceId)
def PrintCalculationLinkbaseInformationForGivenSchema(currentSchema):
print("Schema location.........: " + currentSchema.LoadPath)
for currentCalculationLinkbase in currentSchema.CalculationLinkbases:
for currentCalculationLink in currentCalculationLinkbase.CalculationLinks:
for currentSummationConcept in currentCalculationLink.SummationConcepts:
PrintSummationConcept(currentSummationConcept)
from pythonnet import load
load("coreclr")
import clr
clr.AddReference("JeffFerguson.Gepsio")
from JeffFerguson.Gepsio
import XbrlDocument
doc = XbrlDocument()
doc.Load("https://www.sec.gov/Archives/edgar/data/1018724/000101872425000004/amzn-20241231_htm.xml")
print("XBRL load path..........: " + doc.Filename)
print("Number of XBRL fragments: " + str(doc.XbrlFragments.Count))
firstFragment = doc.XbrlFragments[0]
PrintFacts(firstFragment)
PrintUnits(firstFragment)
PrintContexts(firstFragment)
for currentSchema in firstFragment.Schemas:
PrintCalculationLinkbaseInformationForGivenSchema(currentSchema)