예제 #1
0
 def create_dependency(self, name, dep_id, rev_id=-1):
     """
     Add a new dependency
     """
     dep_id = int(dep_id)
     try:
         dep = DBSession.query(GameDepPage).filter_by(gamedeptype="dep", 
                                                      id=dep_id).one()
         if rev_id != -1:
             rev = DBSession.query(GameDepRevision).filter_by(
                                         id=rev_id).one()
         else:
             if dep.revisions.count() > 0:
                 rev = dep.revisions[0]
             else:
                 raise GameDepNotFound
         if not rev in dep.revisions:
             raise GameDepNotFound
     except NoResultFound:
         raise GameDepNotFound
     
     page = self.show(name, no_revision_error=False)[0]
     for pagedep in page.dependencies:
         if pagedep.page.id == dep.id:
             raise GameDepFound
     page.dependencies.append(rev)
예제 #2
0
 def update_binary(self, name, revision, binary_id, operatingsystem, 
                   architecture, binary, request):
     """
     Update a binary
     """
     try:
         if not binary:
             os_obj = DBSession.query(OperatingSystems).filter_by(
                                                 id=operatingsystem).one()
             arch_obj = DBSession.query(Architectures).filter_by(
                                                 id=architecture).one()
     except NoResultFound:
         raise GameDepNotFound
     
     rev = self.show(name, revision)[1]
     bin_obj = None
     for x in rev.binary:
         if x.id == int(binary_id):
             bin_obj = x
             break
     if not bin_obj:
         raise GameDepNotFound
     
     if not binary:
         bin_obj.operatingsystem_obj = os_obj
         bin_obj.architecture_obj = arch_obj
     else:
         file_lib = FileLib(request)
         old_name = bin_obj.file_obj.name
         old_mimetype = bin_obj.file_obj.mimetype
         aio_obj = file_lib.write(old_name, binary, old_mimetype)
         file_lib.delete(bin_obj.file_obj)
         bin_obj.file_obj = aio_obj
예제 #3
0
 def delete_dependency(self, name, dep_id):
     """
     Delete a dependency
     """
     dep_id = int(dep_id)
     page = self.show(name)[0]
     item = self.show_dependency(page, dep_id)
     page.dependencies.remove(item)
     DBSession.flush()
     DBSession.delete(item)
예제 #4
0
    def add_vote(self, db_obj, user, like):
        """
        Add a vote to the database
        """

        vote = BBVotes(user, like)
        vote.post = db_obj
        try:
            DBSession.add(vote)
            transaction.commit()
        except IntegrityError:
            transaction.abort()
            raise AlreadyVoted
예제 #5
0
 def add_forum(self, name, description, category):
     """
     Add a forum
     """
     try:
         self.get_forum_by_name(name)
         raise ForumFound
     except ForumNotFound:
         pass
     forum_obj = BBForum(name, description, category)
     DBSession.add(forum_obj)
     DBSession.flush()
     return forum_obj
예제 #6
0
 def add_vote(self, db_obj, user, like):
     """
     Add a vote to the database
     """
     
     vote = GameDepVotes(user, like)
     vote.game = db_obj
     try:
         DBSession.add(vote)
         transaction.commit()
     except IntegrityError:
         transaction.abort()
         raise AlreadyVoted
예제 #7
0
 def list_architectures(self, with_display_name=True):
     """
     Get a Architecture list from database.
     """
     if with_display_name:
         archlist = DBSession.query(Architectures.id,
                                    Architectures.display_name).order_by(
                                        Architectures.id).all()
         archlist = [(x[0], x[1]) for x in archlist]
     else:
         archlist = DBSession.query(Architectures.id).order_by(
             Architectures.id).all()
         archlist = [x[0] for x in archlist]
     return archlist
예제 #8
0
 def list_operatingsystems(self, with_display_name=True):
     """
     Get a Operating System list from database.
     """
     if with_display_name:
         oslist = DBSession.query(OperatingSystems.id,
                                  OperatingSystems.display_name).order_by(
                                      OperatingSystems.id).all()
         oslist = [(x[0], x[1]) for x in oslist]
     else:
         oslist = DBSession.query(OperatingSystems.id).order_by(
             OperatingSystems.id).all()
         oslist = [x[0] for x in oslist]
     return oslist
