Skip to content

Commit 134fd6d

Browse files
Package name project settings refactor (#13)
* Added initialize documentation * Package prefix and name are now one property in settings * Example project value change * Changed example extension in README
1 parent b816018 commit 134fd6d

File tree

9 files changed

+51
-17
lines changed

9 files changed

+51
-17
lines changed

.coveragerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
branch = True
33

44
[report]
5-
fail_under = 62
5+
fail_under = 65

README.rst

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ the Python Package Index (PyPI). It requires Python 3.
2525
2626
pip3 install uluru-cli
2727
28-
2928
Command: project-settings
3029
^^^^^^^^^^^^^^^^^^^^^^^^^
3130

@@ -38,6 +37,20 @@ To output the default project settings for a given language, use the
3837
--language java \
3938
--output project.yaml
4039
40+
Command: initialize
41+
^^^^^^^^^^^^^^^^^^^
42+
43+
To create project files such as build files and autocomplete for your specific language and IDE,
44+
use the ``initialize`` command. An output directory an be set with the optional ``output-directory`` argument
45+
(Defaults to the current directory). You can customize certain, language-specific project settings, otherwise the
46+
default settings are used.
47+
48+
.. code-block:: bash
49+
50+
uluru-cli initialize \
51+
--language java \
52+
--project-settings examples/java_project.yaml
53+
4154
Command: generate
4255
^^^^^^^^^^^^^^^^^
4356

@@ -50,7 +63,8 @@ are used.
5063
uluru-cli generate \
5164
examples/aws-kinesis-stream.yaml \
5265
--language java \
53-
--project-settings examples/java_project.json
66+
--project-settings examples/java_project.yaml \
67+
--output-directory projects/resource-provider/
5468
5569
Plugin system
5670
-------------

examples/java_project.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# User-provided project settings override the default project settings
2-
packageNamePrefix: org.my.package
2+
packageName: com.example.ResourceProviderExample
33
Client:
44
Client: com.amazonaws.services.kinesis.AmazonKinesis
55
Builder: com.amazonaws.services.kinesis.AmazonKinesisClientBuilder

uluru/filters.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,26 @@ def modified_from_action_type(action_type):
153153
if action_type == "write":
154154
return "true"
155155
return "false"
156+
157+
158+
@register_filter
159+
def package_prefix(full_package_name):
160+
"""Returns the package prefix from the package name specified.
161+
162+
:exc:`ValueError` is raised if the package name format is invalid.
163+
164+
>>> package_prefix('com.example.test')
165+
'com.example'
166+
>>> package_prefix('example.test')
167+
'example'
168+
>>> package_prefix('com.example.this.isa.test')
169+
'com.example.this.isa'
170+
>>> package_prefix('exampletest')
171+
Traceback (most recent call last):
172+
...
173+
ValueError: Package name 'exampletest' is invalid
174+
"""
175+
package_segments = full_package_name.rpartition(".")
176+
if package_segments[0]:
177+
return package_segments[0]
178+
raise ValueError("Package name '{}' is invalid".format(full_package_name))

uluru/languages/java/codegen.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,16 @@ def generate(self, resource_def, project_settings):
3333
output_directory = Path(project_settings["output_directory"]).resolve(
3434
strict=True
3535
)
36-
package_name_prefix = project_settings["packageNamePrefix"]
36+
project_settings["packageNamePrefix"] = self.env.filters["package_prefix"](
37+
project_settings["packageName"]
38+
)
3739

3840
project_settings.setdefault("Client", {})
3941
java_client_keys = ["Client", "Builder", "ResourceModel"]
4042
for key in java_client_keys:
4143
project_settings["Client"].setdefault(key, key.upper())
4244

43-
project_directory = package_name_prefix.split(".")
45+
project_directory = project_settings["packageNamePrefix"].split(".")
4446

4547
source_directory = output_directory.joinpath("src", *project_directory)
4648
test_directory = output_directory.joinpath("tst", *project_directory)
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
# User-provided project settings are merged with the default project settings
22
# and override the defaults.
3-
packageName: ResourceProviderExample
4-
packageNamePrefix: com.example
3+
packageName: com.example.ResourceProviderExample

uluru/languages/java/data/project_schema.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@
44
"description": "Uluru project settings schema for Java codegen projects",
55
"type": "object",
66
"properties": {
7-
"packageNamePrefix": {
8-
"type": "string",
9-
"pattern": "([a-z0-9._]{3,128})"
10-
},
117
"packageName": {
128
"type": "string",
13-
"pattern": "([a-z0-9_]{3,128})"
9+
"pattern": "(([a-z0-9]+)\\.)+[a-z0-9]+"
1410
},
1511
"Client": {
1612
"type": "object",

uluru/languages/java/templates/maven/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66

7-
<groupId>{{ packageNamePrefix }}</groupId>
8-
<artifactId>{{ packageName }}</artifactId>
7+
<groupId>{{ packageName | package_prefix}}</groupId>
8+
<artifactId>{{ packageName | java_class_name }}</artifactId>
99
<version>1.0</version>
1010
<dependencies>
1111
<dependency>

uluru/languages/java/tests/test_java.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ def test_initialize_maven(plugin, project_settings):
4242
pom_tree = ET.parse(str(project_settings["output_directory"] / "pom.xml"))
4343
ns = {"maven": "http://maven.apache.org/POM/4.0.0"}
4444
package_name_prefix = pom_tree.find("maven:groupId", ns)
45-
assert package_name_prefix.text == project_settings["packageNamePrefix"]
45+
assert package_name_prefix.text == "com.example"
4646
package_name = pom_tree.find("maven:artifactId", ns)
47-
assert package_name.text == project_settings["packageName"]
47+
assert package_name.text == "ResourceProviderExample"
4848

4949

5050
def test_initialize_intellij(plugin, project_settings):

0 commit comments

Comments
 (0)