import os
import base64
import datetime
from django.db.models import F, Q
from xos.config import Config
from synchronizers.base.openstacksyncstep import OpenStackSyncStep
from core.models.user import User
from xos.logger import observer_logger as logger

#class SyncRoles(OpenStackSyncStep):
#    provides=[User]
#    requested_interval=0
#    observes=User
#
#    def fetch_pending(self, deleted):
#        if (deleted):
#            # users marked as deleted
#            return User.deleted_objects.all()
#        else:
#            # disabled users that haven't been updated in over a week
#            one_week_ago = datetime.datetime.now() - datetime.timedelta(days=7)
#            return User.objects.filter(is_active=False, updated__gt=one_week_ago)
#
#    def sync_record(self, user):
#        user.delete()