예제 #9
0
 def delete(self, request, page):
     """
     Delete a page
     Raise PageNotFound if page does not exist
     """
     if page.thread_id != -1:
         from pyracms_forum.lib.boardlib import BoardLib
         BoardLib().delete_thread(page.thread_id)
     if page.album_id != -1:
         from pyracms_gallery.lib.gallerylib import GalleryLib
         GalleryLib().delete_album(page.album_id, request)
     DBSession.delete(page)
     self.s.delete_from_index(
         request.route_url("article_read", page_id=page.name))
예제 #10
0
 def list_operatingsystems(self, with_display_name=True):
     """
     Get a Operating System list from database.
     """
     if with_display_name:
         oslist = DBSession.query(OperatingSystems.id, 
                                 OperatingSystems.display_name).order_by(
                                 OperatingSystems.id).all()
         oslist = [(x[0], x[1]) for x in oslist]
     else:
         oslist = DBSession.query(OperatingSystems.id).order_by(
                                 OperatingSystems.id).all()
         oslist = [x[0] for x in oslist]
     return oslist
예제 #11
0
 def update(self, request, page, article, summary, user, tags=''):
     """
     Update a page
     Raise PageNotFound if page does not exist
     """
     if not article:
         self.delete(page, user)
         return
     self.t.set_tags(page, tags)
     revision = ArticleRevision(article, summary, user)
     revision.page = page
     if not page.private:
         self.update_article_index(request, page, revision, user.name)
     DBSession.add(revision)
예제 #12
0
 def list_architectures(self, with_display_name=True):
     """
     Get a Architecture list from database.
     """
     if with_display_name:
         archlist = DBSession.query(Architectures.id, 
                                 Architectures.display_name).order_by(
                                 Architectures.id).all()
         archlist = [(x[0], x[1]) for x in archlist]
     else:
         archlist = DBSession.query(Architectures.id).order_by(
                                 Architectures.id).all()
         archlist = [x[0] for x in archlist]
     return archlist
예제 #13
0
 def delete_binary(self, name, revision, bin_id):
     """
     Delete a binary
     """
     bin_id = int(bin_id)
     rev = self.show(name, revision)[1]
     binitem = None
     for revbin in rev.binary:
         if revbin.id == bin_id:
             binitem = revbin
     if binitem:
         rev.binary.remove(binitem)
         DBSession.delete(binitem)
     else:
         raise GameDepNotFound
예제 #14
0
 def delete_binary(self, name, revision, bin_id):
     """
     Delete a binary
     """
     bin_id = int(bin_id)
     rev = self.show(name, revision)[1]
     binitem = None
     for revbin in rev.binary:
         if revbin.id == bin_id:
             binitem = revbin
     if binitem:
         rev.binary.remove(binitem)
         DBSession.delete(binitem)
     else:
         raise GameDepNotFound
예제 #15
0
 def show_binary(self, binary_id):
     try:
         bin_obj = DBSession.query(GameDepBinary).filter_by(
             id=binary_id).one()
     except NoResultFound:
         raise GameDepNotFound
     return bin_obj
예제 #16
0
 def revision_dropdown(self, dep_id, with_display_name=True):
     initial_item = [("-1", "Use Latest Version")]
     if with_display_name:
         rev = DBSession.query(GameDepRevision.id, 
                                GameDepRevision.version).filter_by(
                                         page_id=dep_id, published=True)
     else:
         rev = DBSession.query(GameDepRevision.id).filter_by(
                                         page_id=dep_id, published=True)
     result = initial_item 
     result.extend(rev.all())
     if with_display_name:
         result = [(str(x[0]), str(x[1])) for x in result]
     else:
         result = [str(x[0]) for x in result]
     return result
