Closed JoshOrndorff closed 5 years ago
I gave it a crack tonight with https://github.com/malisas/schema-uml/tree/master/protobuf2uml (Haven't yet tried the first one). Didn't work out of the box, but might not be hard to fix.
Still trying, but still stuck atm. While using https://github.com/vak/protobuf2uml I'm unsure what the import paths are supposed to be so I omitted them. I get stuck with
joshy@MicrosoftSurface:~/pkg/protobuf2uml/protobuf$ PYTHONPATH=~/pkg/protobuf2uml/bin/protobuf/ python3 main.py ./OneBigProto.proto | dot -Tjpg >/tmp/uml.jpg
Traceback (most recent call last):
File "/home/joshy/pkg/protobuf2uml/bin/protobuf/ProtoParser.py", line 545, in proto
Error: <stdin>: syntax error in line 19 near '!'
self._errHandler.sync(self)
File "/usr/local/lib/python3.5/dist-packages/antlr4/error/ErrorStrategy.py", line 220, in sync
raise InputMismatchException(recognizer)
antlr4.error.Errors.InputMismatchException: None
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 156, in <module>
cli_main()
File "main.py", line 153, in cli_main
ostream=sys.stdout)
File "main.py", line 139, in non_cli_main
ostream=ostream)
File "main.py", line 130, in __init__
self._tree = parser.proto()
File "/home/joshy/pkg/protobuf2uml/bin/protobuf/ProtoParser.py", line 589, in proto
self._errHandler.reportError(self, re)
File "/usr/local/lib/python3.5/dist-packages/antlr4/error/ErrorStrategy.py", line 126, in reportError
self.reportInputMismatch(recognizer, e)
File "/usr/local/lib/python3.5/dist-packages/antlr4/error/ErrorStrategy.py", line 263, in reportInputMismatch
+ " expecting " + e.getExpectedTokens().toString(recognizer.literalNames, recognizer.symbolicNames)
AttributeError: 'ProtoParser' object has no attribute 'literalNames'
When using https://github.com/malisas/schema-uml/tree/master/protobuf2uml, protoc --include_source_info -o MyFileDescriptorSet.pb *
generates a file with non-printable characters that the python script chokes on. Looks like maybe it is only for proto2? Not really sure
Next attempt is using https://github.com/tssp/protoc-gen-uml
joshy@MicrosoftSurface:~/ProgrammingProjects$ git clone https://github.com/tssp/protoc-gen-uml
Cloning into 'protoc-gen-uml'...
remote: Counting objects: 154, done.
remote: Total 154 (delta 0), reused 0 (delta 0), pack-reused 154
Receiving objects: 100% (154/154), 200.85 KiB | 0 bytes/s, done.
Resolving deltas: 100% (34/34), done.
joshy@MicrosoftSurface:~/ProgrammingProjects$ cd protoc-gen-uml/
joshy@MicrosoftSurface:~/ProgrammingProjects/protoc-gen-uml$ sbt universal:stage
[info] Updated file /home/joshy/ProgrammingProjects/protoc-gen-uml/project/build.properties: set sbt.version to 1.1.6
[info] Loading settings from plugins.sbt ...
[info] Loading project definition from /home/joshy/ProgrammingProjects/protoc-gen-uml/project
[info] Updating ProjectRef(uri("file:/home/joshy/ProgrammingProjects/protoc-gen-uml/project/"), "protoc-gen-uml-build")...
[warn] module not found: com.typesafe.sbt#sbt-native-packager;1.1.1
[warn] ==== typesafe-ivy-releases: tried
[warn] https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.1.1/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn] https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.1.1/ivys/ivy.xml
[warn] ==== local: tried
[warn] /home/joshy/.ivy2/local/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.1.1/ivys/ivy.xml
[warn] ==== public: tried
[warn] https://repo1.maven.org/maven2/com/typesafe/sbt/sbt-native-packager_2.12_1.0/1.1.1/sbt-native-packager-1.1.1.pom
[warn] ==== local-preloaded-ivy: tried
[warn] /home/joshy/.sbt/preloaded/com.typesafe.sbt/sbt-native-packager/1.1.1/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn] file:////home/joshy/.sbt/preloaded/com/typesafe/sbt/sbt-native-packager_2.12_1.0/1.1.1/sbt-native-packager-1.1.1.pom
[warn] module not found: com.geirsson#sbt-scalafmt;0.3.1
[warn] ==== typesafe-ivy-releases: tried
[warn] https://repo.typesafe.com/typesafe/ivy-releases/com.geirsson/sbt-scalafmt/scala_2.12/sbt_1.0/0.3.1/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn] https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.geirsson/sbt-scalafmt/scala_2.12/sbt_1.0/0.3.1/ivys/ivy.xml
[warn] ==== local: tried
[warn] /home/joshy/.ivy2/local/com.geirsson/sbt-scalafmt/scala_2.12/sbt_1.0/0.3.1/ivys/ivy.xml
[warn] ==== public: tried
[warn] https://repo1.maven.org/maven2/com/geirsson/sbt-scalafmt_2.12_1.0/0.3.1/sbt-scalafmt-0.3.1.pom
[warn] ==== local-preloaded-ivy: tried
[warn] /home/joshy/.sbt/preloaded/com.geirsson/sbt-scalafmt/0.3.1/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn] file:////home/joshy/.sbt/preloaded/com/geirsson/sbt-scalafmt_2.12_1.0/0.3.1/sbt-scalafmt-0.3.1.pom
[warn] module not found: net.virtual-void#sbt-dependency-graph;0.8.2
[warn] ==== typesafe-ivy-releases: tried
[warn] https://repo.typesafe.com/typesafe/ivy-releases/net.virtual-void/sbt-dependency-graph/scala_2.12/sbt_1.0/0.8.2/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn] https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/net.virtual-void/sbt-dependency-graph/scala_2.12/sbt_1.0/0.8.2/ivys/ivy.xml
[warn] ==== local: tried
[warn] /home/joshy/.ivy2/local/net.virtual-void/sbt-dependency-graph/scala_2.12/sbt_1.0/0.8.2/ivys/ivy.xml
[warn] ==== public: tried
[warn] https://repo1.maven.org/maven2/net/virtual-void/sbt-dependency-graph_2.12_1.0/0.8.2/sbt-dependency-graph-0.8.2.pom
[warn] ==== local-preloaded-ivy: tried
[warn] /home/joshy/.sbt/preloaded/net.virtual-void/sbt-dependency-graph/0.8.2/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn] file:////home/joshy/.sbt/preloaded/net/virtual-void/sbt-dependency-graph_2.12_1.0/0.8.2/sbt-dependency-graph-0.8.2.pom
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: com.typesafe.sbt#sbt-native-packager;1.1.1: not found
[warn] :: com.geirsson#sbt-scalafmt;0.3.1: not found
[warn] :: net.virtual-void#sbt-dependency-graph;0.8.2: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes.
[warn] com.typesafe.sbt:sbt-native-packager:1.1.1 (scalaVersion=2.12, sbtVersion=1.0)
[warn] com.geirsson:sbt-scalafmt:0.3.1 (scalaVersion=2.12, sbtVersion=1.0)
[warn] net.virtual-void:sbt-dependency-graph:0.8.2 (scalaVersion=2.12, sbtVersion=1.0)
[warn]
[warn] Note: Unresolved dependencies path:
[warn] com.typesafe.sbt:sbt-native-packager:1.1.1 (scalaVersion=2.12, sbtVersion=1.0) (/home/joshy/ProgrammingProjects/protoc-gen-uml/project/plugins.sbt#L1-2)
[warn] +- default:protoc-gen-uml-build:0.1.0-SNAPSHOT (scalaVersion=2.12, sbtVersion=1.0)
[warn] com.geirsson:sbt-scalafmt:0.3.1 (scalaVersion=2.12, sbtVersion=1.0) (/home/joshy/ProgrammingProjects/protoc-gen-uml/project/plugins.sbt#L3-4)
[warn] +- default:protoc-gen-uml-build:0.1.0-SNAPSHOT (scalaVersion=2.12, sbtVersion=1.0)
[warn] net.virtual-void:sbt-dependency-graph:0.8.2 (scalaVersion=2.12, sbtVersion=1.0) (/home/joshy/ProgrammingProjects/protoc-gen-uml/project/plugins.sbt#L5-6)
[warn] +- default:protoc-gen-uml-build:0.1.0-SNAPSHOT (scalaVersion=2.12, sbtVersion=1.0)
[error] sbt.librarymanagement.ResolveException: unresolved dependency: com.typesafe.sbt#sbt-native-packager;1.1.1: not found
[error] unresolved dependency: com.geirsson#sbt-scalafmt;0.3.1: not found
[error] unresolved dependency: net.virtual-void#sbt-dependency-graph;0.8.2: not found
[error] at sbt.internal.librarymanagement.IvyActions$.resolveAndRetrieve(IvyActions.scala:334)
[error] at sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEither$1(IvyActions.scala:208)
[error] at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withModule$1(Ivy.scala:243)
[error] at sbt.internal.librarymanagement.IvySbt.$anonfun$withIvy$1(Ivy.scala:204)
[error] at sbt.internal.librarymanagement.IvySbt.sbt$internal$librarymanagement$IvySbt$$action$1(Ivy.scala:70)
[error] at sbt.internal.librarymanagement.IvySbt$$anon$3.call(Ivy.scala:77)
[error] at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:95)
[error] at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:80)
[error] at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:99)
[error] at xsbt.boot.Using$.withResource(Using.scala:10)
[error] at xsbt.boot.Using$.apply(Using.scala:9)
[error] at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:60)
[error] at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:50)
[error] at xsbt.boot.Locks$.apply0(Locks.scala:31)
[error] at xsbt.boot.Locks$.apply(Locks.scala:28)
[error] at sbt.internal.librarymanagement.IvySbt.withDefaultLogger(Ivy.scala:77)
[error] at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:199)
[error] at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:196)
[error] at sbt.internal.librarymanagement.IvySbt$Module.withModule(Ivy.scala:242)
[error] at sbt.internal.librarymanagement.IvyActions$.updateEither(IvyActions.scala:193)
[error] at sbt.librarymanagement.ivy.IvyDependencyResolution.update(IvyDependencyResolution.scala:20)
[error] at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:56)
[error] at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:46)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$12(LibraryManagement.scala:99)
[error] at sbt.util.Tracked$.$anonfun$lastOutput$1(Tracked.scala:68)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$19(LibraryManagement.scala:112)
[error] at scala.util.control.Exception$Catch.apply(Exception.scala:224)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11(LibraryManagement.scala:112)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11$adapted(LibraryManagement.scala:95)
[error] at sbt.util.Tracked$.$anonfun$inputChanged$1(Tracked.scala:149)
[error] at sbt.internal.LibraryManagement$.cachedUpdate(LibraryManagement.scala:126)
[error] at sbt.Classpaths$.$anonfun$updateTask$5(Defaults.scala:2398)
[error] at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error] at sbt.std.Transform$$anon$4.work(System.scala:66)
[error] at sbt.Execute.$anonfun$submit$2(Execute.scala:263)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] at sbt.Execute.work(Execute.scala:272)
[error] at sbt.Execute.$anonfun$submit$1(Execute.scala:263)
[error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] at java.lang.Thread.run(Thread.java:748)
[error] (update) sbt.librarymanagement.ResolveException: unresolved dependency: com.typesafe.sbt#sbt-native-packager;1.1.1: not found
[error] unresolved dependency: com.geirsson#sbt-scalafmt;0.3.1: not found
[error] unresolved dependency: net.virtual-void#sbt-dependency-graph;0.8.2: not found
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
Can't sink any more time into this today. If we want to write our own it looks like https://github.com/vak/protobuf2uml is based on https://github.com/yesme/protobuf-parser/
The pieces are starting to come together.
We already have a nicely formatted descriptor of the proto structure from https://github.com/JoshOrndorff/RChain-API/blob/master/protobuf/Makefile#L16
We have an example of how to parse such data from https://github.com/vak/protobuf2uml/blob/master/protobuf/main.py#L78-L120
And an example of doing a kinda similar thing in javascript from https://stackoverflow.com/a/33219000/4184410
Guess I need to roll up my sleeves and start glueing stuff together
More work lies ahead, but ground is broken c8ce61663537f346681fd8ec6c86d44efcbb453f
Okay, I'll stop the stream of consciousness for now. But this is coming along.
From @dckc on September 13, 2018 2:12
The .proto -> typescript path looks pretty well trodden, and I see a few typescript -> UML projects. So that's another option.
Oh interesting idea. I wonder if https://github.com/geotho/protobuf-to-typescript plus https://github.com/joaompneves/tsviz would work
This issue was moved to rchain/rchain-api#7
From @dckc on September 11, 2018 1:59
e.g. using https://github.com/vak/protobuf2uml
Copied from original issue: JoshOrndorff/RChain-API#11