Skip to content

Commit 3d17505

Browse files
authored
Revert "Resolving sibling modules with absolute imports" (bazel-contrib#1035)
Revert "Resolving sibling modules with absolute imports (bazel-contrib#1029)" This reverts commit 9fc7cfa. Signed-off-by: Thulio Ferraz Assis <3149049+f0rmiga@users.noreply.github.com>
1 parent 6e5a564 commit 3d17505

File tree

26 files changed

+46
-65
lines changed

26 files changed

+46
-65
lines changed

gazelle/python/generate.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
224224
}
225225

226226
pyLibrary = newTargetBuilder(pyLibraryKind, pyLibraryTargetName, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
227+
setUUID(label.New("", args.Rel, pyLibraryTargetName).String()).
227228
addVisibility(visibility).
228229
addSrcs(pyLibraryFilenames).
229230
addModuleDependencies(deps).
@@ -266,6 +267,10 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
266267
addModuleDependencies(deps).
267268
generateImportsAttribute()
268269

270+
if pyLibrary != nil {
271+
pyBinaryTarget.addModuleDependency(module{Name: pyLibrary.PrivateAttr(uuidKey).(string)})
272+
}
273+
269274
pyBinary := pyBinaryTarget.build()
270275

271276
result.Gen = append(result.Gen, pyBinary)
@@ -296,6 +301,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
296301
}
297302

298303
conftestTarget := newTargetBuilder(pyLibraryKind, conftestTargetname, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
304+
setUUID(label.New("", args.Rel, conftestTargetname).String()).
299305
addSrc(conftestFilename).
300306
addModuleDependencies(deps).
301307
addVisibility(visibility).
@@ -309,8 +315,8 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
309315
}
310316

311317
var pyTestTargets []*targetBuilder
312-
newPyTestTargetBuilder := func(srcs *treeset.Set, pyTestTargetName string) *targetBuilder {
313-
deps, err := parser.parse(srcs)
318+
newPyTestTargetBuilder := func(pyTestFilenames *treeset.Set, pyTestTargetName string) *targetBuilder {
319+
deps, err := parser.parse(pyTestFilenames)
314320
if err != nil {
315321
log.Fatalf("ERROR: %v\n", err)
316322
}
@@ -331,7 +337,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
331337
}
332338
}
333339
return newTargetBuilder(pyTestKind, pyTestTargetName, pythonProjectRoot, args.Rel, pyLibraryFilenames.Union(pyTestFilenames)).
334-
addSrcs(srcs).
340+
addSrcs(pyTestFilenames).
335341
addModuleDependencies(deps).
336342
generateImportsAttribute()
337343
}
@@ -365,9 +371,14 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes
365371
}
366372

367373
for _, pyTestTarget := range pyTestTargets {
374+
if pyLibrary != nil {
375+
pyTestTarget.addModuleDependency(module{Name: pyLibrary.PrivateAttr(uuidKey).(string)})
376+
}
377+
368378
if conftest != nil {
369-
pyTestTarget.addModuleDependency(module{Name: strings.TrimSuffix(conftestFilename, ".py")})
379+
pyTestTarget.addModuleDependency(module{Name: conftest.PrivateAttr(uuidKey).(string)})
370380
}
381+
371382
pyTest := pyTestTarget.build()
372383

373384
result.Gen = append(result.Gen, pyTest)

gazelle/python/resolve.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ const (
3939
// resolvedDepsKey is the attribute key used to pass dependencies that don't
4040
// need to be resolved by the dependency resolver in the Resolver step.
4141
resolvedDepsKey = "_gazelle_python_resolved_deps"
42+
// uuidKey is the attribute key used to uniquely identify a py_library
43+
// target that should be imported by a py_test or py_binary in the same
44+
// Bazel package.
45+
uuidKey = "_gazelle_python_library_uuid"
4246
)
4347

4448
// Resolver satisfies the resolve.Resolver interface. It resolves dependencies
@@ -67,6 +71,13 @@ func (py *Resolver) Imports(c *config.Config, r *rule.Rule, f *rule.File) []reso
6771
provides = append(provides, provide)
6872
}
6973
}
74+
if r.PrivateAttr(uuidKey) != nil {
75+
provide := resolve.ImportSpec{
76+
Lang: languageName,
77+
Imp: r.PrivateAttr(uuidKey).(string),
78+
}
79+
provides = append(provides, provide)
80+
}
7081
if len(provides) == 0 {
7182
return nil
7283
}

