To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of wallets as \(W\) and the number of purses as \(P\). The profit per wallet is $50, and the profit per purse is $100. Therefore, the total profit can be represented as \(50W + 100P\).

The constraints are based on the time available for cutting and stitching. For cutting, a wallet requires 10 minutes, and a purse requires 15 minutes, with a total of 500 minutes available per day. This gives us the constraint \(10W + 15P \leq 500\). For stitching, a wallet requires 20 minutes, and a purse requires 30 minutes, with a total of 600 minutes available per day, leading to the constraint \(20W + 30P \leq 600\).

Additionally, we know that the shop cannot make a negative number of wallets or purses, so \(W \geq 0\) and \(P \geq 0\).

Now, let's express this problem in Gurobi code using Python:

```python
from gurobipy import *

# Create a new model
m = Model("Leather_Shop")

# Define the decision variables
W = m.addVar(lb=0, vtype=GRB.INTEGER, name="Wallets")
P = m.addVar(lb=0, vtype=GRB.INTEGER, name="Purses")

# Set the objective function to maximize profit
m.setObjective(50*W + 100*P, GRB.MAXIMIZE)

# Add constraints for cutting and stitching time
m.addConstr(10*W + 15*P <= 500, name="Cutting_Time")
m.addConstr(20*W + 30*P <= 600, name="Stitching_Time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: {W.varName} = {W.x}, {P.varName} = {P.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")
```