FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Debian > Debian User

 
 
LinkBack Thread Tools
 
Old 09-30-2010, 02:26 PM
Radek Vykydal
 
Default Add new class to hold specifications of repositories.

The class is called RepoSpec. It should be backend independent, so perhaps it
will be moved to backend.py or even (new) repos.py. It will be used instead of
working directly (e.g. in UI steps) with extended YumRepository objects
(AnacondaYumRepository) making going back in UI possible without hacks (by
using new YumBackend object).

Compared to YumRepository, it can hold anconda specific urls (nfs, cdrom,
nfsiso), repository type (method, kickstart, UI, driver disk, addon),
and info about setup status and cause of fail.
---
pyanaconda/__init__.py | 1 +
pyanaconda/yuminstall.py | 207 +++++++++++++++++++++++++++++++++++-----------
2 files changed, 158 insertions(+), 50 deletions(-)

diff --git a/pyanaconda/__init__.py b/pyanaconda/__init__.py
index 5c07edc..9d94519 100644
--- a/pyanaconda/__init__.py
+++ b/pyanaconda/__init__.py
@@ -86,6 +86,7 @@ class Anaconda(object):
self.upgradeSwapInfo = None
self._users = None
self.mehConfig = None
+ self.repos = []

# *sigh* we still need to be able to write this out
self.xdriver = None
diff --git a/pyanaconda/yuminstall.py b/pyanaconda/yuminstall.py
index 11f014a..a7e5385 100644
--- a/pyanaconda/yuminstall.py
+++ b/pyanaconda/yuminstall.py
@@ -91,6 +91,159 @@ def size_string (size):

return to_unicode(retval)

+
+# TODORV: move into a module?
+class RepoSpec(object):
+
+ def __init__(self):
+ self.url = ""
+ self.mirrorlist = False
+ self.name = ""
+ self.cost = None
+ self.excludepkgs = []
+ self.includepkgs = []
+ self.proxy = ""
+ self.proxy_username = ""
+ self.proxy_password = ""
+ self.ignoregroups = None
+ self.sslverify = True
+ self.baseurl = ""
+ self.mediaid = None
+ self.media_device = None
+
+ self.enabled = False
+
+ self.setup = "?"
+ self.setup_fail_comment = ""
+
+ self.addon_repos = None
+
+ # this should ideally go away, maybe use inheritance
+ self.type = ""
+
+ @property
+ def id(self):
+ id = "%s-%s" % (self.type, self.name.replace(" ", ""))
+ if self.type == "method":
+ id += "-%s" % productStamp
+ return id
+
+
+ # TODORV: remove from AnacondaYumRepo?
+ def needsNetwork(self):
+ return (self.url.startswith("http") or
+ self.url.startswith("ftp:") or
+ self.url.startswith("nfs:") or
+ self.url.startswith("nfsiso:"))
+
+ def isIsoRepo(self):
+ return (self.url.startswith("cdrom:") or
+ self.url.startswith("hd:") or
+ self.url.startswith("nfsiso:"))
+
+ def setProxy(self, obj):
+ """
+ Set the proxy settings from a string in obj.proxy
+ If the string includes un/pw use those, otherwise set the un/pw from
+ obj.proxyUsername and obj.proxyPassword
+ """
+ # This is the same pattern as from loader/urls.c:splitProxyParam
+ # except that the POSIX classes have been replaced with character
+ # ranges
+ # NOTE: If this changes, update tests/regex/proxy.py
+ #
+ # proxy=[protocol://][username[assword]@]host[ort][path]
+ pattern = re.compile("([A-Za-z]+://)?(([A-Za-z0-9]+)(:[^:@]+)?@)?([^:/]+)(:[0-9]+)?(/.*)?")
+
+ m = pattern.match(obj.proxy)
+
+ if m and m.group(5):
+ # If both a host and port was found, just paste them
+ # together using the colon at the beginning of the port
+ # match as a separator. Otherwise, just use the host.
+ if m.group(6):
+ proxy = m.group(5) + m.group(6)
+ else:
+ proxy = m.group(5)
+
+ # yum also requires a protocol. If none was given,
+ # default to http.
+ if m.group(1):
+ proxy = m.group(1) + proxy
+ else:
+ proxy = "http://" + proxy
+
+ # Set the repo proxy. NOTE: yum immediately parses this and
+ # raises an error if it isn't correct
+ self.proxy = proxy
+
+ if m and m.group(3):
+ self.proxy_username = m.group(3)
+ elif getattr(obj, "proxyUsername", None):
+ self.proxy_username = obj.proxyUsername
+
+ if m and m.group(4):
+ # Skip the leading colon.
+ self.proxy_password = m.group(4)[1:]
+ elif getattr(obj, "proxyPassword", None):
+ self.proxy_password = obj.proxyPassword
+
+class YumRepoSpec(RepoSpec):
+ def __init__(self, yumrepo=None):
+ RepoSpec.__init__(self)
+ self.yumrepo = yumrepo
+ if yumrepo:
+ self.initFromYumRepo(yumrepo)
+
+ def initYumRepo(self, yumrepo):
+ if self.mirrorlist:
+ yumrepo.mirrorlist = self.url
+ else:
+ yumrepo.baseurl = self.baseurl
+ yumrepo.name = self.name
+ if self.cost is not None:
+ yumrepo.cost = self.cost
+ if self.excludepkgs:
+ yumrepo.exclude = self.excludepkgs
+ if self.includepkgs:
+ yumrepo.includepkgs = self.includepkgs
+ if self.sslverify is not None:
+ yumrepo.sslverify = self.sslverify
+ if self.mediaid is not None:
+ yumrepo.mediaid = self.mediaid
+ if self.proxy:
+ yumrepo.proxy = self.proxy
+ if self.proxy_username:
+ yumrepo.proxy_username = self.proxy_username
+ if self.proxy_password:
+ yumrepo.proxy_password = self.proxy_password
+
+
+ def initFromYumRepo(self, yumrepo):
+ if self.baseurl:
+ self.url = yumrepo.baseurl[0]
+ else:
+ self.url = yumrepo.mirrorlist
+ self.mirrorlist = True
+ self.name = yumrepo.name
+ self.cost = yumrepo.cost
+ self.excludepkgs = yumrepo.exclude
+ self.includepkgs = yumrepo.includepkgs
+ self.proxy = yumrepo.proxy
+ self.proxy_username = yumrepo.proxy_username
+ self.proxy_password = yumrepo.proxy_password
+ self.sslverify = yumrepo.sslverify
+ self.enabled = yumrepo.enabled
+ self.mediaid = yumrepo.mediaid
+
+def isValidRepoURL(url):
+ return (url.startswith("hd:") or
+ url.startswith("nfsiso:") or
+ url.startswith("http:") or
+ url.startswith("ftp:") or
+ url.startswith("cdrom:") or
+ url.startswith("nfs:"))
+
class AnacondaCallback:

