Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for default property values #2100

Merged
merged 19 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .vscode/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"words": [
"decoratee",
"ICESTORM",
"nullopt",
"unmarshal",
"unmarshaling"
],
Expand Down
4 changes: 3 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"--rcfile=tox.ini"
],
"files.associations": {
"Make.*": "makefile",
"vector": "cpp",
"__bit_reference": "cpp",
"__config": "cpp",
Expand Down Expand Up @@ -79,7 +80,8 @@
"cassert": "cpp",
"span": "cpp",
"functional": "cpp",
"__memory": "cpp"
"__memory": "cpp",
"queue": "cpp"
},
"C_Cpp.default.cppStandard": "c++20",
}
17 changes: 9 additions & 8 deletions config/PropertyNames.xml
Original file line number Diff line number Diff line change
Expand Up @@ -249,11 +249,11 @@ generated from the section label.
</class>

<class name="connection" prefix-only="false">
<suffix name="CloseTimeout" />
<suffix name="ConnectTimeout" />
<suffix name="EnableIdleCheck" />
<suffix name="IdleTimeout" />
<suffix name="InactivityTimeout" />
<suffix name="CloseTimeout" default="10" />
<suffix name="ConnectTimeout" default="10" />
<suffix name="EnableIdleCheck" default="1" />
<suffix name="IdleTimeout" default="60" />
<suffix name="InactivityTimeout" default="300" />
</class>

<class name="threadpool" prefix-only="true">
Expand All @@ -267,7 +267,8 @@ generated from the section label.
</class>

<class name="objectadapter" prefix-only="true">
<suffix name="ACM" class="acm"/> <!-- Getting replaced by Connection -->
<!-- ACM is getting replaced by Connection -->
<suffix name="ACM" class="acm"/>
<suffix name="AdapterId" />
<suffix name="Connection" class="connection"/>
<suffix name="Endpoints" />
Expand Down Expand Up @@ -372,7 +373,7 @@ generated from the section label.
<property name="PrintProcessId" />
<property name="PrintStackTraces" />
<property name="ProgramName" />
<property name="RetryIntervals" />
<property name="RetryIntervals" default="0" />
<property name="ServerIdleTime" />
<property name="SOCKSProxyHost" />
<property name="SOCKSProxyPort" />
Expand All @@ -382,7 +383,7 @@ generated from the section label.
<property name="ThreadPool.Client" class="threadpool" />
<property name="ThreadPool.Server" class="threadpool" />
<property name="ThreadPriority"/>
<property name="ToStringMode" />
<property name="ToStringMode" default="Unicode" />
<property name="Trace.Admin.Properties" />
<property name="Trace.Admin.Logger" />
<property name="Trace.Locator" />
Expand Down
189 changes: 57 additions & 132 deletions config/makeprops.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@
contentHandler = None
propertyClasses = {}

commonPreamble = """//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
"""
commonPreamble = "// Copyright (c) ZeroC, Inc. All rights reserved."

commonPreamble = (
commonPreamble
Expand Down Expand Up @@ -54,23 +51,19 @@
struct Property
{
const char* pattern;
const char* defaultValue;
bool deprecated;
const char* deprecatedBy;

Property(const char* n, bool d, const char* b) :
Property(const char* n, const char* dv, bool d, const char* b) :
pattern(n),
defaultValue(dv),
deprecated(d),
deprecatedBy(b)
{
}

Property() :
pattern(0),
deprecated(false),
deprecatedBy(0)
{
}

Property() = delete;
};

struct PropertyArray
Expand Down Expand Up @@ -209,12 +202,12 @@ def initPropertyClasses(filename):
#


def handler(signum, frame):
def handler(sigNum, frame):
"""Installed as signal handler. Should cause an files that are in
use to be closed and removed"""
global contentHandler
contentHandler.cleanup()
sys.exit(128 + signum)
sys.exit(128 + sigNum)


class UnknownElementException(Exception):
Expand All @@ -226,10 +219,10 @@ def __str__(self):


class PropertyHandler(ContentHandler):
def __init__(self, inputfile, className):
def __init__(self, inputFile, className):
self.start = False
self.properties = {}
self.inputfile = inputfile
self.inputFile = inputFile
self.className = className
self.currentSection = None
self.sectionPropertyCount = 0
Expand All @@ -248,15 +241,7 @@ def closeFiles(self):
"""Needs to be overridden in derived class"""
pass

def deprecatedImpl(self, propertyName):
"""Needs to be overridden in derived class"""
pass

def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy):
"""Needs to be overridden in derived class"""
pass

def propertyImpl(self, propertyName):
def propertyImpl(self, propertyName, defaultValue, deprecated, deprecatedBy):
"""Needs to be overridden in derived class"""
pass

Expand All @@ -276,17 +261,9 @@ def handleNewSection(self, sectionName, noCmdLine):
self.sections.append(sectionName)
self.newSection()

def handleDeprecated(self, propertyName):
self.properties[propertyName] = None
self.deprecatedImpl(propertyName)

def handleDeprecatedWithReplacement(self, propertyName, deprecatedBy):
self.properties[propertyName] = deprecatedBy
self.deprecatedImplWithReplacementImpl(propertyName, deprecatedBy)

def handleProperty(self, propertyName):
self.properties[propertyName] = ""
self.propertyImpl(propertyName)
def handleProperty(self, propertyName, defaultValue, deprecated, deprecatedBy):
self.properties[propertyName] = deprecatedBy if deprecatedBy else ""
self.propertyImpl(propertyName, defaultValue, deprecated, deprecatedBy)

def startElement(self, name, attrs):
if name == "properties":
Expand Down Expand Up @@ -326,16 +303,10 @@ def startElement(self, name, attrs):
if c.isPrefixOnly():
return

#
# 'is not None' implies deprecated == true
#
deprecatedBy = attrs.get("deprecatedBy", None)
if deprecatedBy is not None:
self.handleDeprecatedWithReplacement(propertyName, deprecatedBy)
elif attrs.get("deprecated", "false").lower() == "true":
self.handleDeprecated(propertyName)
else:
self.handleProperty(propertyName)
deprecated = attrs.get("deprecated", "false").lower() == "true"
defaultValue = attrs.get("default", None) or ""
self.handleProperty(propertyName, defaultValue, deprecated, deprecatedBy)

def endElement(self, name):
if name == "properties":
Expand Down Expand Up @@ -365,10 +336,10 @@ def startFiles(self):
self.cppFile = open(self.className + ".cpp", "w")
self.hFile.write(
cppHeaderPreamble
% {"inputfile": self.inputfile, "classname": self.className}
% {"inputfile": self.inputFile, "classname": self.className}
)
self.cppFile.write(
cppSrcPreamble % {"inputfile": self.inputfile, "classname": self.className}
cppSrcPreamble % {"inputfile": self.inputFile, "classname": self.className}
)

def closeFiles(self):
Expand Down Expand Up @@ -400,23 +371,16 @@ def closeFiles(self):
def fix(self, propertyName):
return propertyName.replace("[any]", "*")

def deprecatedImpl(self, propertyName):
self.cppFile.write(
' IceInternal::Property("%s.%s", true, 0),\n'
% (self.currentSection, self.fix(propertyName))
)

