[game-data-packager] 06/51: FileGroup: Optionally include contents in to_data()

Simon McVittie smcv at debian.org
Fri Dec 29 01:23:34 UTC 2017


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch master
in repository game-data-packager.

commit ecbaf3fec6410997dd8142e9ffded932720a2a37
Author: Simon McVittie <smcv at debian.org>
Date:   Tue Dec 26 16:54:44 2017 +0000

    FileGroup: Optionally include contents in to_data()
    
    Signed-off-by: Simon McVittie <smcv at debian.org>
---
 game_data_packager/__init__.py |  5 +++--
 game_data_packager/data.py     | 36 +++++++++++++++++++++++++++++++++++-
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 59e6ca2..feae963 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -365,10 +365,11 @@ class GameData(object):
             files[filename] = f.to_data(expand=expand)
 
         for name, g in self.groups.items():
-            groups[name] = g.to_data(expand=expand)
+            groups[name] = g.to_data(expand=expand, files=self.files)
 
         for name, package in self.packages.items():
-            packages[name] = package.to_data(expand=expand)
+            packages[name] = package.to_data(
+                expand=expand, files=self.files, groups=self.groups)
 
         if files:
             ret['files'] = files
diff --git a/game_data_packager/data.py b/game_data_packager/data.py
index 33e31b2..3128594 100644
--- a/game_data_packager/data.py
+++ b/game_data_packager/data.py
@@ -18,6 +18,7 @@
 
 import hashlib
 import io
+import yaml
 
 from .version import (GAME_PACKAGE_VERSION)
 
@@ -387,6 +388,14 @@ class PackageRelation:
     def __repr__(self):
         return 'PackageRelation(' + repr(self.to_data()) + ')'
 
+class YamlLiteral(str):
+    @classmethod
+    def to_yaml(cls, dumper, data):
+        return dumper.represent_scalar(
+            'tag:yaml.org,2002:str', data, style='|')
+
+yaml.add_representer(YamlLiteral, YamlLiteral.to_yaml)
+
 class FileGroup:
     __APPLY_TO_ALL = (
         'doc', 'executable', 'install_to', 'license', 'unsuitable',
@@ -410,7 +419,7 @@ class FileGroup:
             if value is not None:
                 setattr(other, attr, value)
 
-    def to_data(self, expand=True):
+    def to_data(self, expand=True, files=None):
         ret = {}
 
         for attr in self.__APPLY_TO_ALL:
@@ -419,6 +428,31 @@ class FileGroup:
             if value is not None:
                 ret[attr] = value
 
+        if self.group_members:
+            if files is None:
+                ret['group_members'] = sorted(self.group_members)
+            else:
+                group_members = []
+
+                for name in sorted(self.group_members):
+                    if name in files:
+                        f = files[name]
+                        size = f.size
+                        md5 = f.md5
+                    else:
+                        size = '_'
+                        md5 = '_'
+
+                    if size is None:
+                        size = '_'
+
+                    if md5 is None:
+                        md5 = '_'
+
+                    group_members.append('%-9s %s %s\n' % (size, md5, name))
+
+                ret['group_members'] = YamlLiteral(''.join(group_members))
+
         return ret
 
 class Package(object):

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list