To solve this problem, we need to define the decision variables, objective function, and constraints. Let's denote the number of days per week that the eastern location operates as $x$ and the number of days per week that the western location operates as $y$. The objective is to minimize the total cost.

The costs associated with operating each location are given: the eastern location costs $1000 per day, and the western location costs $2000 per day. Thus, the total weekly cost can be represented as $1000x + 2000y$.

The production rates for each type of caviar at both locations are also provided:
- Eastern location: 5 tons of cheap caviar, 7 tons of regular caviar, and 1 ton of expensive caviar per day.
- Western location: 2 tons of cheap caviar, 6 tons of regular caviar, and 4 tons of expensive caviar per day.

The company has contractual obligations to supply:
- 25 tons of cheap caviar,
- 35 tons of regular caviar,
- 15 tons of expensive caviar per week.

To meet these demands, the following inequalities must hold:
1. For cheap caviar: $5x + 2y \geq 25$
2. For regular caviar: $7x + 6y \geq 35$
3. For expensive caviar: $x + 4y \geq 15$

Since $x$ and $y$ represent days, they must be non-negative.

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

```python
from gurobipy import *

# Create a model
m = Model("Caviar_Production")

# Define variables
x = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Eastern_Location_Days")
y = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Western_Location_Days")

# Objective function: Minimize total weekly cost
m.setObjective(1000*x + 2000*y, GRB.MINIMIZE)

# Constraints
m.addConstr(5*x + 2*y >= 25, name="Cheap_Caviar_Demand")
m.addConstr(7*x + 6*y >= 35, name="Regular_Caviar_Demand")
m.addConstr(x + 4*y >= 15, name="Expensive_Caviar_Demand")

# Solve the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print(f"Eastern location should operate for {x.x} days.")
    print(f"Western location should operate for {y.x} days.")
    print(f"Total weekly cost: ${m.objVal}")
else:
    print("No optimal solution found.")

```