gazelle/python/target.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type targetBuilder struct {
2929
name string
3030
pythonProjectRoot string
3131
bzlPackage string
32+
uuid string
3233
srcs *treeset.Set
3334
siblingSrcs *treeset.Set
3435
deps *treeset.Set
@@ -54,6 +55,15 @@ func newTargetBuilder(kind, name, pythonProjectRoot, bzlPackage string, siblingS
5455
}
5556
}
5657

58+
// setUUID sets the given UUID for the target. It's used to index the generated
59+
// target based on this value in addition to the other ways the targets can be
60+
// imported. py_{binary,test} targets in the same Bazel package can add a
61+
// virtual dependency to this UUID that gets resolved in the Resolver interface.
62+
func (t *targetBuilder) setUUID(uuid string) *targetBuilder {
63+
t.uuid = uuid
64+
return t
65+
}
66+
5767
// addSrc adds a single src to the target.
5868
func (t *targetBuilder) addSrc(src string) *targetBuilder {
5969
t.srcs.Add(src)
@@ -71,16 +81,9 @@ func (t *targetBuilder) addSrcs(srcs *treeset.Set) *targetBuilder {
7181

7282
// addModuleDependency adds a single module dep to the target.
7383
func (t *targetBuilder) addModuleDependency(dep module) *targetBuilder {
74-
fileName := dep.Name + ".py"
75-
if dep.From != "" {
76-
fileName = dep.From + ".py"
84+
if dep.Name+".py" == filepath.Base(dep.Filepath) || !t.siblingSrcs.Contains(dep.Name+".py") {
85+
t.deps.Add(dep)
7786
}
78-
if t.siblingSrcs.Contains(fileName) && fileName != filepath.Base(dep.Filepath) {
79-
// importing another module from the same package, converting to absolute imports to make
80-
// dependency resolution easier
81-
dep.Name = importSpecFromSrc(t.pythonProjectRoot, t.bzlPackage, fileName).Imp
82-
}
83-
t.deps.Add(dep)
8487
return t
8588
}
8689

@@ -135,6 +138,9 @@ func (t *targetBuilder) generateImportsAttribute() *targetBuilder {
135138
// build returns the assembled *rule.Rule for the target.
136139
func (t *targetBuilder) build() *rule.Rule {
137140
r := rule.NewRule(t.kind, t.name)
141+
if t.uuid != "" {
142+
r.SetPrivateAttr(uuidKey, t.uuid)
143+
}
138144
if !t.srcs.Empty() {
139145
r.SetAttr("srcs", t.srcs.Values())
140146
}

gazelle/python/testdata/generated_test_entrypoint/BUILD.out

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,8 @@ py_test(
1717
name = "generated_test_entrypoint_test",
1818
srcs = [":__test__"],
1919
main = ":__test__.py",
20-
deps = [":__test__"],
20+
deps = [
21+
":__test__",
22+
":generated_test_entrypoint",
23+
],
2124
)

gazelle/python/testdata/naming_convention/__main__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@
1313
# limitations under the License.
1414

1515
# For test purposes only.
16-
import __init__

gazelle/python/testdata/naming_convention/__test__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@
1313
# limitations under the License.
1414

1515
# For test purposes only.
16-
import __init__

gazelle/python/testdata/naming_convention/dont_rename/__main__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@
1313
# limitations under the License.
1414

1515
# For test purposes only.
16-
import __init__

gazelle/python/testdata/naming_convention/dont_rename/__test__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@
1313
# limitations under the License.
1414

1515
# For test purposes only.
16-
import __init__

gazelle/python/testdata/naming_convention/resolve_conflict/__main__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@
1313
# limitations under the License.
1414

1515
# For test purposes only.
16-
import __init__

gazelle/python/testdata/naming_convention/resolve_conflict/__test__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@
1313
# limitations under the License.
1414

1515
# For test purposes only.
16-
import __init__

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy