Closed marciodebarros closed 6 years ago
Hi @marciodebarros. I am super busy this week and I haven't looked closely at this, but I can maybe get you started. Yes, a set card property in goblin expects to be assigned a set. After the set is assigned, then you can add. You should be able to initialize with say, a string literal, and it will wrap it up in a set for you.
As far as the doubled IPs in the set, you shouldn't be able to do that. I will look more closely at this.
The server error looks like you are jusing Janus graph and you have not defined a set card property in your schema...this is a requirement. If you are not using Janus, please let me know.
Hi @davebshow I am indeed using Janus. Regarding the schema, I haven't defined one as I was hoping that would get defined implicitly. Is this something that Goblin currently supports or will I need to do from Gremlin console ? Thank you.
Made any progress here? You can define the schema either in the gremlin console or by submitting a string using the client provided by aiogremlin. Automatic schema creation does not work (AFAIK) with multi-card properties
Hi Dave. Yes, I defined the schema using the console, but now I am running into a new (expected) issue which I need to resolve before I can validate the .set() issue. Now because I have defined a Unique constraint on some of my Vertices, when I try to add a existing vertex, I get an constraint violation error. In an OGM I was using for Neo4j there was an "add or update" method which would handle that. Does TinkerPop/JanusGraph have a similar option, or would I have to implement it myself? Would this be something that you would eventually consider for implementation on Goblin ?
I'm also interested in an create_or_update functionality it looks like this can be accomplished in one go:
e.g.
g.v('userId').fold().coalesce(unfold(), addV('users').property('id', 'userId'))
But I am not sure how to best do this via goblin's session.
Do you mean that you would like to issue a traversal like that using Goblins session? Or integrate that functionality into Goblin? The traversal should be straightforward:
# all required imports +
from gremlin_python import statics
# loading statics enables __.unfold() to be unfold() etc.
statics.load_statics(globals())
#... in async function
session = await app.session()
await session.g.V('userId').fold().coalesce(unfold(), addV('users').property('id', 'userId')).iterate()
That is untested, but something like that should work.
I have a Vertex class which defines a property (ip_address) as multi-valued set:
At first when I was trying to insert data into it using the following code:
I was getting an exception saying that "NoneType object has not attribute add". I fixed that error by adding before the call to the ".add()" method.
In the same code, the purpose of the next if statement is to add a second and different ip address after the first one is entered. However the validate to check if the IP address is in the set fails and it gets added twice, and when I run the code in debug mode I am noticing that the same ip address is getting added twice, and I am getting the following exception:
So my questions at this time are:
Thank you in advance for any help.
--MD