santosh-iima's picture
Upload 91 files
beb8990 verified
from datetime import datetime
from sqlalchemy import Column, String, ForeignKey, Enum, DateTime
from sqlalchemy.orm import relationship
from .base import Base
import enum
class AclRole(enum.Enum):
none = "none"
freeBusyReader = "freeBusyReader"
reader = "reader"
writer = "writer"
owner = "owner"
class ScopeType(enum.Enum):
default = "default"
user = "user"
group = "group"
domain = "domain"
class Scope(Base):
__tablename__ = "scopes"
id = Column(String, primary_key=True, index=True)
type = Column(Enum(ScopeType), nullable=False)
value = Column(String, nullable=True) # Optional for default
# Relationship to ACLs
acls = relationship("ACLs", back_populates="scope", cascade="all, delete-orphan")
def as_dict(self):
return {"type": self.type.value, "value": self.value}
class ACLs(Base):
__tablename__ = "acls"
id = Column(String, primary_key=True, index=True)
calendar_id = Column(String, ForeignKey("calendars.calendar_id"), nullable=False, index=True)
user_id = Column(String, ForeignKey("users.user_id"), nullable=False, index=True)
scope_id = Column(String, ForeignKey("scopes.id"), nullable=False)
role = Column(Enum(AclRole), nullable=False)
etag = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationships
calendar = relationship("Calendar", back_populates="acls")
user = relationship("User", back_populates="acls")
scope = relationship("Scope", back_populates="acls")