rchain / rchain-api

Obsoleted in favor of https://github.com/rchain-community/rchain-api. Use at your own risk.
Other
8 stars 4 forks source link

diagram of .proto messages #9

Closed JoshOrndorff closed 5 years ago

JoshOrndorff commented 5 years ago

From @dckc on September 11, 2018 1:59

e.g. using https://github.com/vak/protobuf2uml

Copied from original issue: JoshOrndorff/RChain-API#11

JoshOrndorff commented 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.

JoshOrndorff commented 5 years ago

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

JoshOrndorff commented 5 years ago

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?
JoshOrndorff commented 5 years ago

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/

JoshOrndorff commented 5 years ago

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

JoshOrndorff commented 5 years ago

More work lies ahead, but ground is broken c8ce61663537f346681fd8ec6c86d44efcbb453f

JoshOrndorff commented 5 years ago

Okay, I'll stop the stream of consciousness for now. But this is coming along.

out

JoshOrndorff commented 5 years ago

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.

JoshOrndorff commented 5 years ago

Oh interesting idea. I wonder if https://github.com/geotho/protobuf-to-typescript plus https://github.com/joaompneves/tsviz would work

JoshOrndorff commented 5 years ago

This issue was moved to rchain/rchain-api#7