예제 #17
0
 def delete(self, name, request):
     """
     Delete a page
     Raise GameDepNotFound if page does not exist
     """
     page = self.show(name, no_revision_error=False)[0]
     for item in page.revisions:
         rev_id = item.id
         self.delete_revision(name, rev_id, request)
     if page.thread_id != -1:
         from pyracms_forum.lib.boardlib import BoardLib
         BoardLib().delete_thread(page.thread_id)
     if page.album_id != -1:
         from pyracms_gallery.lib.gallerylib import GalleryLib
         GalleryLib().delete_album(page.album_id, request)
     DBSession.delete(page)
예제 #18
0
 def show(self, name, revision=None, no_revision_error=True):
     """
     Get article of a page or revision
     Raise GameDepNotFound if page does not exist
     """
     if revision:
         revision = int(revision)
     if not name:
         raise GameDepNotFound
     
     if not revision:
         try:
             page = DBSession.query(GameDepPage).filter_by(
                                             name=name,
                                             gamedeptype=self.gamedep_type
                                             ).one()
         except NoResultFound:
             raise GameDepNotFound("NoResultFound")
         if not page.revisions.count() and no_revision_error:
             raise GameDepNotFound("no_revision_error")
         return (page, page.revisions)
     else:
         try:
             page, rev = self.show(name)
             rev_result = rev.filter_by(id=revision).one()
             return (page, rev_result)
         except NoResultFound:
             raise GameDepNotFound
예제 #19
0
 def delete(self, name, request):
     """
     Delete a page
     Raise GameDepNotFound if page does not exist
     """
     page = self.show(name, no_revision_error=False)[0]
     for item in page.revisions:
         rev_id = item.id
         self.delete_revision(name, rev_id, request)
     if page.thread_id != -1:
         from pyracms_forum.lib.boardlib import BoardLib
         BoardLib().delete_thread(page.thread_id)
     if page.album_id != -1:
         from pyracms_gallery.lib.gallerylib import GalleryLib
         GalleryLib().delete_album(page.album_id, request)
     DBSession.delete(page)
예제 #20
0
 def switch_renderer(self, name):
     page = self.show_page(name)
     renderer_count = DBSession.query(ArticleRenderers).count()
     if page.renderer_id == renderer_count:
         page.renderer_id = 1
         return
     page.renderer_id += 1
예제 #21
0
 def revision_dropdown(self, dep_id, with_display_name=True):
     initial_item = [("-1", "Use Latest Version")]
     if with_display_name:
         rev = DBSession.query(GameDepRevision.id,
                               GameDepRevision.version).filter_by(
                                   page_id=dep_id, published=True)
     else:
         rev = DBSession.query(GameDepRevision.id).filter_by(page_id=dep_id,
                                                             published=True)
     result = initial_item
     result.extend(rev.all())
     if with_display_name:
         result = [(str(x[0]), str(x[1])) for x in result]
     else:
         result = [str(x[0]) for x in result]
     return result
예제 #22
0
 def show_binary(self, binary_id):
     try:
         bin_obj = DBSession.query(GameDepBinary).filter_by(
                                         id=binary_id).one()
     except NoResultFound:
         raise GameDepNotFound
     return bin_obj
예제 #23
0
    def show(self, name, revision=None, no_revision_error=True):
        """
        Get article of a page or revision
        Raise GameDepNotFound if page does not exist
        """
        if revision:
            revision = int(revision)
        if not name:
            raise GameDepNotFound

        if not revision:
            try:
                page = DBSession.query(GameDepPage).filter_by(
                    name=name, gamedeptype=self.gamedep_type).one()
            except NoResultFound:
                raise GameDepNotFound("NoResultFound")
            if not page.revisions.count() and no_revision_error:
                raise GameDepNotFound("no_revision_error")
            return (page, page.revisions)
        else:
            try:
                page, rev = self.show(name)
                rev_result = rev.filter_by(id=revision).one()
                return (page, rev_result)
            except NoResultFound:
                raise GameDepNotFound
