Unable to delete a Project, only Archive

This may just be specific to my clients configuration, but I don’t seem to be able to delete a project, I’m only able to “archive” it.
I’ve trawled through the permissions for project entities and for my profile, but the ‘delete’ option on Projects is greyed out with “*custom” displayed next to it.
Any idea where I might be able to enable project deletion?
Thanks
p.

3 Likes

Hi Patrick!

We disabled project deletion (in the web UI) back in the 8.0 release because it didn’t provide a different user experience than archiving. Deleting (aka retiring) a project can take hours to perform and cause issues for the database because of all the cascading retirement that needs to happen. In most use cases, archiving should be enough. If you still really need to delete a Project, you can via the API.

Let me know if that helps explain the rationale behind the change, or if there’s any added clarification we can provide!

2 Likes

Ah thanks, I had a feeling something like that would be the cause.
I’m just writing some docs for a client and I wanted to start afresh with a new project of the same name, but it looks like that won’t work.
It also looks like changing the name of the old project, then creating a new project with the original name causes some issues with the pathcache. I seem to be digging a nice hole for myself here!
Thanks for the explanation anyhoo!
Cheers
p.

1 Like

I think I’ll delete the projects using the api… are there any risks involved? They are pretty much empty projects with just a few tasks and 1 or 2 entities.

Hey Patrick,

When deleting a Project, there’s not as much risk. The major issue in retiring a Project is that, like Foz mentioned, it can take a while to complete because of the cascading retirement. Even if the API call eventually times out, the retirement is a background job that will keep running (you’ll know that it’s finally complete when the Project itself eventually disappears from the UI). More issues can arise from trying to un-retire a project; this is where you can get yourself into trouble with (for example) connection entities that already exist and have uniqueness constraints, which would prevent the revival process from completing. As the db is constantly changing through use, the chances of painting yourself into a weird corner with Project revival increases over time.

I think it’s generally safe to say that Project deletion via the API is okay if you’re 100% sure that you never want to see the Project again and wouldn’t be a sad panda if you couldn’t revive it.

Hope that helps!

-tony.

3 Likes

I actually have a support request open for this 103857 as I find it annoying to have to go through the api when testing new configs. It’s not uncommon for people to create a test project to safely experiment with certain aspects, and those can just be deleted when done.
I’d prefer having a UI option again that is extra-super-diligent in triple checking that the user wants to delete a project (e.g. you have to type the name of the project do confirm it’s deletion).
Just taking this option away seemed like a regression to me.

Hey Frank,

I can totally see your use case for small tests. In that instance, if you’re determined, you could create an AMI that would retire a Project. That would keep you in the UI. :slight_smile:

-tony.

3 Likes

Hi Frank, thanks for posting this. As @brandon.foster says we currently disallow retiring projects as it was causing people a lot of grief when the projects were big (or if they tried to unretire them). I totally get what you’re saying about wanting to remove clutter.

Seems like we could find a slightly better balance that would better accommodate your situation. I’ll leave a note for us to look at this again.

4 Likes

Hello. I am facing the same problem right now. can you help me, where to find the api for deleting archived projects?

1 Like

Hi Folks,

We’ve added the ability to retire a Project back into the web UI in the 8.9 release. It is gated in such a way that it still has to be done deliberately in an effort to avoid any accidental deletions.

To do this, from your Projects page first Archive the Project in question. Then, when you right-click on that Project you should see the option to retire the Project at the bottom of the context menu. Let us know how that works for you!

3 Likes

Hi @brandon.foster,

what would be the difference between archiving and retiring a project.

It seems like will not delete your project for good right. So to actually deleting a project you must go through the api right ?

2 Likes

You can read a little bit more about what archiving does on this page: Archiving Projects. Retiring a Project sends the Project, and all its contents to the trash. It is much harder to undo a retirement, so you should only need to retire a Project when you’re absolutely sure you no longer need it or its data.

You can retire a Project in one of two ways. One is through the API, like you mentioned. The other is through the web UI, though with a two-step process to ensure it isn’t done by accident. For the UI method you first archive the Project, and then the “send to trash” option becomes available when you right-click on the Project in the Projects page.

1 Like

Also of note – If you retire a project through the UI, the retire process will likely take a long while. If this is the case, you might see an error window pop up saying that javascript timed out – this is a known limitation where any JS that runs longer than 90 seconds will time out, but don’t panic! The retirement is still running in the background. You will know that retirement is complete when the Project disappears from the list of active Projects (the Project entity itself is the last thing to disappear).

2 Likes

Is it actually possible to delete via the API?
From the documentation on sg.delete():
Retire the specified entity.

Entities in Shotgun are not “deleted” destructively, they are instead, “retired”. This means they are placed in the trash where they are no longer accessible to users.

The entity can be brought back to life using `revive()`

That seems to imply there is no actual way to delete via the API. Is that true? Or is there some kind of hidden way to do that?