Browse Source

Added dedupestore "console script"

Jonas Borgström 14 years ago
parent
commit
4bbd093a56
3 changed files with 60 additions and 4 deletions
  1. 1 0
      .gitignore
  2. 51 0
      dedupestore/helpers.py
  3. 8 4
      setup.py

+ 1 - 0
.gitignore

@@ -1,4 +1,5 @@
 build
+*.egg-info
 *.pyc
 *.pyo
 

+ 51 - 0
dedupestore/helpers.py

@@ -0,0 +1,51 @@
+import argparse
+import re
+
+
+class Location(object):
+
+    loc_re = re.compile(r'^((?:(?P<user>[^@]+)@)?(?P<host>[^:]+):)?'
+                        r'(?P<path>[^:]*)(?:::(?P<archive>[^:]+))?$')
+
+    def __init__(self, text):
+        loc = self.loc_re.match(text)
+        loc = loc and loc.groupdict()
+        if not loc:
+            raise ValueError
+        self.user = loc['user']
+        self.host = loc['host']
+        self.path = loc['path']
+        if not self.host and not self.path:
+            raise ValueError
+        self.archive = loc['archive']
+
+    def __str__(self):
+        text = ''
+        if self.user:
+            text += '%s@' % self.user
+        if self.host:
+            text += '%s::' % self.host
+        if self.path:
+            text += self.path
+        if self.archive:
+            text += ':%s' % self.archive
+        return text
+
+    def __repr__(self):
+        return "Location('%s')" % self
+
+
+def location_validator(archive=None):
+    def validator(text):
+        try:
+            loc = Location(text)
+        except ValueError:
+            raise argparse.ArgumentTypeError('Invalid location format: "%s"' % text)
+        if archive is True and not loc.archive:
+            raise argparse.ArgumentTypeError('"%s": No archive specified' % text)
+        elif archive is False and loc.archive:
+            raise argparse.ArgumentTypeError('"%s" No archive can be specified' % text)
+        return loc
+    return validator
+
+

+ 8 - 4
setup.py

@@ -1,13 +1,17 @@
 # -*- encoding: utf-8 *-*
 #!/usr/bin/env python
 
-from distutils.core import setup, Extension
+from setuptools import setup, Extension
 
 setup(name='Dedupestore',
-      version='1.0',
-      author='Jonas Borgström',
+      version='0.1',
+      author=u'Jonas Borgström',
       author_email='jonas@borgstrom.se',
       packages=['dedupestore'],
       ext_modules=[Extension('_speedups', ['dedupestore/_speedups.c'])],
-     )
+      entry_points = {
+        'console_scripts': [
+            'dedupestore = dedupestore.archiver:main',
+        ]
+    })