def __init__(self, ayum, anaconda, instLog, modeText):
@@ -300,53 +453,6 @@ class AnacondaYumRepo(YumRepository):
anacondaBaseURLs = property(_getAnacondaBaseURLs, _setAnacondaBaseURLs,
doc="Extends AnacondaYum.baseurl to store non-yum urls:")

- def setProxy(self, obj):
- """
- Set the proxy settings from a string in obj.proxy
- If the string includes un/pw use those, otherwise set the un/pw from
- obj.proxyUsername and obj.proxyPassword
- """
- # This is the same pattern as from loader/urls.c:splitProxyParam
- # except that the POSIX classes have been replaced with character
- # ranges
- # NOTE: If this changes, update tests/regex/proxy.py
- #
- # proxy=[protocol://][username[assword]@]host[ort][path]
- pattern = re.compile("([A-Za-z]+://)?(([A-Za-z0-9]+)(:[^:@]+)?@)?([^:/]+)(:[0-9]+)?(/.*)?")
-
- m = pattern.match(obj.proxy)
-
- if m and m.group(5):
- # If both a host and port was found, just paste them
- # together using the colon at the beginning of the port
- # match as a separator. Otherwise, just use the host.
- if m.group(6):
- proxy = m.group(5) + m.group(6)
- else:
- proxy = m.group(5)
-
- # yum also requires a protocol. If none was given,
- # default to http.
- if m.group(1):
- proxy = m.group(1) + proxy
- else:
- proxy = "http://" + proxy
-
- # Set the repo proxy. NOTE: yum immediately parses this and
- # raises an error if it isn't correct
- self.proxy = proxy
-
- if m and m.group(3):
- self.proxy_username = m.group(3)
- elif getattr(obj, "proxyUsername", None):
- self.proxy_username = obj.proxyUsername
-
- if m and m.group(4):
- # Skip the leading colon.
- self.proxy_password = m.group(4)[1:]
- elif getattr(obj, "proxyPassword", None):
- self.proxy_password = obj.proxyPassword
-

class YumSorter(yum.YumBase):
def _transactionDataFactory(self):
@@ -1895,9 +2001,10 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
rc = True
return rc

- def writeKS(self, f):
- for repo in self.ayum.repos.listEnabled():
- if repo.name == "Installation Repo":
+ def writeKS(self, f, repos):
+ for repo in repos:
+ if (repo.type not in ["kickstart", "UI"] or
+ not repo.enabled):
continue

line = "repo --name="%s" " % (repo.name or repo.repoid)
--
1.7.2

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 08:21 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org