def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy):
self.cppFile.write(
' IceInternal::Property("%s.%s", true, "%s"),\n'
% (self.currentSection, self.fix(propertyName), deprecatedBy)
def propertyImpl(self, propertyName, defaultValue, deprecated, deprecatedBy):
propertyLine = 'IceInternal::Property("{section}.{name}", {defaultValue}, {deprecated}, {deprecatedBy})'.format(
section=self.currentSection,
name=self.fix(propertyName),
defaultValue=f'"{defaultValue}"',
deprecated="true" if deprecated else "false",
deprecatedBy=f'"{deprecatedBy}"' if deprecatedBy else "nullptr",
)

def propertyImpl(self, propertyName):
self.cppFile.write(
' IceInternal::Property("%s.%s", false, 0),\n'
% (self.currentSection, self.fix(propertyName))
)
self.cppFile.write(f" {propertyLine},\n")

def newSection(self):
self.hFile.write(
Expand Down Expand Up @@ -463,7 +427,7 @@ def cleanup(self):
def startFiles(self):
self.srcFile = open(self.className + ".java", "w")
self.srcFile.write(
javaPreamble % {"inputfile": self.inputfile, "classname": self.className}
javaPreamble % {"inputfile": self.inputFile, "classname": self.className}
)

def closeFiles(self):
Expand All @@ -490,30 +454,15 @@ def fix(self, propertyName):
#
return propertyName.replace(".", r"\\.").replace("[any]", r"[^\\s]+")

def deprecatedImpl(self, propertyName):
self.srcFile.write(
' new Property("%(section)s\\\\.%(pattern)s", '
"true, null),\n"
% {"section": self.currentSection, "pattern": self.fix(propertyName)}
)

def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy):
self.srcFile.write(
' new Property("%(section)s\\\\.%(pattern)s", '
'true, "%(deprecatedBy)s"),\n'
% {
"section": self.currentSection,
"pattern": self.fix(propertyName),
"deprecatedBy": deprecatedBy,
}
)

def propertyImpl(self, propertyName):
self.srcFile.write(
' new Property("%(section)s\\\\.%(pattern)s", '
"false, null),\n"
% {"section": self.currentSection, "pattern": self.fix(propertyName)}
def propertyImpl(self, propertyName, defaultValue, deprecated, deprecatedBy):
line = 'new Property("{section}\\\\.{name}", {defaultValue}, {deprecated}, {deprecatedBy})'.format(
section=self.currentSection,
name=self.fix(propertyName),
defaultValue=f'"{defaultValue}"',
deprecated="true" if deprecated else "false",
deprecatedBy=f'"{deprecatedBy}"' if deprecatedBy else "null",
)
self.srcFile.write(f" {line},\n")

def newSection(self):
self.srcFile.write(
Expand Down Expand Up @@ -557,7 +506,7 @@ def cleanup(self):
def startFiles(self):
self.srcFile = open(self.className + ".cs", "w")
self.srcFile.write(
csPreamble % {"inputfile": self.inputfile, "classname": self.className}
csPreamble % {"inputfile": self.inputFile, "classname": self.className}
)

def closeFiles(self):
Expand All @@ -580,23 +529,15 @@ def closeFiles(self):
def fix(self, propertyName):
return propertyName.replace(".", r"\.").replace("[any]", r"[^\s]+")

def deprecatedImpl(self, propertyName):
self.srcFile.write(
r' new Property(@"^%s\.%s$", true, null),\n'
% (self.currentSection, self.fix(propertyName))
)

def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy):
self.srcFile.write(
r' new Property(@"^%s\.%s$", true, @"%s"),\n'
% (self.currentSection, self.fix(propertyName), deprecatedBy)
)

def propertyImpl(self, propertyName):
self.srcFile.write(
r' new Property(@"^%s\.%s$", false, null),\n'
% (self.currentSection, self.fix(propertyName))
def propertyImpl(self, propertyName, defaultValue, deprecated, deprecatedBy):
line = 'new Property(@"^{section}\\.{name}$", {defaultValue}, {deprecated}, {deprecatedBy})'.format(
section=self.currentSection,
name=self.fix(propertyName),
defaultValue=f'"{defaultValue}"',
deprecated="true" if deprecated else "false",
deprecatedBy=f'"{deprecatedBy}"' if deprecatedBy else "null",
)
self.srcFile.write(f" {line},\n")

def newSection(self):
self.srcFile.write(
Expand Down Expand Up @@ -630,7 +571,7 @@ def cleanup(self):
def startFiles(self):
self.srcFile = open(self.className + ".js", "w")
self.srcFile.write(
jsPreamble % {"inputfile": self.inputfile, "classname": self.className}
jsPreamble % {"inputfile": self.inputFile, "classname": self.className}
)

def closeFiles(self):
Expand All @@ -654,26 +595,16 @@ def closeFiles(self):
def fix(self, propertyName):
return propertyName.replace(".", "\\.").replace("[any]", ".")

def deprecatedImpl(self, propertyName):
def propertyImpl(self, propertyName, defaultValue, deprecated, deprecatedBy):
if self.currentSection in self.validSections:
self.srcFile.write(
r' new Property("/^%s\.%s/", true, null),\n'
% (self.currentSection, self.fix(propertyName))
)

def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy):
if self.currentSection in self.validSections:
self.srcFile.write(
r' new Property("/^%s\.%s/", true, "%s"),\n'
% (self.currentSection, self.fix(propertyName), deprecatedBy)
)

def propertyImpl(self, propertyName):
if self.currentSection in self.validSections:
self.srcFile.write(
r' new Property("/^%s\.%s/", false, null),\n'
% (self.currentSection, self.fix(propertyName))
line = 'new Property("^{section}\\.{name}$", {defaultValue}, {deprecated}, {deprecatedBy})'.format(
Copy link
Member Author

@externl externl May 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The regex for JavaScript was broken. The /XXX/ wrapping is incorrect.

section=self.currentSection,
name=self.fix(propertyName),
defaultValue=f'"{defaultValue}"',
deprecated="true" if deprecated else "false",
deprecatedBy=f'"{deprecatedBy}"' if deprecatedBy else "null",
)
self.srcFile.write(f" {line},\n")

def newSection(self):
if self.currentSection in self.validSections:
Expand Down Expand Up @@ -725,17 +656,11 @@ def handleNewSection(self, sectionName, cmdLine):
for f in self.handlers:
f.handleNewSection(sectionName, cmdLine)

def handleDeprecated(self, propertyName):
for f in self.handlers:
f.handleDeprecated(propertyName)

def handleDeprecatedWithReplacement(self, propertyName, deprecatedBy):
for f in self.handlers:
f.handleDeprecatedWithReplacement(propertyName, deprecatedBy)

def handleProperty(self, propertyName):
def handleProperty(
self, propertyName, default=None, deprecated=False, deprecatedBy=None
):
for f in self.handlers:
f.handleProperty(propertyName)
f.handleProperty(propertyName, default, deprecated, deprecatedBy)

def startElement(self, name, attrs):
for f in self.handlers:
Expand Down
Loading
Loading