예제 #24
0
def main(argv=sys.argv):
    if len(argv) != 2:
        usage(argv)
    config_uri = argv[1]
    setup_logging(config_uri)
    settings = get_appsettings(config_uri)
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    with transaction.manager:
        # Add Groups
        u = UserLib()
        u.create_group("forum_moderator",
                       "Ability to Edit " + "and Delete forum posts/threads.")
        u.create_group("forum", "Ability to Add forum posts/threads.")

        # Default ACL
        acl = RootFactory(session=DBSession)
        acl.__acl__.append((Allow, Everyone, 'forum_view'))
        acl.__acl__.append((Allow, "group:admin", 'edit_board'))
        acl.__acl__.append((Allow, "group:forum", "group:forum"))
        acl.__acl__.append((Allow, "group:forum", 'forum_reply'))
        acl.__acl__.append((Allow, "group:forum", 'forum_edit'))
        acl.__acl__.append((Allow, "group:forum", 'forum_delete'))
        acl.__acl__.append(
            (Allow, "group:forum_moderator", "group:forum_moderator"))
        acl.__acl__.append((Allow, "group:forum_moderator", 'forum_mod_edit'))
        acl.__acl__.append(
            (Allow, "group:forum_moderator", 'forum_mod_delete'))

        # Add Menu Items
        m = MenuLib()
        m.add_menu_item_route("Forum", "category_list", 10,
                              m.show_group("main_menu"), Everyone)
        group = m.show_group("admin_area")
        m.add_menu_item_route("Forum Categories", "edit_forum_category", 20,
                              group, 'edit_menu')
        m.add_menu_item_route("Edit Forums", "list_forum_category", 21, group,
                              'edit_menu')

        # Append CSS
        s = SettingsLib()
        s.update("CSS", s.show_setting("CSS") + css)
        s.create("INFO_FORUM_CATEGORY_UPDATED",
                 "The list of forum categories has been updated.")
        s.create("PYRACMS_FORUM")
        s.update("DEFAULTGROUPS", s.show_setting("DEFAULTGROUPS") + "forum\n")
예제 #25
0
 def list(self):  #@ReservedAssignment
     """
     List all the pages
     """
     pages = DBSession.query(ArticlePage)
     if not pages:
         raise PageNotFound
     return [(page.name, page.display_name or page.name) for page in pages]
예제 #26
0
 def get_post(self, postid):
     """
     Get a bulletin board post database object
     """
     try:
         return DBSession.query(BBPost).filter_by(id=postid).one()
     except NoResultFound:
         raise PostNotFound
예제 #27
0
 def delete_revision(self, name, revision, request):
     """
     Delete a revision
     Raise GameDepNotFound if page does not exist
     """
     f = FileLib(request)
     rev = self.show(name, revision)[1]
     files = set()
     if rev.file_obj:
         files.add(rev.file_obj)
         rev.file_obj = None
     for item in rev.binary:
         files.add(item.file_obj)
         item.file_obj = None
     for item in files:
         f.delete(item)
     DBSession.delete(rev)
예제 #28
0
 def get_category(self, name):
     """
     Get a forum category
     """
     try:
         return DBSession.query(BBCategory).filter_by(name=name).one()
     except NoResultFound:
         raise CategoryNotFound
예제 #29
0
 def delete_revision(self, name, revision, request):
     """
     Delete a revision
     Raise GameDepNotFound if page does not exist
     """
     f = FileLib(request)
     rev = self.show(name, revision)[1]
     files = set()
     if rev.file_obj:
         files.add(rev.file_obj)
         rev.file_obj = None
     for item in rev.binary:
         files.add(item.file_obj)
         item.file_obj = None
     for item in files:
         f.delete(item)
     DBSession.delete(rev)
예제 #30
0
 def create_binary(self, name, revision, operatingsystem, architecture, 
                   binary, mimetype, filename, request):
     """
     Add a new binary
     """
     try:
         os_obj = DBSession.query(OperatingSystems).filter_by(
                                             id=operatingsystem).one()
         arch_obj = DBSession.query(Architectures).filter_by(
                                             id=architecture).one()
     except NoResultFound:
         raise GameDepNotFound
     
     rev = self.show(name, revision)[1]
     file_lib = FileLib(request)
     aio_obj = file_lib.write(filename, binary, mimetype)
     bin_obj = GameDepBinary(aio_obj, os_obj, arch_obj)
     rev.binary.append(bin_obj)
