To solve this problem, we need to define the decision variables, objective function, and constraints. Let's denote the number of mugs as `m` and the number of bowls as `b`.

The objective is to maximize profit, which can be calculated as $10m + 15b$.

There are two main constraints:
1. Time constraint: The total time spent making mugs and bowls should not exceed 1200 minutes. Since each mug takes 20 minutes and each bowl takes 30 minutes, this constraint can be represented as `20m + 30b <= 1200`.
2. Clay constraint: The artist only has enough clay to make a total of 50 items. This constraint can be represented as `m + b <= 50`.

Additionally, both `m` and `b` should be non-negative integers since the artist cannot produce negative items.

Here's how we translate these constraints and the objective function into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
model = Model("Pottery_Profit")

# Define variables
m = model.addVar(vtype=GRB.INTEGER, name="mugs")
b = model.addVar(vtype=GRB.INTEGER, name="bowls")

# Objective function: Maximize profit
model.setObjective(10*m + 15*b, GRB.MAXIMIZE)

# Constraints
model.addConstr(20*m + 30*b <= 1200, name="time_constraint")
model.addConstr(m + b <= 50, name="clay_constraint")

# Non-negativity constraints (not necessary with vtype=GRB.INTEGER but for clarity)
model.addConstr(m >= 0, name="m_non_negative")
model.addConstr(b >= 0, name="b_non_negative")

# Optimize model
model.optimize()

# Print results
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution: {int(m.x)} mugs and {int(b.x)} bowls.")
    print(f"Maximum profit: ${10*int(m.x) + 15*int(b.x)}")
else:
    print("No optimal solution found.")

```