MaD generator: switch to snake_case fields

This commit is contained in:
Paolo Tranquilli
2025-06-19 11:57:49 +02:00
parent 24cfc840a6
commit 2818e6ee17
2 changed files with 32 additions and 38 deletions

View File

@@ -236,9 +236,9 @@ def generate_models(config, args, project: Project, database_dir: str) -> None:
language = config["language"] language = config["language"]
generator = mad.Generator(language) generator = mad.Generator(language)
generator.generateSinks = should_generate_sinks(project) generator.with_sinks = should_generate_sinks(project)
generator.generateSources = should_generate_sources(project) generator.with_sources = should_generate_sources(project)
generator.generateSummaries = should_generate_summaries(project) generator.with_summaries = should_generate_summaries(project)
generator.threads = args.codeql_threads generator.threads = args.codeql_threads
generator.ram = args.codeql_ram generator.ram = args.codeql_ram
generator.setenvironment(database=database_dir, folder=name) generator.setenvironment(database=database_dir, folder=name)

View File

@@ -43,12 +43,12 @@ Requirements: `codeql` should appear on your path."""
class Generator: class Generator:
generateSinks = False with_sinks = False
generateSources = False with_sources = False
generateSummaries = False with_summaries = False
generateNeutrals = False with_neutrals = False
generateTypeBasedSummaries = False with_typebased_summaries = False
dryRun = False dry_run = False
dirname = "modelgenerator" dirname = "modelgenerator"
ram = None ram = None
threads = 0 threads = 0
@@ -65,14 +65,14 @@ class Generator:
) )
self.database = database or self.database self.database = database or self.database
self.folder = folder or self.folder self.folder = folder or self.folder
self.generatedFrameworks = os.path.join( self.generated_frameworks = os.path.join(
self.codeQlRoot, f"{self.language}/ql/lib/ext/generated/{self.folder}" self.codeQlRoot, f"{self.language}/ql/lib/ext/generated/{self.folder}"
) )
self.workDir = tempfile.mkdtemp() self.workDir = tempfile.mkdtemp()
if self.ram is None: if self.ram is None:
threads = self.threads if self.threads > 0 else os.cpu_count() threads = self.threads if self.threads > 0 else os.cpu_count()
self.ram = 2048 * threads self.ram = 2048 * threads
os.makedirs(self.generatedFrameworks, exist_ok=True) os.makedirs(self.generated_frameworks, exist_ok=True)
@staticmethod @staticmethod
def make(): def make():
@@ -97,37 +97,31 @@ class Generator:
"--with-sinks", "--with-sinks",
action="store_true", action="store_true",
help="Generate sink models", help="Generate sink models",
dest="generateSinks",
) )
p.add_argument( p.add_argument(
"--with-sources", "--with-sources",
action="store_true", action="store_true",
help="Generate source models", help="Generate source models",
dest="generateSources",
) )
p.add_argument( p.add_argument(
"--with-summaries", "--with-summaries",
action="store_true", action="store_true",
help="Generate summary models", help="Generate summary models",
dest="generateSummaries",
) )
p.add_argument( p.add_argument(
"--with-neutrals", "--with-neutrals",
action="store_true", action="store_true",
help="Generate neutral models", help="Generate neutral models",
dest="generateNeutrals",
) )
p.add_argument( p.add_argument(
"--with-typebased-summaries", "--with-typebased-summaries",
action="store_true", action="store_true",
help="Generate type-based summary models (experimental)", help="Generate type-based summary models (experimental)",
dest="generateTypeBasedSummaries",
) )
p.add_argument( p.add_argument(
"--dry-run", "--dry-run",
action="store_true", action="store_true",
help="Do not write the generated files, just print them to stdout", help="Do not write the generated files, just print them to stdout",
dest="dryRun",
) )
p.add_argument( p.add_argument(
"--threads", "--threads",
@@ -143,16 +137,16 @@ class Generator:
generator = p.parse_args(namespace=Generator()) generator = p.parse_args(namespace=Generator())
if ( if (
not generator.generateSinks not generator.with_sinks
and not generator.generateSources and not generator.with_sources
and not generator.generateSummaries and not generator.with_summaries
and not generator.generateNeutrals and not generator.with_neutrals
and not generator.generateTypeBasedSummaries and not generator.with_typebased_summaries
): ):
generator.generateSinks = True generator.with_sinks = True
generator.generateSources = True generator.with_sources = True
generator.generateSummaries = True generator.with_summaries = True
generator.generateNeutrals = True generator.with_neutrals = True
generator.setenvironment() generator.setenvironment()
return generator return generator
@@ -197,25 +191,25 @@ class Generator:
def makeContent(self): def makeContent(self):
summaryAddsTo = {} summaryAddsTo = {}
if self.generateSummaries: if self.with_summaries:
summaryAddsTo = self.getAddsTo( summaryAddsTo = self.getAddsTo(
"CaptureSummaryModels.ql", helpers.summaryModelPredicate "CaptureSummaryModels.ql", helpers.summaryModelPredicate
) )
sinkAddsTo = {} sinkAddsTo = {}
if self.generateSinks: if self.with_sinks:
sinkAddsTo = self.getAddsTo( sinkAddsTo = self.getAddsTo(
"CaptureSinkModels.ql", helpers.sinkModelPredicate "CaptureSinkModels.ql", helpers.sinkModelPredicate
) )
sourceAddsTo = {} sourceAddsTo = {}
if self.generateSources: if self.with_sources:
sourceAddsTo = self.getAddsTo( sourceAddsTo = self.getAddsTo(
"CaptureSourceModels.ql", helpers.sourceModelPredicate "CaptureSourceModels.ql", helpers.sourceModelPredicate
) )
neutralAddsTo = {} neutralAddsTo = {}
if self.generateNeutrals: if self.with_neutrals:
neutralAddsTo = self.getAddsTo( neutralAddsTo = self.getAddsTo(
"CaptureNeutralModels.ql", helpers.neutralModelPredicate "CaptureNeutralModels.ql", helpers.neutralModelPredicate
) )
@@ -223,7 +217,7 @@ class Generator:
return helpers.merge(summaryAddsTo, sinkAddsTo, sourceAddsTo, neutralAddsTo) return helpers.merge(summaryAddsTo, sinkAddsTo, sourceAddsTo, neutralAddsTo)
def makeTypeBasedContent(self): def makeTypeBasedContent(self):
if self.generateTypeBasedSummaries: if self.with_typebased_summaries:
typeBasedSummaryAddsTo = self.getAddsTo( typeBasedSummaryAddsTo = self.getAddsTo(
"CaptureTypeBasedSummaryModels.ql", helpers.summaryModelPredicate "CaptureTypeBasedSummaryModels.ql", helpers.summaryModelPredicate
) )
@@ -242,7 +236,7 @@ extensions:
sanitizedEntry = re.sub( sanitizedEntry = re.sub(
r"-+", "-", entry.replace("/", "-").replace(":", "-") r"-+", "-", entry.replace("/", "-").replace(":", "-")
) )
target = os.path.join(self.generatedFrameworks, sanitizedEntry + extension) target = os.path.join(self.generated_frameworks, sanitizedEntry + extension)
with open(target, "w") as f: with open(target, "w") as f:
f.write(extensionTemplate.format(extensions[entry])) f.write(extensionTemplate.format(extensions[entry]))
print("Models as data extensions written to " + target) print("Models as data extensions written to " + target)
@@ -251,19 +245,19 @@ extensions:
content = self.makeContent() content = self.makeContent()
typeBasedContent = self.makeTypeBasedContent() typeBasedContent = self.makeTypeBasedContent()
if self.dryRun: if self.dry_run:
print("Models as data extensions generated, but not written to file.") print("Models as data extensions generated, but not written to file.")
sys.exit(0) sys.exit(0)
if ( if (
self.generateSinks self.with_sinks
or self.generateSources or self.with_sources
or self.generateSummaries or self.with_summaries
or self.generateNeutrals or self.with_neutrals
): ):
self.save(content, ".model.yml") self.save(content, ".model.yml")
if self.generateTypeBasedSummaries: if self.with_typebased_summaries:
self.save(typeBasedContent, ".typebased.model.yml") self.save(typeBasedContent, ".typebased.model.yml")