예제 #31
0
    def create_binary(self, name, revision, operatingsystem, architecture,
                      binary, mimetype, filename, request):
        """
        Add a new binary
        """
        try:
            os_obj = DBSession.query(OperatingSystems).filter_by(
                id=operatingsystem).one()
            arch_obj = DBSession.query(Architectures).filter_by(
                id=architecture).one()
        except NoResultFound:
            raise GameDepNotFound

        rev = self.show(name, revision)[1]
        file_lib = FileLib(request)
        aio_obj = file_lib.write(filename, binary, mimetype)
        bin_obj = GameDepBinary(aio_obj, os_obj, arch_obj)
        rev.binary.append(bin_obj)
예제 #32
0
 def get_thread(self, threadid):
     """
     Returns the specified thread
     """
     try:
         thread = DBSession.query(BBThread).filter_by(id=threadid).one()
     except NoResultFound:
         raise ThreadNotFound
     return thread
예제 #33
0
 def add_thread(self,
                title,
                description,
                body,
                user,
                forum=None,
                add_post=True):
     """
     Add a thread, optionally to a forum.
     """
     thread = BBThread(title, description)
     if forum:
         thread.forum = forum
     if add_post:
         self.add_post(thread, title, body, user)
     DBSession.add(thread)
     DBSession.flush()
     return thread
예제 #34
0
 def get_forum_by_name(self, forum_name):
     """
     Returns the specified forum by name
     """
     try:
         forum = DBSession.query(BBForum).filter_by(name=forum_name).one()
     except NoResultFound:
         raise ForumNotFound
     return forum
예제 #35
0
 def get_forum(self, forumid):
     """
     Returns the specified forum
     """
     try:
         forum = DBSession.query(BBForum).filter_by(id=forumid).one()
     except NoResultFound:
         raise ForumNotFound
     return forum
예제 #36
0
 def to_json(self):
     pages = DBSession.query(ArticlePage)
     items = serialize_relation(pages)
     result = []
     for item in items:
         item['revisions'] = serialize_relation(
             self.show_page(item["name"]).revisions)
         result.append(item)
     dthandler = (lambda obj: obj.isoformat()
                  if isinstance(obj, datetime.datetime) else None)
     return json.dumps(result, default=dthandler)
예제 #37
0
    def delete_post(self, post):
        """
        Delete the specified post
        
        Returns:
            1 - Post Deleted
            2 - Thread Deleted
        """

        # If it's the first post of a thread, delete the whole thread
        thread = post.thread
        if post == thread.posts[0]:
            for posts in thread.posts:
                posts.user.postcount += -1
            DBSession.delete(thread)
            return 2
        else:
            post.user.postcount += -1
            DBSession.delete(post)
            return 1
예제 #38
0
 def create(self, name, display_name, description, tags, owner, request):
     """
     Add a new page
     Raise GameDepFound if page exists
     """
     if not self.exists(name, raise_if_found=True):
         page = GameDepPage(self.gamedep_type, name, display_name, owner)
         page.description = description
         self.t.set_tags(page, tags)
         s = SettingsLib()
         if s.has_setting("PYRACMS_FORUM"):
             from pyracms_forum.lib.boardlib import BoardLib
             page.thread_id = BoardLib().add_thread(name, display_name, "",
                                                    owner, add_post=False).id
         if s.has_setting("PYRACMS_GALLERY"):
             from pyracms_gallery.lib.gallerylib import GalleryLib
             g = GalleryLib()
             album = g.create_album(name, display_name, owner)
             page.album_id = album
         DBSession.add(page)
예제 #39
0
 def show_page(self, name):
     """
     Get page objects.
     Raise PageNotFound if page does not exist.
     """
     try:
         page = DBSession.query(ArticlePage).filter(
             ArticlePage.name.like(name)).one()
     except NoResultFound:
         raise PageNotFound
     return page
