示例#1
0
def run(cmd):
    client_data_path = '../client_data'
    # NOTE(gRPC Python Team): .close() is possible on a channel and should be
    # used in circumstances in which the with statement does not fit the needs
    # of the code.
    with grpc.insecure_channel('localhost:9700') as channel:
        stub = network_pb2_grpc.NetworkStub(channel)
        # CreateNetwork endpoint
        if cmd == "CreateNetwork":
            newNetwork = network_pb2.NetworkDetails()
            newNetwork.name = 'myNetwork1218'
            newNetwork.owner_id = '*****@*****.**'
            newNetwork.description = 'some blah description pt 5'
            image_string = "image_data_12345"
            newNetwork.image = image_string.encode('utf-8')
            response = CreateNetwork(stub, newNetwork)
            print("Greeter client received: " + response.network_name)

        # GetNetworksForUser endpoint
        elif cmd == "GetNetworksForUser":
            response = GetNetworksForUser(stub, '*****@*****.**')
            print(MessageToJson(response))

        # JoinNetwork endpoint
        elif cmd == "JoinNetwork":
            JoinNetwork(stub, '*****@*****.**', 'myNetwork1109')

        # Command to populate DB with dummy data
        elif cmd == "LoadTestData":
            print("Loading test data...")
            data = ''
            with open(f'{client_data_path}/client_data.json') as f:
                data = json.load(f)
            # create all users
            print("Creating %d users" % len(data['users']))
            for u in data['users']:
                userDetails = Parse(json.dumps(u), network_pb2.UserDetails())
                stub.CreateUser(
                    network_pb2.CreateUserRequest(user=userDetails))

            # prepare list of item image filenames
            item_image_filenames = []
            for root, dirs, files in os.walk(
                    f'{client_data_path}/images/items'):
                item_image_filenames = list(
                    filter(lambda f: f.endswith('.jpg'), files))

            # create all networks
            print("Creating %d networks" % len(data['networks']))
            for n in data['networks']:
                users = []
                alreadyOwned = 'owner_id' in n
                # If an owner's been assigned, get 9 other users
                if alreadyOwned:
                    users = random.sample(data['users'], 9)
                    # Make sure not to re-add the owner
                    while any(u['email'] == n['owner_id'] for u in users):
                        users = random.sample(data['users'], 9)
                # Otherwise just get 10 random users and assign the first one as owner
                else:
                    users = random.sample(data['users'], 10)
                    n['owner_id'] = users[0]['email']

                # Create the network itself
                newNetwork = network_pb2.NetworkDetails()
                newNetwork.name = n['name']
                newNetwork.description = n['description']
                newNetwork.owner_id = n['owner_id']

                # Get network image
                network_image_name = n['image']
                network_image_path = f'{client_data_path}/images/{network_image_name}'
                newNetwork.image = GetImageData(network_image_path)
                CreateNetwork(stub, newNetwork)

                # Add users to network
                for u in users:
                    if (u['email'] != newNetwork.owner_id):
                        JoinNetwork(stub, u['email'], n['name'])

                # add items
                for i in n['items']:
                    item = Parse(json.dumps(i), network_pb2.ItemDetails())
                    item.network_name = n['name']
                    email = n['owner_id'] if alreadyOwned else (
                        random.choice(users)['email'])
                    item_image_name = random.choice(item_image_filenames)
                    item_image_path = f'{client_data_path}/images/items/{item_image_name}'
                    item.image = GetImageData(item_image_path)
                    SubmitItem(stub, item, email)

        # SubmitItemOffer endpoint
        elif cmd == "SubmitItemOffer":
            item = network_pb2.ItemOffer()
            item.email = '*****@*****.**'
            item.title = 'Through the Looking Glass'
            item.offer = 175

            stub.SubmitItemOffer(
                network_pb2.SubmitItemOfferRequest(item_offer=item))

        # GetOffersMadeByUser endpoint
        elif cmd == "GetOffersMadeByUser":
            response = stub.GetOffersMadeByUser(
                network_pb2.GetOffersMadeByUserRequest(
                    email='*****@*****.**'))
            print(MessageToJson(response))

        # GetOffersForUserItems endpoint
        elif cmd == "GetOffersForUserItems":
            response = stub.GetOffersForUserItems(
                network_pb2.GetOffersForUserItemsRequest(
                    email='*****@*****.**'))
            print(MessageToJson(response))

        # GetItemsForUser endpoint
        elif cmd == "GetItemsForUser":
            response = stub.GetItemsForUser(
                network_pb2.GetItemsForUserRequest(email='*****@*****.**'))
            print(MessageToJson(response))

        # AcceptOffer endpoint
        elif cmd == "AcceptOffer":
            response = stub.AcceptOffer(
                network_pb2.AcceptOfferRequest(
                    item_title='Through the Looking Glass',
                    offer_email='*****@*****.**'))
            print(MessageToJson(response))

        # Test to create user and get user
        elif cmd == "test":
            userDetails = network_pb2.UserDetails()
            userDetails.first_name = "John"
            userDetails.last_name = "Smith"
            userDetails.email = "*****@*****.**"
            userRequest = network_pb2.CreateUserRequest(user=userDetails)
            response = stub.CreateUser(userRequest)
            print(MessageToJson(response))

            userDetails2 = network_pb2.UserDetails()
            userDetails2.first_name = "John"
            userDetails2.last_name = "White"
            userDetails2.email = "*****@*****.**"
            userRequest = network_pb2.CreateUserRequest(user=userDetails2)
            response = stub.CreateUser(userRequest)
            print(MessageToJson(response))

            userDetails3 = network_pb2.UserDetails()
            userDetails3.first_name = "Jimmy"
            userDetails3.last_name = "White"
            userDetails3.email = "*****@*****.**"
            userRequest = network_pb2.CreateUserRequest(user=userDetails3)
            response = stub.CreateUser(userRequest)
            print(MessageToJson(response))

            getUserRequest = network_pb2.GetUserRequest(
                email=userDetails.email)
            response = stub.GetUser(getUserRequest)
            print(MessageToJson(response))

            newNetwork = network_pb2.NetworkDetails()
            newNetwork.name = 'myNetwork'
            newNetwork.owner_id = userDetails.email
            newNetwork.description = 'some blah description'
            response = stub.CreateNetwork(
                network_pb2.CreateNetworkRequest(network=newNetwork))
            print("Greeter client received: " + response.network_name)

            item = network_pb2.ItemDetails()
            item.title = "test item"
            item.description = "an item for testing"
            item.asking_price = 25.23
            item.network_name = newNetwork.name
            image_string = "image_data_12345"
            item.image = image_string.encode('utf-8')

            submitItemRequest = network_pb2.SubmitItemRequest(
                item_details=item)
            submitItemRequest.email = userDetails.email

            response = stub.SubmitItem(submitItemRequest)
            print(MessageToJson(response))

            item = network_pb2.ItemDetails()
            item.title = "test item two"
            item.description = "another item for testing"
            item.asking_price = 25.233245
            item.network_name = newNetwork.name
            image_string = "image_data_12345"
            item.image = image_string.encode('utf-8')

            submitItemRequest = network_pb2.SubmitItemRequest(
                item_details=item)
            submitItemRequest.email = userDetails.email

            response = stub.SubmitItem(submitItemRequest)
            print(MessageToJson(response))

            getItemsForUsersRequest = network_pb2.GetItemsForUserRequest(
                email=userDetails.email)
            response = stub.GetItemsForUser(getItemsForUsersRequest)
            print(MessageToJson(response))

            getItemsForNetworkRequest = network_pb2.GetItemsForNetworkRequest(
                network_name=newNetwork.name)
            response = stub.GetItemsForNetwork(getItemsForNetworkRequest)
            print(MessageToJson(response))

            itemOffer = network_pb2.ItemOffer()
            itemOffer.email = userDetails2.email
            itemOffer.title = item.title
            itemOffer.offer = 12

            response = stub.SubmitItemOffer(
                network_pb2.SubmitItemOfferRequest(item_offer=itemOffer))
            print(MessageToJson(response))

            itemOffer = network_pb2.ItemOffer()
            itemOffer.email = userDetails3.email
            itemOffer.title = item.title
            itemOffer.offer = 121234

            response = stub.SubmitItemOffer(
                network_pb2.SubmitItemOfferRequest(item_offer=itemOffer))
            print(MessageToJson(response))

            response = stub.GetOffersMadeByUser(
                network_pb2.GetOffersMadeByUserRequest(
                    email=userDetails2.email))
            print(MessageToJson(response))

            response = stub.GetOffersMadeByUser(
                network_pb2.GetOffersMadeByUserRequest(
                    email=userDetails3.email))
            print(MessageToJson(response))

            response = stub.GetOffersForUserItems(
                network_pb2.GetOffersForUserItemsRequest(
                    email=userDetails.email))
            print(MessageToJson(response))

            response = stub.AcceptOffer(
                network_pb2.AcceptOfferRequest(item_title=item.title,
                                               offer_email=userDetails3.email))
            print(MessageToJson(response))

            response = stub.GetOffersMadeByUser(
                network_pb2.GetOffersMadeByUserRequest(
                    email=userDetails2.email))
            print(MessageToJson(response))

            response = stub.GetOffersMadeByUser(
                network_pb2.GetOffersMadeByUserRequest(
                    email=userDetails3.email))
            print(MessageToJson(response))

            response = stub.GetOffersForUserItems(
                network_pb2.GetOffersForUserItemsRequest(
                    email=userDetails.email))
            print(MessageToJson(response))

        else:
            print("Unknown command.")