예제 #40
0
 def list(self): #@ReservedAssignment
     """
     List all the pages
     """
     result = set()
     gamedeps = DBSession.query(GameDepPage).filter_by(
                             gamedeptype=self.gamedep_type)
     if not gamedeps:
         raise GameDepNotFound
     for gamedep in gamedeps:
         result.add(gamedep.name)
     return result
예제 #41
0
 def list(self):  #@ReservedAssignment
     """
     List all the pages
     """
     result = set()
     gamedeps = DBSession.query(GameDepPage).filter_by(
         gamedeptype=self.gamedep_type)
     if not gamedeps:
         raise GameDepNotFound
     for gamedep in gamedeps:
         result.add(gamedep.name)
     return result
예제 #42
0
 def create(self, name, display_name, description, tags, owner, request):
     """
     Add a new page
     Raise GameDepFound if page exists
     """
     if not self.exists(name, raise_if_found=True):
         page = GameDepPage(self.gamedep_type, name, display_name, owner)
         page.description = description
         self.t.set_tags(page, tags)
         s = SettingsLib()
         if s.has_setting("PYRACMS_FORUM"):
             from pyracms_forum.lib.boardlib import BoardLib
             page.thread_id = BoardLib().add_thread(name,
                                                    display_name,
                                                    "",
                                                    owner,
                                                    add_post=False).id
         if s.has_setting("PYRACMS_GALLERY"):
             from pyracms_gallery.lib.gallerylib import GalleryLib
             g = GalleryLib()
             album = g.create_album(name, display_name, owner)
             page.album_id = album
         DBSession.add(page)
예제 #43
0
 def dependency_dropdown(self, with_display_name=True):
     result = []
     page = DBSession.query(GameDepPage).filter_by(gamedeptype="dep")
     for x in page:
         if x.revisions.count():
             i = 0
             for revision in x.revisions:
                 if revision.published:
                     i += 1
             if i > 0:
                 if with_display_name:
                     result.append(
                         (str(x.id), "%s (%s)" % (x.display_name, x.name)))
                 else:
                     result.append(str(x.id))
     return result
예제 #44
0
 def dependency_dropdown(self, with_display_name=True):
     result = []
     page = DBSession.query(GameDepPage).filter_by(gamedeptype="dep")
     for x in page:
         if x.revisions.count():
             i = 0
             for revision in x.revisions:
                 if revision.published:
                     i += 1
             if i > 0:
                 if with_display_name:
                     result.append((str(x.id), 
                                    "%s (%s)" % (x.display_name, 
                                                 x.name)))
                 else:
                     result.append(str(x.id))
     return result
예제 #45
0
    def exists(self, name, version=None, raise_if_found=False):
        """
        Check to see if a page exists
        Return True/False
        """
        try:
            page = DBSession.query(GameDepPage).filter_by(
                name=name, gamedeptype=self.gamedep_type).one()
        except NoResultFound:
            return False

        if version:
            versions = [x.version for x in page.revisions]
            if not version in versions:
                return False
        if raise_if_found:
            raise GameDepFound
        return True
예제 #46
0
 def exists(self, name, version=None, raise_if_found=False):
     """
     Check to see if a page exists
     Return True/False
     """
     try:
         page = DBSession.query(GameDepPage).filter_by(
                                         name=name,
                                         gamedeptype=self.gamedep_type
                                         ).one()
     except NoResultFound:
         return False
     
     if version:
         versions = [x.version for x in page.revisions]
         if not version in versions:
             return False
     if raise_if_found:
         raise GameDepFound
     return True
예제 #47
0
 def show_json(self):
     """
     Serialise gamedep into json
     """
     root = {"operatingsystems": [], 
             "architectures": [],
             "gamedep": []}
     key = None
     gametype = "game"
     deptype = "dep"
     game = DBSession.query(GameDepPage).filter_by(gamedeptype=gametype
                                                   ).all()
     dep = DBSession.query(GameDepPage).filter_by(gamedeptype=deptype).all()
     oslist = DBSession.query(OperatingSystems)
     archlist = DBSession.query(Architectures)
     for os in oslist:
         osdict = {}
         osdict["name"] = os.name
         osdict["display_name"] = os.display_name
         root["operatingsystems"].append(osdict)
     for arch in archlist:
         archdict = {}
         archdict["name"] = arch.name
         archdict["display_name"] = arch.display_name
         root["architectures"].append(archdict)
     for gamedep in [game, dep]:
         if gamedep == game:
             key = "game"
         else:
             key = "dependency"
         for item in gamedep:
             if item.revisions.count() == 0:
                 continue
             gamedepdict = {}
             gamedepdict["name"] = item.name
             gamedepdict["display_name"] = item.display_name
             gamedepdict["description"] = item.description
             gamedepdict["created"] = str(item.created)
             gamedepdict["dependencies"] = []
             for loopdep in item.dependencies:
                 depdict = {}
                 if loopdep.page.revisions.count() == 0:
                     continue
                 depdict['dependency'] = loopdep.page.name
                 if loopdep:
                     depdict['version'] = str(loopdep.version)
                 else:
                     depdict['version'] = str(loopdep.page.\
                                              revisions[0].version)
                 gamedepdict["dependencies"].append(depdict)
             gamedepdict["tags"] = []
             for looptag in item.tags:
                 if looptag.name.strip():
                     gamedepdict["tags"].append(looptag.name)
             gamedepdict["pictures"] = []
             if self.gallery:
                 album = self.gallery.show_album(item.album_id)
                 for pic in album.pictures:
                     picture = {}
                     picture['url'] = (self.uploadurl + pic.file_obj.uuid +
                                       "/" + pic.file_obj.name)
                     thumb_name = (splitext(pic.file_obj.name)[0] +
                                   ".thumbnail.png")
                     picture['thumb_url'] = (self.uploadurl +
                                             pic.file_obj.uuid +
                                             "/" + thumb_name)
                     picture['thumb_name'] = thumb_name
                     picture['default'] = False
                     picture['display_name'] = pic.display_name
                     picture['description'] = pic.description
                     picture['uuid'] = pic.file_obj.uuid
                     picture['name'] = pic.file_obj.name
                     if album.default_picture == pic:
                         picture['default'] = True
                     gamedepdict["pictures"].append(picture)
             gamedepdict["revisions"] = []
             for looprev in item.revisions:
                 if looprev.published:
                     revdict = {}
                     revdict["version"] = str(looprev.version)
                     revdict["created"] = str(looprev.created)
                     revdict["moduletype"] = looprev.moduletype
                     if gamedep == game:
                         revdict["source"]=  self.uploadurl + \
                                             looprev.file_obj.uuid \
                                             + "/" + looprev.file_obj.name
                         revdict['source_uuid'] = looprev.file_obj.uuid
                         revdict['source_name'] = looprev.file_obj.name
                     revdict["binaries"] = []
                     for loopbin in looprev.binary:
                         bindict = {}
                         bindict["binary"] = self.uploadurl + \
                                             loopbin.file_obj.uuid \
                                             + "/" + loopbin.file_obj.name
                         bindict["operating_system"] = \
                                         loopbin.operatingsystem_obj.name
                         bindict["architecture"] = \
                                         loopbin.architecture_obj.name
                         bindict['uuid'] = loopbin.file_obj.uuid
                         bindict['name'] = loopbin.file_obj.name
                         revdict["binaries"].append(bindict)
                     gamedepdict["revisions"].append(revdict)
             root["gamedep"].append({key: gamedepdict})
     return json.dumps(root, sort_keys=True, indent=4)
예제 #48
0
 def render_comment(self, context, request, *args):
     comment = self.get_comment(*args)
     DBSession.flush()
     return render('board/view_thread_content.jinja2',
                   get_thread(context, request, comment.thread.id), request)
예제 #49
0
def main(argv=sys.argv):
    if len(argv) != 2:
        usage(argv)
    config_uri = argv[1]
    setup_logging(config_uri)
    settings = get_appsettings(config_uri)
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    with transaction.manager:
        # Add Operating Systems
        DBSession.add(OperatingSystems("pi", "Platform Independent"))
        DBSession.add(OperatingSystems("win", "Windows"))
        DBSession.add(OperatingSystems("mac", "Mac OS X"))
        DBSession.add(OperatingSystems("lin", "Linux"))
        DBSession.add(OperatingSystems("sol", "Solaris"))
        DBSession.add(OperatingSystems("fbsd", "FreeBSD"))
        DBSession.add(OperatingSystems("nbsd", "NetBSD"))
        DBSession.add(OperatingSystems("obsd", "OpenBSD"))
        
        # Add Architectures
        DBSession.add(Architectures("pi", "Platform Independent"))
        DBSession.add(Architectures("i386", "32bit X86"))
        DBSession.add(Architectures("x86_64", "64bit X86"))
        DBSession.add(Architectures("arm", "ARM Little Endian"))
        DBSession.add(Architectures("armeb", "ARM Big Endian"))
        DBSession.add(Architectures("ppc", "32bit PowerPC"))
        DBSession.add(Architectures("ppc64", "64bit PowerPC"))
        DBSession.add(Architectures("sparc", "32bit SPARC"))
        DBSession.add(Architectures("sparc64", "64bit SPARC"))
    
        # Default Groups
        u = UserLib()
        u.create_group("gamedep", "Ability to Add, Edit and Delete" +
                       " games and dependencies.")
        
        # Default ACL
        acl = RootFactory()
        acl.__acl__.append((Allow, Everyone, 'gamedep_view'))
        acl.__acl__.append((Allow, Everyone, 'gamedep_list'))
        acl.__acl__.append((Allow, "group:admin", 'gamedep_mod'))
        acl.__acl__.append((Allow, "group:gamedep", "group:gamedep"))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_view'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_list'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_publish'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_edit'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_delete'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_add_picture'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_delete_picture'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_add_source'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_add_binary'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_edit_binary'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_delete_binary'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_add_dependency'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_delete_dependency'))
        acl.__acl__.append((Allow, "group:gamedep", 'gamedep_edit_revision'))
        
        s = SettingsLib()
        s.update("DEFAULTGROUPS", s.show_setting("DEFAULTGROUPS") + 
                 "gamedep\n")
        s.create("INFO_PIC_ADDED", "Your picture (%s) has been added.")
        s.create("INFO_PIC_DELETED", "Your picture (%s) has been deleted.")
        s.create("INFO_BINARY_ADDED", "Your binary (%s) has been added.")
        s.create("INFO_BINARY_UPDATED", "Your binary (%s) has been updated.")
        s.create("INFO_BINARY_DELETED", "Your binary (%s) has been deleted.")
        s.create("INFO_SOURCE_UPLOADED", "The source code (%s) has been "
                                         "successfully uploaded.")
        s.create("INFO_DEPENDENCY_ADDED",
                 "Your dependency (%s) has been added.")
        s.create("INFO_DEPENDENCY_DELETED",
                 "Your dependency (%s) has been deleted.")
        s.create("INFO_REVISION_UPDATED", "A new version (%s) has been "
                                          "updated for %s.")
        s.create("INFO_REVISION_CREATED", "A new version (%s) has been "
                                          "created for %s.")
        s.create("ERROR_INVALID_BINARY_ID",
                 "Invalid Binary ID and/or Edit Type.")
        s.create("ERROR_NOT_UPLOADED_BINARY",
                 "You have not uploaded any binaries.")
        s.create("ERROR_NOT_UPLOADED_SOURCE_CODE",
                 "You have not uploaded any source code.")
        s.create("HYPERNUCLEUS_SERVER")

        m = MenuLib()
        group = m.show_group("main_menu")
        m.add_menu_item_route("Games", "gamedeplist", 3, group, Everyone,
                              {"type": GAME})
        m.add_menu_item_route("Dependencies", "gamedeplist", 4,
                              group, Everyone, {"type": DEP})