tor-commits
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 215536 discussions
13 Nov '11
commit f9aeefb2805e2ef9cd63f236c7a27308718575e9
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sun Nov 13 14:01:55 2011 -0800
Rearranging conf util to improve usability
Adding the standard configuration header (... sooo helpful) and moving the rest
of the util's contents around to be more intuitive.
---
stem/util/conf.py | 398 +++++++++++++++++++++++++++--------------------------
1 files changed, 205 insertions(+), 193 deletions(-)
diff --git a/stem/util/conf.py b/stem/util/conf.py
index 7581a98..7ba2f11 100644
--- a/stem/util/conf.py
+++ b/stem/util/conf.py
@@ -3,73 +3,26 @@ This provides handlers for specially formatted configuration files. Entries are
expected to consist of simple key/value pairs, and anything after "#" is
stripped as a comment. Excess whitespace is trimmed and empty lines are
ignored. For instance:
-# This is my sample config
-user.name Galen
-user.password yabba1234 # here's an inline comment
-user.notes takes a fancy to pepperjack chese
-blankEntry.example
+ # This is my sample config
+ user.name Galen
+ user.password yabba1234 # here's an inline comment
+ user.notes takes a fancy to pepperjack chese
+ blankEntry.example
-would be loaded as four entries (the last one's value being an empty string).
-If a key's defined multiple times then the last instance of it is used.
+would be loaded as four entries, the last one's value being an empty string.
-Example usage:
- User has a file at '/home/atagar/myConfig' with...
- destination.ip 1.2.3.4
- destination.port blarg
-
- startup.run export PATH=$PATH:~/bin
- startup.run alias l=ls
-
- And they have a script with...
- import stem.util.conf
-
- # Configuration values we'll use in this file. These are mappings of
- # configuration keys to the default values we'll use if the user doesn't
- # have something different in their config file (or it doesn't match this
- # type).
-
- ssh_config = {"login.user": "atagar",
- "login.password": "pepperjack_is_awesome!",
- "destination.ip": "127.0.0.1",
- "destination.port": 22,
- "startup.run": []}
-
- # Makes an empty config instance with the handle of 'ssh_login'. This is a
- # singleton so other classes can fetch this same configuration from this
- # handle.
-
- user_config = stem.util.conf.get_config("ssh_login")
-
- # Loads the user's configuration file, warning if this fails.
-
- try:
- user_config.load("/home/atagar/myConfig")
- except IOError, exc:
- print "Unable to load the user's config: %s" % exc
-
- # Replaces the contents of ssh_config with the values from the user's
- # config file if...
- # - the key is present in the config file
- # - we're able to convert the configuration file's value to the same type
- # as what's in the mapping (see the Config.get() method for how these
- # type inferences work)
- #
- # For instance in this case the login values are left alone (because they
- # aren't in the user's config file), and the 'destination.port' is also
- # left with the value of 22 because we can't turn "blarg" into an integer.
- #
- # The other values are replaced, so ssh_config now becomes...
- # {"login.user": "atagar",
- # "login.password": "pepperjack_is_awesome!",
- # "destination.ip": "1.2.3.4",
- # "destination.port": 22,
- # "startup.run": ["export PATH=$PATH:~/bin", "alias l=ls"]}
- #
- # Information for what values fail to load and why are reported to
- # 'stem.util.log'.
-
- user_config.update(ssh_config)
+get_config - Singleton for getting configurations
+Config - Custom configuration.
+ |- load - reads a configuration file
+ |- clear - empties our loaded configuration contents
+ |- update - replaces mappings in a dictionary with the config's values
+ |- keys - provides keys in the loaded configuration
+ |- unused_keys - provides keys that have never been requested
+ |- get - provides the value for a given key, with type inference
+ |- get_value - provides the value for a given key as a string
+ |- get_str_csv - gets a value as a comma separated list of strings
+ +- get_int_csv - gets a value as a comma separated list of integers
"""
import logging
@@ -107,6 +60,65 @@ class Config():
"""
Handler for easily working with custom configurations, providing persistence
to and from files. All operations are thread safe.
+
+ Example usage:
+ User has a file at '/home/atagar/myConfig' with...
+ destination.ip 1.2.3.4
+ destination.port blarg
+
+ startup.run export PATH=$PATH:~/bin
+ startup.run alias l=ls
+
+ And they have a script with...
+ import stem.util.conf
+
+ # Configuration values we'll use in this file. These are mappings of
+ # configuration keys to the default values we'll use if the user doesn't
+ # have something different in their config file (or it doesn't match this
+ # type).
+
+ ssh_config = {"login.user": "atagar",
+ "login.password": "pepperjack_is_awesome!",
+ "destination.ip": "127.0.0.1",
+ "destination.port": 22,
+ "startup.run": []}
+
+ # Makes an empty config instance with the handle of 'ssh_login'. This is
+ # a singleton so other classes can fetch this same configuration from
+ # this handle.
+
+ user_config = stem.util.conf.get_config("ssh_login")
+
+ # Loads the user's configuration file, warning if this fails.
+
+ try:
+ user_config.load("/home/atagar/myConfig")
+ except IOError, exc:
+ print "Unable to load the user's config: %s" % exc
+
+ # Replaces the contents of ssh_config with the values from the user's
+ # config file if...
+ # - the key is present in the config file
+ # - we're able to convert the configuration file's value to the same type
+ # as what's in the mapping (see the Config.get() method for how these
+ # type inferences work)
+ #
+ # For instance in this case the login values are left alone (because they
+ # aren't in the user's config file), and the 'destination.port' is also
+ # left with the value of 22 because we can't turn "blarg" into an
+ # integer.
+ #
+ # The other values are replaced, so ssh_config now becomes...
+ # {"login.user": "atagar",
+ # "login.password": "pepperjack_is_awesome!",
+ # "destination.ip": "1.2.3.4",
+ # "destination.port": 22,
+ # "startup.run": ["export PATH=$PATH:~/bin", "alias l=ls"]}
+ #
+ # Information for what values fail to load and why are reported to
+ # 'stem.util.log'.
+
+ user_config.update(ssh_config)
"""
def __init__(self):
@@ -124,35 +136,116 @@ class Config():
# keys that have been requested (used to provide unused config contents)
self._requested_keys = set()
- def get_value(self, key, default = None, multiple = False):
+ def load(self, path):
"""
- This provides the currently value associated with a given key.
+ Reads in the contents of the given path, adding its configuration values
+ to our current contents.
Arguments:
- key (str) - config setting to be fetched
- default (object) - value provided if no such key exists
- multiple (bool) - provides back a list of all values if true, otherwise
- this returns the last loaded configuration value
+ path (str) - file path to be loaded
- Returns:
- string or list of string configuration values associated with the given
- key, providing the default if no such key exists
+ Raises:
+ IOError if we fail to read the file (it doesn't exist, insufficient
+ permissions, etc)
"""
+ config_file = open(path, "r")
+ read_contents = config_file.readlines()
+ config_file.close()
+
self._contents_lock.acquire()
+ self._raw_contents = read_contents
- if key in self._contents:
- val = self._contents[key]
- if not multiple: val = val[-1]
- self._requested_keys.add(key)
- else:
- msg = "config entry '%s' not found, defaulting to '%s'" % (key, default)
- LOGGER.debug(msg)
- val = default
+ for line in self._raw_contents:
+ # strips any commenting or excess whitespace
+ comment_start = line.find("#")
+ if comment_start != -1: line = line[:comment_start]
+ line = line.strip()
+
+ # parse the key/value pair
+ if line:
+ if " " in line:
+ key, value = line.split(" ", 1)
+ value = value.strip()
+ else:
+ key, value = line, ""
+
+ if key in self._contents: self._contents[key].append(value)
+ else: self._contents[key] = [value]
+ self._path = path
self._contents_lock.release()
+
+ def clear(self):
+ """
+ Drops the configuration contents and reverts back to a blank, unloaded
+ state.
+ """
- return val
+ self._contents_lock.acquire()
+ self._path = None
+ self._contents.clear()
+ self._raw_contents = []
+ self._requested_keys = set()
+ self._contents_lock.release()
+
+ def update(self, conf_mappings, limits = None):
+ """
+ This takes a dictionary of 'config_key => default_value' mappings and
+ changes the values to reflect our current configuration. This will leave
+ the previous values alone if...
+
+ a. we don't have a value for that config_key
+ b. we can't convert our value to be the same type as the default_value
+
+ For more information about how we convert types see our get() method.
+
+ Arguments:
+ conf_mappings (dict) - configuration key/value mappings to be revised
+ limits (dict) - mappings of limits on numeric values, expected to
+ be of the form "configKey -> min" or "configKey ->
+ (min, max)"
+ """
+
+ if limits == None: limits = {}
+
+ for entry in conf_mappings.keys():
+ val = self.get(entry, conf_mappings[entry])
+
+ # if this was a numeric value then apply constraints
+ if entry in limits and (isinstance(val, int) or isinstance(val, float)):
+ if isinstance(limits[entry], tuple):
+ val = max(val, limits[entry][0])
+ val = min(val, limits[entry][1])
+ else: val = max(val, limits[entry])
+
+ # only use this value if it wouldn't change the type of the mapping (this
+ # will only fail if the type isn't either a string or one of the types
+ # recognized by the get method)
+
+ if type(val) == type(conf_mappings[entry]):
+ conf_mappings[entry] = val
+
+ def keys(self):
+ """
+ Provides all keys in the currently loaded configuration.
+
+ Returns:
+ list if strings for the configuration keys we've loaded
+ """
+
+ return self._contents.keys()
+
+ def unused_keys(self):
+ """
+ Provides the configuration keys that have never been provided to a caller
+ via the get, get_value, or update methods.
+
+ Returns:
+ set of configuration keys we've loaded but have never been requested
+ """
+
+ return set(self.get_keys()).difference(self._requested_keys)
def get(self, key, default = None):
"""
@@ -242,6 +335,36 @@ class Config():
return val
+ def get_value(self, key, default = None, multiple = False):
+ """
+ This provides the currently value associated with a given key.
+
+ Arguments:
+ key (str) - config setting to be fetched
+ default (object) - value provided if no such key exists
+ multiple (bool) - provides back a list of all values if true, otherwise
+ this returns the last loaded configuration value
+
+ Returns:
+ string or list of string configuration values associated with the given
+ key, providing the default if no such key exists
+ """
+
+ self._contents_lock.acquire()
+
+ if key in self._contents:
+ val = self._contents[key]
+ if not multiple: val = val[-1]
+ self._requested_keys.add(key)
+ else:
+ msg = "config entry '%s' not found, defaulting to '%s'" % (key, default)
+ LOGGER.debug(msg)
+ val = default
+
+ self._contents_lock.release()
+
+ return val
+
def get_str_csv(self, key, default = None, count = None):
"""
Fetches the given key as a comma separated value.
@@ -319,115 +442,4 @@ class Config():
LOGGER.info(error_msg)
return default
else: return [int(val) for val in conf_comp]
-
- def update(self, conf_mappings, limits = None):
- """
- This takes a dictionary of 'config_key => default_value' mappings and
- changes the values to reflect our current configuration. This will leave
- the previous values alone if...
-
- a. we don't have a value for that config_key
- b. we can't convert our value to be the same type as the default_value
-
- For more information about how we convert types see our get() method.
-
- Arguments:
- conf_mappings (dict) - configuration key/value mappings to be revised
- limits (dict) - mappings of limits on numeric values, expected to
- be of the form "configKey -> min" or "configKey ->
- (min, max)"
- """
-
- if limits == None: limits = {}
-
- for entry in conf_mappings.keys():
- val = self.get(entry, conf_mappings[entry])
-
- # if this was a numeric value then apply constraints
- if entry in limits and (isinstance(val, int) or isinstance(val, float)):
- if isinstance(limits[entry], tuple):
- val = max(val, limits[entry][0])
- val = min(val, limits[entry][1])
- else: val = max(val, limits[entry])
-
- # only use this value if it wouldn't change the type of the mapping (this
- # will only fail if the type isn't either a string or one of the types
- # recognized by the get method)
-
- if type(val) == type(conf_mappings[entry]):
- conf_mappings[entry] = val
-
- def keys(self):
- """
- Provides all keys in the currently loaded configuration.
-
- Returns:
- list if strings for the configuration keys we've loaded
- """
-
- return self._contents.keys()
-
- def unused_keys(self):
- """
- Provides the configuration keys that have never been provided to a caller
- via the get, get_value, or update methods.
-
- Returns:
- set of configuration keys we've loaded but have never been requested
- """
-
- return set(self.get_keys()).difference(self._requested_keys)
-
- def reset(self):
- """
- Drops the configuration contents and reverts back to a blank, unloaded
- state.
- """
-
- self._contents_lock.acquire()
- self._path = None
- self._contents.clear()
- self._raw_contents = []
- self._requested_keys = set()
- self._contents_lock.release()
-
- def load(self, path):
- """
- Reads in the contents of the given path, adding its configuration values
- to our current contents.
-
- Arguments:
- path (str) - file path to be loaded
-
- Raises:
- IOError if we fail to read the file (it doesn't exist, insufficient
- permissions, etc)
- """
-
- config_file = open(path, "r")
- read_contents = config_file.readlines()
- config_file.close()
-
- self._contents_lock.acquire()
- self._raw_contents = read_contents
-
- for line in self._raw_contents:
- # strips any commenting or excess whitespace
- comment_start = line.find("#")
- if comment_start != -1: line = line[:comment_start]
- line = line.strip()
-
- # parse the key/value pair
- if line:
- if " " in line:
- key, value = line.split(" ", 1)
- value = value.strip()
- else:
- key, value = line, ""
-
- if key in self._contents: self._contents[key].append(value)
- else: self._contents[key] = [value]
-
- self._path = path
- self._contents_lock.release()
1
0
commit d30e229c325bc243697d1d015a7bda03082c9756
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sun Nov 13 15:02:47 2011 -0800
Unit tests for enum
---
run_tests.py | 2 +
test/unit/util/__init__.py | 6 ++++
test/unit/util/enum.py | 59 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index 1107a59..530466a 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -16,6 +16,7 @@ import test.unit.types.control_message
import test.unit.types.control_line
import test.unit.types.version
import test.unit.connection.protocolinfo_response
+import test.unit.util.enum
import test.integ.message
import test.integ.system
@@ -31,6 +32,7 @@ UNIT_TESTS = (("stem.types.ControlMessage", test.unit.types.control_message.Test
("stem.types.ControlLine", test.unit.types.control_line.TestControlLine),
("stem.types.Version", test.unit.types.version.TestVerion),
("stem.connection.ProtocolInfoResponse", test.unit.connection.protocolinfo_response.TestProtocolInfoResponse),
+ ("stem.util.enum", test.unit.util.enum.TestEnum),
)
INTEG_TESTS = (("stem.types.ControlMessage", test.integ.message.TestMessageFunctions),
diff --git a/test/unit/util/__init__.py b/test/unit/util/__init__.py
new file mode 100644
index 0000000..84f12bf
--- /dev/null
+++ b/test/unit/util/__init__.py
@@ -0,0 +1,6 @@
+"""
+Unit tests for stem.util.* contents.
+"""
+
+__all__ = ["enum"]
+
diff --git a/test/unit/util/enum.py b/test/unit/util/enum.py
new file mode 100644
index 0000000..abdff06
--- /dev/null
+++ b/test/unit/util/enum.py
@@ -0,0 +1,59 @@
+"""
+Unit tests for the stem.util.enum class and functions.
+"""
+
+import unittest
+import stem.util.enum
+
+class TestEnum(unittest.TestCase):
+ """
+ Tests the stem.util.enum contents.
+ """
+
+ def test_to_camel_case(self):
+ """
+ Checks the stem.util.enum.to_camel_case function.
+ """
+
+ # test the pydoc example
+ self.assertEquals("I Like Pepperjack!", stem.util.enum.to_camel_case("I_LIKE_PEPPERJACK!"))
+
+ # check a few edge cases
+ self.assertEquals("", stem.util.enum.to_camel_case(""))
+ self.assertEquals("Hello", stem.util.enum.to_camel_case("hello"))
+ self.assertEquals("Hello", stem.util.enum.to_camel_case("HELLO"))
+ self.assertEquals("Hello World", stem.util.enum.to_camel_case("hello__world"))
+ self.assertEquals("Hello\tworld", stem.util.enum.to_camel_case("hello\tWORLD"))
+ self.assertEquals("Hello\t\tWorld", stem.util.enum.to_camel_case("hello__world", "\t"))
+
+ def test_enum_examples(self):
+ """
+ Checks that the pydoc examples are accurate.
+ """
+
+ insects = stem.util.enum.Enum("ANT", "WASP", "LADYBUG", "FIREFLY")
+ self.assertEquals("Ant", insects.ANT)
+ self.assertEquals(("Ant", "Wasp", "Ladybug", "Firefly"), insects.values())
+
+ pets = stem.util.enum.Enum(("DOG", "Skippy"), "CAT", ("FISH", "Nemo"))
+ self.assertEquals("Skippy", pets.DOG)
+ self.assertEquals("Cat", pets.CAT)
+
+ def test_enum_methods(self):
+ """
+ Exercises enumeration methods.
+ """
+
+ insects = stem.util.enum.Enum("ANT", "WASP", "LADYBUG", "FIREFLY")
+
+ # next method
+ self.assertEquals(insects.WASP, insects.next(insects.ANT))
+ self.assertEquals(insects.ANT, insects.next(insects.FIREFLY))
+
+ # previous method
+ self.assertEquals(insects.FIREFLY, insects.previous(insects.ANT))
+ self.assertEquals(insects.LADYBUG, insects.previous(insects.FIREFLY))
+
+ # __iter__ method
+ self.assertEquals(("ANT", "WASP", "LADYBUG", "FIREFLY"), tuple(insects))
+
1
0
13 Nov '11
commit b34f8990b6604996d7d60d139267ae43bac1de02
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sun Nov 13 15:09:51 2011 -0800
Shuffling integ tests to match unit tests
Unit tests are nicely categorized under their respective modules, so reordering
integration tests to match.
---
run_tests.py | 8 +-
stem/util/__init__.py | 2 +-
test/integ/__init__.py | 2 +-
test/integ/message.py | 242 -----------------------------------
test/integ/system.py | 64 ---------
test/integ/types/__init__.py | 6 +
test/integ/types/control_message.py | 242 +++++++++++++++++++++++++++++++++++
test/integ/util/__init__.py | 6 +
test/integ/util/system.py | 65 ++++++++++
9 files changed, 325 insertions(+), 312 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index 530466a..7dcffaf 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -17,8 +17,8 @@ import test.unit.types.control_line
import test.unit.types.version
import test.unit.connection.protocolinfo_response
import test.unit.util.enum
-import test.integ.message
-import test.integ.system
+import test.integ.types.control_message
+import test.integ.util.system
import stem.util.enum
import stem.util.term as term
@@ -35,8 +35,8 @@ UNIT_TESTS = (("stem.types.ControlMessage", test.unit.types.control_message.Test
("stem.util.enum", test.unit.util.enum.TestEnum),
)
-INTEG_TESTS = (("stem.types.ControlMessage", test.integ.message.TestMessageFunctions),
- ("stem.util.system", test.integ.system.TestSystemFunctions),
+INTEG_TESTS = (("stem.types.ControlMessage", test.integ.types.control_message.TestControlMessage),
+ ("stem.util.system", test.integ.util.system.TestSystem),
)
# TODO: drop targets?
diff --git a/stem/util/__init__.py b/stem/util/__init__.py
index 14692fe..42569c9 100644
--- a/stem/util/__init__.py
+++ b/stem/util/__init__.py
@@ -16,5 +16,5 @@ stem_logger = logging.getLogger("stem")
if not stem_logger.handlers:
stem_logger.addHandler(NullHandler())
-__all__ = ["conf", "enum", "log", "proc", "system", "term"]
+__all__ = ["conf", "enum", "proc", "system", "term"]
diff --git a/test/integ/__init__.py b/test/integ/__init__.py
index 718d40a..b96692a 100644
--- a/test/integ/__init__.py
+++ b/test/integ/__init__.py
@@ -2,5 +2,5 @@
Integration tests for the stem library.
"""
-__all__ = ["message", "system"]
+__all__ = []
diff --git a/test/integ/message.py b/test/integ/message.py
deleted file mode 100644
index a8e722d..0000000
--- a/test/integ/message.py
+++ /dev/null
@@ -1,242 +0,0 @@
-"""
-Integration tests for the stem.types.ControlMessage class.
-"""
-
-import re
-import socket
-import unittest
-
-import stem.types
-import test.runner
-
-class TestMessageFunctions(unittest.TestCase):
- """
- Exercises the 'stem.types.ControlMessage' class with an actual tor instance.
- """
-
- def test_unestablished_socket(self):
- """
- Checks message parsing when we have a valid but unauthenticated socket.
- """
-
- control_socket, control_socket_file = self._get_control_socket(False)
-
- # If an unauthenticated connection gets a message besides AUTHENTICATE or
- # PROTOCOLINFO then tor will give an 'Authentication required.' message and
- # hang up.
-
- control_socket_file.write("GETINFO version\r\n")
- control_socket_file.flush()
-
- auth_required_response = stem.types.read_message(control_socket_file)
- self.assertEquals("Authentication required.", str(auth_required_response))
- self.assertEquals(["Authentication required."], list(auth_required_response))
- self.assertEquals("514 Authentication required.\r\n", auth_required_response.raw_content())
- self.assertEquals([("514", " ", "Authentication required.")], auth_required_response.content())
-
- # The socket's broken but doesn't realize it yet. Send another message and
- # it should fail with a closed exception.
-
- control_socket_file.write("GETINFO version\r\n")
- control_socket_file.flush()
-
- self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
-
- # Additional socket usage should fail, and pulling more responses will fail
- # with more closed exceptions.
-
- control_socket_file.write("GETINFO version\r\n")
- self.assertRaises(socket.error, control_socket_file.flush)
- self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
- self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
- self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
-
- # The socket connection is already broken so calling close shouldn't have
- # an impact.
-
- control_socket.close()
- control_socket_file.write("GETINFO version\r\n")
- self.assertRaises(socket.error, control_socket_file.flush)
- self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
-
- # Closing the file handler, however, will cause a different type of error.
- # This seems to depend on the python version, in 2.6 we get an
- # AttributeError and in 2.7 the close() call raises...
- # error: [Errno 32] Broken pipe
-
- try:
- control_socket_file.close()
- control_socket_file.write("GETINFO version\r\n")
- except: pass
-
- # receives: AttributeError: 'NoneType' object has no attribute 'sendall'
- self.assertRaises(AttributeError, control_socket_file.flush)
-
- # receives: stem.types.SocketClosed: socket file has been closed
- self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
-
- def test_invalid_command(self):
- """
- Parses the response for a command which doesn't exist.
- """
-
- control_socket, control_socket_file = self._get_control_socket()
-
- control_socket_file.write("blarg\r\n")
- control_socket_file.flush()
-
- unrecognized_command_response = stem.types.read_message(control_socket_file)
- self.assertEquals('Unrecognized command "blarg"', str(unrecognized_command_response))
- self.assertEquals(['Unrecognized command "blarg"'], list(unrecognized_command_response))
- self.assertEquals('510 Unrecognized command "blarg"\r\n', unrecognized_command_response.raw_content())
- self.assertEquals([('510', ' ', 'Unrecognized command "blarg"')], unrecognized_command_response.content())
-
- control_socket.close()
- control_socket_file.close()
-
- def test_invalid_getinfo(self):
- """
- Parses the response for a GETINFO query which doesn't exist.
- """
-
- control_socket, control_socket_file = self._get_control_socket()
-
- control_socket_file.write("GETINFO blarg\r\n")
- control_socket_file.flush()
-
- unrecognized_key_response = stem.types.read_message(control_socket_file)
- self.assertEquals('Unrecognized key "blarg"', str(unrecognized_key_response))
- self.assertEquals(['Unrecognized key "blarg"'], list(unrecognized_key_response))
- self.assertEquals('552 Unrecognized key "blarg"\r\n', unrecognized_key_response.raw_content())
- self.assertEquals([('552', ' ', 'Unrecognized key "blarg"')], unrecognized_key_response.content())
-
- control_socket.close()
- control_socket_file.close()
-
- def test_getinfo_config_file(self):
- """
- Parses the 'GETINFO config-file' response.
- """
-
- runner = test.runner.get_runner()
- torrc_dst = runner.get_torrc_path()
-
- control_socket, control_socket_file = self._get_control_socket()
-
- control_socket_file.write("GETINFO config-file\r\n")
- control_socket_file.flush()
-
- config_file_response = stem.types.read_message(control_socket_file)
- self.assertEquals("config-file=%s\nOK" % torrc_dst, str(config_file_response))
- self.assertEquals(["config-file=%s" % torrc_dst, "OK"], list(config_file_response))
- self.assertEquals("250-config-file=%s\r\n250 OK\r\n" % torrc_dst, config_file_response.raw_content())
- self.assertEquals([("250", "-", "config-file=%s" % torrc_dst), ("250", " ", "OK")], config_file_response.content())
-
- control_socket.close()
- control_socket_file.close()
-
- def test_getinfo_config_text(self):
- """
- Parses the 'GETINFO config-text' response.
- """
-
- if stem.process.get_tor_version() < stem.types.REQ_GETINFO_CONFIG_TEXT:
- return
-
- # We can't be certain of the order, and there may be extra config-text
- # entries as per...
- # https://trac.torproject.org/projects/tor/ticket/2362
- #
- # so we'll just check that the response is a superset of our config
-
- runner = test.runner.get_runner()
- torrc_contents = []
-
- for line in runner.get_torrc_contents().split("\n"):
- line = line.strip()
-
- if line and not line.startswith("#"):
- torrc_contents.append(line)
-
- control_socket, control_socket_file = self._get_control_socket()
-
- control_socket_file.write("GETINFO config-text\r\n")
- control_socket_file.flush()
-
- config_text_response = stem.types.read_message(control_socket_file)
-
- # the response should contain two entries, the first being a data response
- self.assertEqual(2, len(list(config_text_response)))
- self.assertEqual("OK", list(config_text_response)[1])
- self.assertEqual(("250", " ", "OK"), config_text_response.content()[1])
- self.assertTrue(config_text_response.raw_content().startswith("250+config-text=\r\n"))
- self.assertTrue(config_text_response.raw_content().endswith("\r\n.\r\n250 OK\r\n"))
- self.assertTrue(str(config_text_response).startswith("config-text=\n"))
- self.assertTrue(str(config_text_response).endswith("\nOK"))
-
- for torrc_entry in torrc_contents:
- self.assertTrue("\n%s\n" % torrc_entry in str(config_text_response))
- self.assertTrue(torrc_entry in list(config_text_response)[0])
- self.assertTrue("%s\r\n" % torrc_entry in config_text_response.raw_content())
- self.assertTrue("%s" % torrc_entry in config_text_response.content()[0][2])
-
- control_socket.close()
- control_socket_file.close()
-
- def test_bw_event(self):
- """
- Issues 'SETEVENTS BW' and parses a few events.
- """
-
- control_socket, control_socket_file = self._get_control_socket()
-
- control_socket_file.write("SETEVENTS BW\r\n")
- control_socket_file.flush()
-
- setevents_response = stem.types.read_message(control_socket_file)
- self.assertEquals("OK", str(setevents_response))
- self.assertEquals(["OK"], list(setevents_response))
- self.assertEquals("250 OK\r\n", setevents_response.raw_content())
- self.assertEquals([("250", " ", "OK")], setevents_response.content())
-
- # Tor will emit a BW event once per second. Parsing two of them.
-
- for _ in range(2):
- bw_event = stem.types.read_message(control_socket_file)
- self.assertTrue(re.match("BW [0-9]+ [0-9]+", str(bw_event)))
- self.assertTrue(re.match("650 BW [0-9]+ [0-9]+\r\n", bw_event.raw_content()))
- self.assertEquals(("650", " "), bw_event.content()[0][:2])
-
- control_socket.close()
- control_socket_file.close()
-
- def _get_control_socket(self, authenticate = True):
- """
- Provides a socket connected to the tor test instance's control port.
-
- Arguments:
- authenticate (bool) - if True then the socket is authenticated
-
- Returns:
- (socket.socket, file) tuple with the control socket and its file
- """
-
- runner = test.runner.get_runner()
-
- control_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- control_socket.connect(("127.0.0.1", runner.get_control_port()))
- control_socket_file = control_socket.makefile()
-
- if authenticate:
- control_socket_file.write("AUTHENTICATE\r\n")
- control_socket_file.flush()
-
- authenticate_response = stem.types.read_message(control_socket_file)
-
- self.assertEquals("OK", str(authenticate_response))
- self.assertEquals(["OK"], list(authenticate_response))
- self.assertEquals("250 OK\r\n", authenticate_response.raw_content())
- self.assertEquals([("250", " ", "OK")], authenticate_response.content())
-
- return (control_socket, control_socket_file)
-
diff --git a/test/integ/system.py b/test/integ/system.py
deleted file mode 100644
index 32ac892..0000000
--- a/test/integ/system.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-Unit tests for the stem.util.system functions in the context of a tor process.
-"""
-
-import os
-import unittest
-
-import test.runner
-import stem.util.system as system
-
-class TestSystemFunctions(unittest.TestCase):
- """
- Tests the stem.util.system functions against the tor process that we're
- running.
- """
-
- def test_is_available(self):
- """
- Checks the stem.util.system.is_available function.
- """
-
- # since we're running tor it would be kinda sad if this didn't detect it
- self.assertTrue(system.is_available("tor"))
-
- # but it would be kinda weird if this did...
- self.assertFalse(system.is_available("blarg_and_stuff"))
-
- def test_is_running(self):
- """
- Checks the stem.util.system.is_running function.
- """
-
- self.assertTrue(system.is_running("tor"))
- self.assertFalse(system.is_running("blarg_and_stuff"))
-
- def test_get_pid(self):
- """
- Checks the stem.util.system.get_pid function.
- """
-
- runner = test.runner.get_runner()
- self.assertEquals(runner.get_pid(), system.get_pid("tor", runner.get_control_port()))
- self.assertEquals(None, system.get_pid("blarg_and_stuff"))
-
- def test_get_cwd(self):
- """
- Checks the stem.util.system.get_cwd function.
- """
-
- # tor's pwd will match our process since we started it
- runner = test.runner.get_runner()
- self.assertEquals(os.getcwd(), system.get_cwd(runner.get_pid()))
- self.assertEquals(None, system.get_cwd(99999, True))
- self.assertRaises(IOError, system.get_cwd, 99999, False)
-
- def test_get_bsd_jail_id(self):
- """
- Exercises the util.system.get_bsd_jail_id function, running through the
- failure case (since I'm not on BSD I can't really test this function
- properly).
- """
-
- self.assertEquals(0, system.get_bsd_jail_id(99999))
-
diff --git a/test/integ/types/__init__.py b/test/integ/types/__init__.py
new file mode 100644
index 0000000..7ab4c07
--- /dev/null
+++ b/test/integ/types/__init__.py
@@ -0,0 +1,6 @@
+"""
+Integration tests for stem.types.
+"""
+
+__all__ = ["control_message"]
+
diff --git a/test/integ/types/control_message.py b/test/integ/types/control_message.py
new file mode 100644
index 0000000..07259e7
--- /dev/null
+++ b/test/integ/types/control_message.py
@@ -0,0 +1,242 @@
+"""
+Integration tests for the stem.types.ControlMessage class.
+"""
+
+import re
+import socket
+import unittest
+
+import stem.types
+import test.runner
+
+class TestControlMessage(unittest.TestCase):
+ """
+ Exercises the 'stem.types.ControlMessage' class with an actual tor instance.
+ """
+
+ def test_unestablished_socket(self):
+ """
+ Checks message parsing when we have a valid but unauthenticated socket.
+ """
+
+ control_socket, control_socket_file = self._get_control_socket(False)
+
+ # If an unauthenticated connection gets a message besides AUTHENTICATE or
+ # PROTOCOLINFO then tor will give an 'Authentication required.' message and
+ # hang up.
+
+ control_socket_file.write("GETINFO version\r\n")
+ control_socket_file.flush()
+
+ auth_required_response = stem.types.read_message(control_socket_file)
+ self.assertEquals("Authentication required.", str(auth_required_response))
+ self.assertEquals(["Authentication required."], list(auth_required_response))
+ self.assertEquals("514 Authentication required.\r\n", auth_required_response.raw_content())
+ self.assertEquals([("514", " ", "Authentication required.")], auth_required_response.content())
+
+ # The socket's broken but doesn't realize it yet. Send another message and
+ # it should fail with a closed exception.
+
+ control_socket_file.write("GETINFO version\r\n")
+ control_socket_file.flush()
+
+ self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
+
+ # Additional socket usage should fail, and pulling more responses will fail
+ # with more closed exceptions.
+
+ control_socket_file.write("GETINFO version\r\n")
+ self.assertRaises(socket.error, control_socket_file.flush)
+ self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
+ self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
+ self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
+
+ # The socket connection is already broken so calling close shouldn't have
+ # an impact.
+
+ control_socket.close()
+ control_socket_file.write("GETINFO version\r\n")
+ self.assertRaises(socket.error, control_socket_file.flush)
+ self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
+
+ # Closing the file handler, however, will cause a different type of error.
+ # This seems to depend on the python version, in 2.6 we get an
+ # AttributeError and in 2.7 the close() call raises...
+ # error: [Errno 32] Broken pipe
+
+ try:
+ control_socket_file.close()
+ control_socket_file.write("GETINFO version\r\n")
+ except: pass
+
+ # receives: AttributeError: 'NoneType' object has no attribute 'sendall'
+ self.assertRaises(AttributeError, control_socket_file.flush)
+
+ # receives: stem.types.SocketClosed: socket file has been closed
+ self.assertRaises(stem.types.SocketClosed, stem.types.read_message, control_socket_file)
+
+ def test_invalid_command(self):
+ """
+ Parses the response for a command which doesn't exist.
+ """
+
+ control_socket, control_socket_file = self._get_control_socket()
+
+ control_socket_file.write("blarg\r\n")
+ control_socket_file.flush()
+
+ unrecognized_command_response = stem.types.read_message(control_socket_file)
+ self.assertEquals('Unrecognized command "blarg"', str(unrecognized_command_response))
+ self.assertEquals(['Unrecognized command "blarg"'], list(unrecognized_command_response))
+ self.assertEquals('510 Unrecognized command "blarg"\r\n', unrecognized_command_response.raw_content())
+ self.assertEquals([('510', ' ', 'Unrecognized command "blarg"')], unrecognized_command_response.content())
+
+ control_socket.close()
+ control_socket_file.close()
+
+ def test_invalid_getinfo(self):
+ """
+ Parses the response for a GETINFO query which doesn't exist.
+ """
+
+ control_socket, control_socket_file = self._get_control_socket()
+
+ control_socket_file.write("GETINFO blarg\r\n")
+ control_socket_file.flush()
+
+ unrecognized_key_response = stem.types.read_message(control_socket_file)
+ self.assertEquals('Unrecognized key "blarg"', str(unrecognized_key_response))
+ self.assertEquals(['Unrecognized key "blarg"'], list(unrecognized_key_response))
+ self.assertEquals('552 Unrecognized key "blarg"\r\n', unrecognized_key_response.raw_content())
+ self.assertEquals([('552', ' ', 'Unrecognized key "blarg"')], unrecognized_key_response.content())
+
+ control_socket.close()
+ control_socket_file.close()
+
+ def test_getinfo_config_file(self):
+ """
+ Parses the 'GETINFO config-file' response.
+ """
+
+ runner = test.runner.get_runner()
+ torrc_dst = runner.get_torrc_path()
+
+ control_socket, control_socket_file = self._get_control_socket()
+
+ control_socket_file.write("GETINFO config-file\r\n")
+ control_socket_file.flush()
+
+ config_file_response = stem.types.read_message(control_socket_file)
+ self.assertEquals("config-file=%s\nOK" % torrc_dst, str(config_file_response))
+ self.assertEquals(["config-file=%s" % torrc_dst, "OK"], list(config_file_response))
+ self.assertEquals("250-config-file=%s\r\n250 OK\r\n" % torrc_dst, config_file_response.raw_content())
+ self.assertEquals([("250", "-", "config-file=%s" % torrc_dst), ("250", " ", "OK")], config_file_response.content())
+
+ control_socket.close()
+ control_socket_file.close()
+
+ def test_getinfo_config_text(self):
+ """
+ Parses the 'GETINFO config-text' response.
+ """
+
+ if stem.process.get_tor_version() < stem.types.REQ_GETINFO_CONFIG_TEXT:
+ self.skipTest("(requires %s)" % stem.types.REQ_GETINFO_CONFIG_TEXT)
+
+ # We can't be certain of the order, and there may be extra config-text
+ # entries as per...
+ # https://trac.torproject.org/projects/tor/ticket/2362
+ #
+ # so we'll just check that the response is a superset of our config
+
+ runner = test.runner.get_runner()
+ torrc_contents = []
+
+ for line in runner.get_torrc_contents().split("\n"):
+ line = line.strip()
+
+ if line and not line.startswith("#"):
+ torrc_contents.append(line)
+
+ control_socket, control_socket_file = self._get_control_socket()
+
+ control_socket_file.write("GETINFO config-text\r\n")
+ control_socket_file.flush()
+
+ config_text_response = stem.types.read_message(control_socket_file)
+
+ # the response should contain two entries, the first being a data response
+ self.assertEqual(2, len(list(config_text_response)))
+ self.assertEqual("OK", list(config_text_response)[1])
+ self.assertEqual(("250", " ", "OK"), config_text_response.content()[1])
+ self.assertTrue(config_text_response.raw_content().startswith("250+config-text=\r\n"))
+ self.assertTrue(config_text_response.raw_content().endswith("\r\n.\r\n250 OK\r\n"))
+ self.assertTrue(str(config_text_response).startswith("config-text=\n"))
+ self.assertTrue(str(config_text_response).endswith("\nOK"))
+
+ for torrc_entry in torrc_contents:
+ self.assertTrue("\n%s\n" % torrc_entry in str(config_text_response))
+ self.assertTrue(torrc_entry in list(config_text_response)[0])
+ self.assertTrue("%s\r\n" % torrc_entry in config_text_response.raw_content())
+ self.assertTrue("%s" % torrc_entry in config_text_response.content()[0][2])
+
+ control_socket.close()
+ control_socket_file.close()
+
+ def test_bw_event(self):
+ """
+ Issues 'SETEVENTS BW' and parses a few events.
+ """
+
+ control_socket, control_socket_file = self._get_control_socket()
+
+ control_socket_file.write("SETEVENTS BW\r\n")
+ control_socket_file.flush()
+
+ setevents_response = stem.types.read_message(control_socket_file)
+ self.assertEquals("OK", str(setevents_response))
+ self.assertEquals(["OK"], list(setevents_response))
+ self.assertEquals("250 OK\r\n", setevents_response.raw_content())
+ self.assertEquals([("250", " ", "OK")], setevents_response.content())
+
+ # Tor will emit a BW event once per second. Parsing two of them.
+
+ for _ in range(2):
+ bw_event = stem.types.read_message(control_socket_file)
+ self.assertTrue(re.match("BW [0-9]+ [0-9]+", str(bw_event)))
+ self.assertTrue(re.match("650 BW [0-9]+ [0-9]+\r\n", bw_event.raw_content()))
+ self.assertEquals(("650", " "), bw_event.content()[0][:2])
+
+ control_socket.close()
+ control_socket_file.close()
+
+ def _get_control_socket(self, authenticate = True):
+ """
+ Provides a socket connected to the tor test instance's control port.
+
+ Arguments:
+ authenticate (bool) - if True then the socket is authenticated
+
+ Returns:
+ (socket.socket, file) tuple with the control socket and its file
+ """
+
+ runner = test.runner.get_runner()
+
+ control_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ control_socket.connect(("127.0.0.1", runner.get_control_port()))
+ control_socket_file = control_socket.makefile()
+
+ if authenticate:
+ control_socket_file.write("AUTHENTICATE\r\n")
+ control_socket_file.flush()
+
+ authenticate_response = stem.types.read_message(control_socket_file)
+
+ self.assertEquals("OK", str(authenticate_response))
+ self.assertEquals(["OK"], list(authenticate_response))
+ self.assertEquals("250 OK\r\n", authenticate_response.raw_content())
+ self.assertEquals([("250", " ", "OK")], authenticate_response.content())
+
+ return (control_socket, control_socket_file)
+
diff --git a/test/integ/util/__init__.py b/test/integ/util/__init__.py
new file mode 100644
index 0000000..a0b3303
--- /dev/null
+++ b/test/integ/util/__init__.py
@@ -0,0 +1,6 @@
+"""
+Integration tests for stem.util.* contents.
+"""
+
+__all__ = ["system"]
+
diff --git a/test/integ/util/system.py b/test/integ/util/system.py
new file mode 100644
index 0000000..fc7c384
--- /dev/null
+++ b/test/integ/util/system.py
@@ -0,0 +1,65 @@
+"""
+Integration tests for the stem.util.system functions in the context of a tor
+process.
+"""
+
+import os
+import unittest
+
+import test.runner
+import stem.util.system
+
+class TestSystem(unittest.TestCase):
+ """
+ Tests the stem.util.system functions against the tor process that we're
+ running.
+ """
+
+ def test_is_available(self):
+ """
+ Checks the stem.util.system.is_available function.
+ """
+
+ # since we're running tor it would be kinda sad if this didn't detect it
+ self.assertTrue(stem.util.system.is_available("tor"))
+
+ # but it would be kinda weird if this did...
+ self.assertFalse(stem.util.system.is_available("blarg_and_stuff"))
+
+ def test_is_running(self):
+ """
+ Checks the stem.util.system.is_running function.
+ """
+
+ self.assertTrue(stem.util.system.is_running("tor"))
+ self.assertFalse(stem.util.system.is_running("blarg_and_stuff"))
+
+ def test_get_pid(self):
+ """
+ Checks the stem.util.system.get_pid function.
+ """
+
+ runner = test.runner.get_runner()
+ self.assertEquals(runner.get_pid(), stem.util.system.get_pid("tor", runner.get_control_port()))
+ self.assertEquals(None, stem.util.system.get_pid("blarg_and_stuff"))
+
+ def test_get_cwd(self):
+ """
+ Checks the stem.util.system.get_cwd function.
+ """
+
+ # tor's pwd will match our process since we started it
+ runner = test.runner.get_runner()
+ self.assertEquals(os.getcwd(), stem.util.system.get_cwd(runner.get_pid()))
+ self.assertEquals(None, stem.util.system.get_cwd(99999, True))
+ self.assertRaises(IOError, stem.util.system.get_cwd, 99999, False)
+
+ def test_get_bsd_jail_id(self):
+ """
+ Exercises the stem.util.system.get_bsd_jail_id function, running through
+ the failure case (since I'm not on BSD I can't really test this function
+ properly).
+ """
+
+ self.assertEquals(0, stem.util.system.get_bsd_jail_id(99999))
+
1
0
commit 5135221a3b4855350df385faddb4012254ccd477
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Nov 13 21:15:04 2011 +0000
Update translations for tsum
---
it/tsum.po | 40 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 39 insertions(+), 1 deletions(-)
diff --git a/it/tsum.po b/it/tsum.po
index 7feba7e..46b9b96 100644
--- a/it/tsum.po
+++ b/it/tsum.po
@@ -11,7 +11,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2011-11-05 17:16+0000\n"
-"PO-Revision-Date: 2011-11-13 20:43+0000\n"
+"PO-Revision-Date: 2011-11-13 21:02+0000\n"
"Last-Translator: n0on3 <a.n0on3(a)gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/torproject/team/it/)\n"
"MIME-Version: 1.0\n"
@@ -84,6 +84,10 @@ msgid ""
"The green monitors represent relays in the Tor network, while the three keys"
" represent the layers of encryption between the user and each relay."
msgstr ""
+"L'immagine qui sopra rappresenta un utente che visita diversi siti web "
+"attraverso Tor. I monitor verdi rappresentano dei relay nella rete Tor, "
+"mentre le chiavi rappresentano tunnel crittografici tra l'utente ed ogni "
+"relay."
#. type: Plain text
#: en/tsum.text:31
@@ -565,6 +569,8 @@ msgid ""
"### How to use an open proxy\n"
"If using a bridge does not work, try configuring Tor to use any HTTPS or SOCKS proxy to get access to the Tor network. This means even if Tor is blocked by your local network, open proxies can be safely used to connect to the Tor Network and on to the uncensored Internet."
msgstr ""
+"### Come utilizzare un proxy aperto\n"
+"Se non si riesce ad utilizzare un bridge, si provi a configurare Tor per utilizzare un proxy HTTPS o SOCKS per avere accesso alla rete Tor. Questo significa che anche se Tor è bloccato dalla propria rete locale, dei proxy aperti possono essere utilizzati in modo sicuro per connettersi alla rete Tor e conseguentemente ad Internet senza censura."
#. type: Plain text
#: en/tsum.text:223
@@ -615,6 +621,8 @@ msgid ""
"## Frequently Asked Questions\n"
"This section will answer some of the most common questions. If your question is not mentioned here, please send an email to help(a)rt.torproject.org."
msgstr ""
+"### FAQ - Domande Frequenti\n"
+"Questa sezione risponderà ad alcune delle domande più comunemente poste dagli utenti. Se la vostra domanda non è menzionata qui, si riporti via email all'indirizzo help(a)rt.torproject.org."
#. type: Plain text
#: en/tsum.text:244
@@ -622,6 +630,8 @@ msgid ""
"### Unable to extract the archive\n"
"If you are using Windows and find that you cannot extract the archive, download and install [7-Zip](http://www.7-zip.org/)."
msgstr ""
+"### Impossibile estrarre l'archivio\n"
+"Se si sta usando Windows e non si riesce ad estrarre l'archivio, si scarichi ed installi [7-Zip](http://www.7-zip.org/)."
#. type: Plain text
#: en/tsum.text:248
@@ -630,6 +640,9 @@ msgid ""
"and use winzip to extract the archive. Before renaming the file, tell "
"Windows to show file extensions:"
msgstr ""
+"Se non riesci a scaricare 7-Zip, si provi a rinominare il file da .z a .zip "
+"e si utilizzi winzip per estrarre l'archivio. Prima di rinominare il file, "
+"si configuri Windows per mostrare le estensioni dei files."
#. type: Plain text
#: en/tsum.text:254
@@ -640,6 +653,11 @@ msgid ""
"3. Click on the *View* tab\n"
"4. Uncheck *Hide extensions for known file types* and click *OK*"
msgstr ""
+"#### Windows XP\n"
+"1. Aprire \"My Computer\"\n"
+"2. Fare click su *Tools* e scegliere *Folder Options...* nel menu\n"
+"3. Fare click sulla tab *View*\n"
+"4. Togliere la spunta alla casella *Hide extensions for known file types* e fare click su *OK*"
#. type: Plain text
#: en/tsum.text:260
@@ -650,6 +668,11 @@ msgid ""
"3. Click on the *View* tab\n"
"4. Uncheck *Hide extensions for known file types* and click *OK*"
msgstr ""
+"#### Windows Vista\n"
+"1. Aprire *Computer*\n"
+"2. Fare click su *Organize* e scegliere *Folder and search options\" dal menu\n"
+"3. Fare click sulla tab *View*\n"
+"4. Togliere la spunta alla casella *Hide extensions for known file types* e fare click su *OK*"
#. type: Plain text
#: en/tsum.text:266
@@ -660,6 +683,11 @@ msgid ""
"3. Click on the *View* tab\n"
" 4. Uncheck *Hide extensions for known file types* and click *OK*"
msgstr ""
+"#### Windows 7\n"
+"1. Aprire *Computer*\n"
+"2. Fare click su *Organize* e scegliere *Folder and search options\" dal menu\n"
+"3. Fare click sulla tab *View*\n"
+"4. Togliere la spunta alla casella *Hide extensions for known file types* e fare click su *OK*"
#. type: Plain text
#: en/tsum.text:273
@@ -667,6 +695,8 @@ msgid ""
"### What to do with split packages\n"
"When you request a split package, the parts may arrive out of order. You need to make sure you have received all the parts before you attempt to unpack them. Save all the parts into one directory on your computer, unzip them, and double-click the file that ends in \"..split.part01.exe\" to start the unpacking process."
msgstr ""
+"### Cosa fare con i pacchetti divisi\n"
+"Quando si richiede un pacchetto diviso, le parti potrebbero arrivare fuori ordine. Ci si deve accertare di aver ricevuto tutte le parti prima di tentare l'estrazione dei pacchetti. Si salvino tutte le party nella stessa directory sul proprio computer, se ne estraggano i contenuti, e si faccia doppio-click sul file che termina in \"..split.part01.exe\" per iniziare il processo di estrazione."
#. type: Plain text
#: en/tsum.text:277
@@ -685,6 +715,8 @@ msgid ""
"### Vidalia asks for a password\n"
"You should not have to enter a password when starting Vidalia. If you are prompted for one, you are likely affected by one of these problems:"
msgstr ""
+"### Vidalia chiede una password\n"
+"Non dovrebbe essere necessario inserire alcuna password all'avvio di Vidalia. Se ne viene richiesta una, è probabile che si sia affetti da uno dei seguenti problemi:"
#. type: Plain text
#: en/tsum.text:287
@@ -730,6 +762,8 @@ msgid ""
"### Flash does not work\n"
"For security reasons, Flash, Java, and other plugins are currently disabled for Tor. Plugins operate independently from Firefox and can perform activity on your computer that ruins your anonymity."
msgstr ""
+"### Flash non funziona\n"
+"Per motivi di sicurezza, Flash, Java, ed altri plugins sono attualmente disabilitati per Tor. I plugin operano in modo indipendente da Firefox, e per tanto possono effettuare operazioni sul computer che mettono a rischio l'anonimato."
#. type: Plain text
#: en/tsum.text:308
@@ -769,6 +803,8 @@ msgid ""
"### I want to use another browser\n"
"For security reasons, we recommend that you only browse the web through Tor using the Tor Browser Bundle. It is technically possible to use Tor with other browsers, but by doing so you open yourself up to potential attacks."
msgstr ""
+"### Vorrei usare un altro browser\n"
+"Per ragioni di sicurezza, raccomandiamo di navigare unicamente attraverso il Tor Browser Bundle. E' tecnicamente possibile utilizzare Tor con altri Browser, ma così facendo ci si espone a potenziali attacchi."
#. type: Plain text
#: en/tsum.text:325
@@ -776,5 +812,7 @@ msgid ""
"### Why Tor is slow\n"
"Tor can sometimes be a bit slower than your normal Internet connection. After all, your traffic is sent through many different countries, sometimes across oceans around the world!"
msgstr ""
+"### Perché Tor è così lento?\n"
+"Tor a volte può essere un po' più lento della vostra normale connessione ad Internet. Dopo tutto, il vostro traffico è spedito attraverso diversi paesi, a volte al di la dell'oceano attorno al mondo!"
1
0
commit c297c704ad93f4eef4e89c9851e7c6dd968afd05
Author: Christian Fromme <kaner(a)strace.org>
Date: Sun Nov 13 22:01:18 2011 +0100
Update pot file as well..
---
i18n/templates/gettor.pot | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/i18n/templates/gettor.pot b/i18n/templates/gettor.pot
index 0739225..79bff5a 100644
--- a/i18n/templates/gettor.pot
+++ b/i18n/templates/gettor.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-10 01:52-0400\n"
+"POT-Creation-Date: 2011-11-13 22:01+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
@@ -49,7 +49,7 @@ msgstr ""
#: lib/gettor/i18n.py:43 lib/gettor/i18n.py:130
msgid ""
"If you have any questions or it doesn't work, you can contact a\n"
-"human at this support email address: community-support(a)lists.torproject.org"
+"human at this support email address: help(a)rt.torproject.org"
msgstr ""
#: lib/gettor/i18n.py:46
@@ -446,3 +446,16 @@ msgstr ""
#: lib/gettor/i18n.py:272
msgid "ANSWER:"
msgstr ""
+
+#: lib/gettor/i18n.py:274
+#, python-format
+msgid ""
+"Sorry, but the package you requested (%s) is too large for your \n"
+"provider to accept as an attachment. Try using another provider that "
+"allows \n"
+"for larger email attachments. Or try one of the following mirrors:\n"
+"\n"
+" https://www.oignon.net/dist/torbrowser/\n"
+" https://tor.beme-it.de/dist/torbrowser/\n"
+" https://www.torservers.net/mirrors/torproject.org/dist/torbrowser/"
+msgstr ""
1
0
[gettor/master] Fix MakeStat.py script so we have graphs on metrics.tpo again.
by kaner@torproject.org 13 Nov '11
by kaner@torproject.org 13 Nov '11
13 Nov '11
commit b1c9ce2541dd8d82a21faffe939628b2019714fe
Author: Christian Fromme <kaner(a)strace.org>
Date: Wed Nov 2 09:10:45 2011 +0100
Fix MakeStat.py script so we have graphs on metrics.tpo again.
---
MakeStat.py | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/MakeStat.py b/MakeStat.py
index 24ceeaf..9bc8c70 100644
--- a/MakeStat.py
+++ b/MakeStat.py
@@ -24,7 +24,9 @@ def makestats(filename, configPackages):
readData = logFile.read().split('\n')
for line in readData:
- matchStr = "([0-9]{4}-[0-9]{2}-[0-9]{2}).*({'.*'}).*"
+ # This is how we recognize a relevant line: Starts with a date like
+ # 2011-10-04 and has a "{" with matching "}" somewhere.
+ matchStr = "^([0-9]{4}-[0-9]{2}-[0-9]{2}).*({.*}).*"
match = re.match(matchStr, line, re.DOTALL)
if match:
dateInfo = match.group(1)
@@ -39,14 +41,17 @@ def makestats(filename, configPackages):
package = "linux" + match.group(1)
match = re.match("(macosx-i386)(.*)", package)
if match:
- package = "macosx-i386"
+ package = "macos-i386"
match = re.match("(macosx-ppc)(.*)", package)
if match:
- package = "macosx-ppc"
+ package = "macos-ppc"
match = re.match("windows-bundle", package)
if match:
continue
- packageCounter[package] += 1
+ if package in packageCounter.keys():
+ packageCounter[package] += 1
+ else:
+ packageCounter['None'] += 1
else:
packageCounter['None'] += 1
@@ -68,8 +73,10 @@ def main():
logDir = os.path.join(config.BASEDIR, "log")
logFilePattern = os.path.join(logDir, config.LOGFILE + "*.log")
fileList = glob.glob(logFilePattern)
+ fileList = sorted(fileList)
for f in fileList:
dateInfo, stats = makestats(f, config.PACKAGES)
+ print "File: ", f
printStatsStdout(dateInfo, stats)
if __name__ == "__main__":
1
0
[gettor/master] Changed support email addresses. s/community-support@/help@/
by kaner@torproject.org 13 Nov '11
by kaner@torproject.org 13 Nov '11
13 Nov '11
commit 3924e04cceab18f3c8c2fbd5f11e8d66dfca3961
Author: Christian Fromme <kaner(a)strace.org>
Date: Sun Nov 13 21:50:01 2011 +0100
Changed support email addresses. s/community-support@/help@/
---
lib/gettor/i18n.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/gettor/i18n.py b/lib/gettor/i18n.py
index 6c77fd2..45b95a5 100644
--- a/lib/gettor/i18n.py
+++ b/lib/gettor/i18n.py
@@ -41,7 +41,7 @@ a service that doesn't use DKIM, we're sending a short explanation,
and then we'll ignore this email address for the next day or so.)"""),
# GETTOR_TEXT[5]
_("""If you have any questions or it doesn't work, you can contact a
-human at this support email address: community-support(a)lists.torproject.org"""),
+human at this support email address: help(a)rt.torproject.org"""),
# GETTOR_TEXT[6]
_("""I will mail you a Tor package, if you tell me which one you want.
Please select one of the following package names:
@@ -128,7 +128,7 @@ _("""SUPPORT
======="""),
# GETTOR_TEXT[27]
_("""If you have any questions or it doesn't work, you can contact a
-human at this support email address: community-support(a)lists.torproject.org"""),
+human at this support email address: help(a)rt.torproject.org"""),
# GETTOR_TEXT[28]
_("""Here's your requested software as a zip file. Please unzip the
package and verify the signature."""),
1
0
commit f782639d066f457e07d37afd4bf0466a99c70bea
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Nov 13 20:45:03 2011 +0000
Update translations for tsum
---
it/tsum.po | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 80 insertions(+), 2 deletions(-)
diff --git a/it/tsum.po b/it/tsum.po
index 9c098dc..7feba7e 100644
--- a/it/tsum.po
+++ b/it/tsum.po
@@ -11,7 +11,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2011-11-05 17:16+0000\n"
-"PO-Revision-Date: 2011-11-13 20:14+0000\n"
+"PO-Revision-Date: 2011-11-13 20:43+0000\n"
"Last-Translator: n0on3 <a.n0on3(a)gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/torproject/team/it/)\n"
"MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgstr ""
#. type: Plain text
#: en/tsum.text:2
msgid "# The Short User Manual\n"
-msgstr ""
+msgstr "# Manuale utente in versione breve\n"
#. type: Plain text
#: en/tsum.text:7
@@ -33,6 +33,10 @@ msgid ""
"find the answer to your question in this document, email "
"help(a)rt.torproject.org."
msgstr ""
+"Questo manuale contiene informazioni su come scaricare Tor, come usarlo, e "
+"cosa fare se non è possibile connettere Tor alla rete. Se la risposta alla "
+"tua domanda non compare in questo documento, contatta via email l'indirizzo "
+"help(a)rt.torproject.org."
#. type: Plain text
#: en/tsum.text:11
@@ -41,6 +45,9 @@ msgid ""
" lot of emails every single day. There is no need to worry if we don't get "
"back to you straight away."
msgstr ""
+"Si ricorda che il supporto è fornito su base volontaria, e che il numero di "
+"email ricevute ogni giorno è ingente. Pertanto, non c'è ragione di "
+"preoccuparsi se non si riceve una risposta immediata."
#. type: Plain text
#: en/tsum.text:13
@@ -97,6 +104,10 @@ msgid ""
"to a website with a username and password, make sure that you are using "
"HTTPS (e.g. **https**://torproject.org/, not **http**://torproject.org/)."
msgstr ""
+"Se si stanno comunicando informazioni sensibili, ad esempio effettuando "
+"l'autenticazione presso un sito con nome utente e password, ci si assicuri "
+"di star usando HTTPS (esempio, **https**://torproject.org/, non "
+"**http**://torproject.org/)."
#. type: Plain text
#: en/tsum.text:38
@@ -130,6 +141,10 @@ msgid ""
" browse to the [Tor Project website](https://www.torproject.org/) and "
"download it there, or you can use GetTor, the email autoresponder."
msgstr ""
+"Ci sono due diversi modi per ottenere il software Tor. Uno di questi è "
+"visitare il [Sito del Progetto Tor](https://www.torproject.org/) e "
+"scaricarlo da li, oppure utilizzare GetTor, un risponditore automatico via "
+"email."
#. type: Plain text
#: en/tsum.text:53
@@ -137,6 +152,8 @@ msgid ""
"### How to get Tor via email\n"
"To receive the English Tor Browser Bundle for Windows, send an email to gettor(a)torproject.org with **windows** in the body of the message. You can leave the subject blank."
msgstr ""
+"### Come ottenere Tor via email \n"
+"Per ricevere il pacchetto browser Tor in lingua inglese per Windows, è sufficiente inviare una email a gettor(a)torproject.org con **windows** nel corpo del messaggio. Il titolo può essere lasciato in bianco."
#. type: Plain text
#: en/tsum.text:57
@@ -169,6 +186,11 @@ msgid ""
"want, send an email to help(a)rt.torproject.org and we\n"
"will give you a list of website mirrors to use.\n"
msgstr ""
+"**Nota**: Nota: I pacchetti Browser Tor per Linux e Mac OS X sono piuttosto "
+"grandi, e non sarà possibile ricevere nessuno di questi pacchetti con Gmail,"
+" Hotmail o Yahoo. Se non è possibile ricevere i pacchetto desiderato, si "
+"invii una email a help(a)rt.torproject.org per ricevere una lista di siti web "
+"alternativi da utilizzare per scaricare Tor.\n"
#. type: Plain text
#: en/tsum.text:73
@@ -176,6 +198,8 @@ msgid ""
"#### How to get Tor as several small sized packages\n"
"It is possible to request the Tor Browser Bundle for Windows as several small sized packages, instead of one big package. This can be useful if you don't have a lot of bandwidth available, or if your email provider does not allow you to receive large attachments."
msgstr ""
+"#### Come ottenere Tor sotto forma di diversi pacchetti di piccole dimensioni.\n"
+"E' possibile richiedere il Pacchetto Browser Tor per Windows sotto forma di diversi pacchetti di piccole dimensioni, invece che di un unico grande pacchetto. Questo può essere utile se non si ha a disposizione molta banda, o se il fornitore di servizi email non ammette la ricezione di allegati sopra una certa dimensione."
#. type: Plain text
#: en/tsum.text:76
@@ -183,6 +207,8 @@ msgid ""
"Send an email to gettor(a)torproject.org with the following words in the body "
"of the email:"
msgstr ""
+"Si invii una email a gettor(a)torproject.org con le seguenti parole nel corpo "
+"del messaggio:"
#. type: Plain text
#: en/tsum.text:79
@@ -191,6 +217,8 @@ msgid ""
"windows \n"
"split\n"
msgstr ""
+"windows \n"
+"split\n"
#. type: Plain text
#: en/tsum.text:83
@@ -199,6 +227,9 @@ msgid ""
"*What to do with split packages* for information on how to unpack and re-"
"assemble the small sized packages."
msgstr ""
+"E' importante includere la parola chiave *split* su una linea separata. Si "
+"veda *Cosa fare con i pacchetti divisi* per informazioni su come estrarre e "
+"riassemblare i pacchetti di piccole dimensioni."
#. type: Plain text
#: en/tsum.text:89
@@ -206,6 +237,8 @@ msgid ""
"### Tor for smartphones\n"
"You can get Tor on your Android device by installing the package named *Orbot*. For information about how to download and install Orbot, please see the [Tor Project website](https://www.torproject.org/docs/android.html.en)."
msgstr ""
+"### Tor per smartphones\n"
+"E' possibile ottenere Tor su un dispositivo Android installando il pacchetto chiamato Orbot. Per informazioni su come ottenere ed installare Orbot, si veda il [Sito del progetto Tor](https://www.torproject.org/docs/android.html.en)."
#. type: Plain text
#: en/tsum.text:93
@@ -214,6 +247,9 @@ msgid ""
"Maemo/N900](https://www.torproject.org/docs/N900.html.en) and [Apple "
"iOS](http://sid77.slackware.it/iphone/)."
msgstr ""
+"Sono inoltre disponibili pacchetti sperimentali per [Nokia "
+"Maemo/N900](https://www.torproject.org/docs/N900.html.en) e [Apple "
+"iOS](http://sid77.slackware.it/iphone/)."
#. type: Plain text
#: en/tsum.text:97
@@ -221,6 +257,8 @@ msgid ""
"### How to verify that you have the right version\n"
"Before running the Tor Browser Bundle, you should make sure that you have the right version."
msgstr ""
+"### Come controllare di avere la versione giusta\n"
+"Prima di eseguire il Pacchetto Browser Tor, si dovrebbe controllare di avere la versione giusta."
#. type: Plain text
#: en/tsum.text:102
@@ -348,6 +386,11 @@ msgid ""
"about where you downloaded the package from, how you verified the signature,"
" and the output from GnuPG in an email to help(a)rt.torproject.org."
msgstr ""
+"L'output dovrebbe presentare il messaggio *Good signature*. Una firma non "
+"accettata significa che il file scaricato potrebbe essere stato modificato. "
+"Se si verifica una firma non accettata, si inviino i dettagli sulla "
+"locazione dalla quale si è scaricato il file, sul metodo di verifica della "
+"firma, e sull'output di GnuPG in una email a help(a)rt.torproject.org."
#. type: Plain text
#: en/tsum.text:147
@@ -373,6 +416,8 @@ msgid ""
"### How to use the Tor Browser Bundle\n"
"After downloading the Tor Browser Bundle and extracting the package, you should have a directory with a few files in it. One of the files is an executable called \"Start Tor Browser\" (or \"start-tor-browser\", depending on your operating system)."
msgstr ""
+"### Come usare il Tor Browser Bundle\n"
+"Dopo aver scaricato il Tor Browser Bundle ed averne estratto il contenuto, si dovrebbe avere una directory con alcuni files all'interno. Uno dei files dovrebbe essere un eseguibile chiamato \"Start Tor Browser\" (o \"start-tor-browser\", a seconda del sistema operativo utilizzato)."
#. type: Plain text
#: en/tsum.text:160
@@ -405,6 +450,8 @@ msgid ""
"### What to do when Tor does not connect\n"
"Some users will notice that Vidalia gets stuck when trying to connect to the Tor network. If this happens, make sure that you are connected to the Internet. If you need to connect to a proxy server, see *How to use an open proxy* below."
msgstr ""
+"### Cosa fare quando Tor non si connette\n"
+"Alcuni utenti noteranno che Vidalia si blocca provando a connettersi alla rete Tor. Se succede, assicurarsi innanzitutto di essere connessi ad Internet. Se si ha bisogno di connettersi ad un server proxy, si veda *Come utilizzare un proxy aperto* più avanti."
#. type: Plain text
#: en/tsum.text:174
@@ -477,6 +524,9 @@ msgid ""
"If you need help with figuring out why Tor can't connect, send an email to "
"help(a)rt.torproject.org and include the relevant parts from the log file."
msgstr ""
+"Se si necessita di aiuto per capire perché Tor non riesce a connettersi, si "
+"invii una email a help(a)rt.torproject.org includendo le rilevanti parti del "
+"file di log."
#. type: Plain text
#: en/tsum.text:203
@@ -484,6 +534,8 @@ msgid ""
"### How to find a bridge\n"
"To use a bridge, you will first have to locate one; you can either browse to [bridges.torproject.org](https://bridges.torproject.org/), or you can send an email to bridges(a)torproject.org. If you do send an email, please make sure that you write **get bridges** in the body of the email. Without this, you will not get a reply. Note that you need to send this email from either a gmail.com or a yahoo.com address."
msgstr ""
+"### Come trovare un bridge\n"
+"Per usare un bridge, è innanzitutto necessario trovarne uno; è possibile visitare il sito [bridges.torproject.org](https://bridges.torproject.org/), o mandare un'email a bridges(a)torproject.org. Se si invia una email, ci si assicuri di scrivere **get bridges** nel corpo del messaggio. Senza di questo, non si riceverà alcuna risposta. Si noti che è necessario inviare questa email da un account email presso gmail.com o yahoo.com. "
#. type: Plain text
#: en/tsum.text:208
@@ -504,6 +556,8 @@ msgid ""
"### How to use a bridge\n"
"Once you have a set of bridges to use, open the Vidalia control panel, click on *Settings*, *Network* and tick the box that says *My ISP blocks connections to the Tor network*. Enter the bridges in the box below, hit *OK* and start Tor again."
msgstr ""
+"### Come usare un bridge\n"
+"Una volta ottenuto un'insieme di bridge utilizzabili, si apra il pannello di controllo di Vidalia alla voce *Settings*, *Network* e si spunti la casella che dice *Il mio ISP blocca le connessioni verso la rete Tor*. Si inseriscano i bridges nel campo di testo sottostante, si faccia click su *OK* e si avvii nuovamente Tor."
#. type: Plain text
#: en/tsum.text:220
@@ -549,6 +603,11 @@ msgid ""
"7. Push the *OK* button. Vidalia and Tor are now configured to use a\n"
"proxy to access the rest of the Tor network.\n"
msgstr ""
+"3. Sulla linea *Indirizzo*, si inserisca l'indirizzo del proxy aperto. Questo può essere sia un hostname che un indirizzo IP.\n"
+"4. Si inserisca la porta per il proxy.\n"
+"5. Generalmente, non si ha bisogno di una coppia nome utente e password. Se così non fosse, si inseriscano tali informazioni nei rispettivi campi.\n"
+"6. Si scelga il *Tipo* di proxy che si vuole usare, che sia HTTP/HTTPS, SOCKS4, o SOCKS5.\n"
+"7. Si faccia click sul bottone *OK*. Vidalia e Tor sono ora configurati per utilizzare un proxy per accedere al resto della rete Tor.\n"
#. type: Plain text
#: en/tsum.text:240
@@ -616,6 +675,9 @@ msgid ""
"\".exe\" file in the same directory. Run this file and wait for the Tor "
"Browser Bundle to start."
msgstr ""
+"Una volta terminato il processo di estrazione, si dovrebbe visualizzare un "
+"file \".exe\" appena creato nella stessa cartella. Eseguire questo file ed "
+"attendere che l'esecuzione del Tor Browser Bundle sia avviata."
#. type: Plain text
#: en/tsum.text:281
@@ -634,6 +696,8 @@ msgid ""
"case, you will need to close the old Vidalia and Tor before you can run\n"
"this one.\n"
msgstr ""
+"**Stai già eseguendo Vidalia e Tor**\n"
+"Per esempio, questo può succedere se hai già installato il pacchetto Vidalia ed ora stai tentando di usare il Tor Browser Bundle. In questo caso, sarà necessario chiudere il vecchio Vidalia e Tor prima di far partire quest'ultimo.\n"
#. type: Plain text
#: en/tsum.text:294
@@ -646,6 +710,8 @@ msgid ""
"is unable to restart Tor for you; go into your process or task manager,\n"
"and terminate the Tor process. Then use Vidalia to restart Tor.\n"
msgstr ""
+"**Vidalia è crashato, ma Tor è ancora in esecuzione**:\n"
+"Se la schemata che richiede una password di controllo ha un bottone \"Reset\", si può cliccare sul bottone e Vidalia farà ripartire Tor con una nuova password di controllo casiale. Se non è visualizzato alcun bottone \"Reset\", Vidalia non è utilizzabile per far ripartire Tor. Si apra il proprio gestore di processi e si termini il processo Tor. A seguire, si usi vidalia per far ripartire Tor.\n"
#. type: Plain text
#: en/tsum.text:298
@@ -654,6 +720,9 @@ msgid ""
"[FAQ](https://torproject.org/docs/faq.html#VidaliaPassword) on the Tor "
"Project website."
msgstr ""
+"Per maggiori informazioni, si vedano le "
+"[FAQ](https://torproject.org/docs/faq.html#VidaliaPassword) sul sito del "
+"progetto Tor."
#. type: Plain text
#: en/tsum.text:303
@@ -669,6 +738,10 @@ msgid ""
" over Tor. You need to join the [HTML5 trial](https://www.youtube.com/html5)"
" on the YouTube website before you can use the HTML5 player."
msgstr ""
+"La maggior parte dei video su YouTube funzionano con HTML5, ed è possibile "
+"vedere questi video attraverso Tor. Sarà necessario entrare nel [programma "
+"di prova HTML5](https://www.youtube.com/html5) sul sito di YouTube prima di "
+"poter usare il player HTML5."
#. type: Plain text
#: en/tsum.text:312
@@ -677,6 +750,9 @@ msgid ""
"close it, so you will need to re-join the trial the next time you run the "
"Tor Browser Bundle."
msgstr ""
+"Si noti che il browser non terrà memoria della presa di partecipazione al "
+"programma una volta terminatane l'esecuzione, pertanto sarà necessario "
+"ripeterla alla prossima esecuzione del Tor Browser Bundle."
#. type: Plain text
#: en/tsum.text:315
@@ -684,6 +760,8 @@ msgid ""
"Please see the [Torbutton FAQ](https://www.torproject.org/torbutton"
"/torbutton-faq.html#noflash) for more information."
msgstr ""
+"Si vedano le [Torbutton FAQ](https://www.torproject.org/torbutton/torbutton-"
+"faq.html#noflash) per maggiori informazioni."
#. type: Plain text
#: en/tsum.text:321
1
0
commit f2d3c2b4e246c2c70700699af71d3eb944cc1fd0
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Nov 13 20:15:04 2011 +0000
Update translations for tsum
---
it/tsum.po | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 88 insertions(+), 3 deletions(-)
diff --git a/it/tsum.po b/it/tsum.po
index 68a0fa7..9c098dc 100644
--- a/it/tsum.po
+++ b/it/tsum.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <a.n0on3(a)gmail.com>, 2011.
# Luca <luca(a)jeckodevelopment.it>, 2011.
# <tru74368(a)yahoo.com>, 2011.
msgid ""
@@ -10,8 +11,8 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2011-11-05 17:16+0000\n"
-"PO-Revision-Date: 2011-11-05 21:28+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"PO-Revision-Date: 2011-11-13 20:14+0000\n"
+"Last-Translator: n0on3 <a.n0on3(a)gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/torproject/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -67,7 +68,7 @@ msgstr ""
#. type: Plain text
#: en/tsum.text:21
msgid ""
-msgstr ""
+msgstr ""
#. type: Plain text
#: en/tsum.text:26
@@ -116,6 +117,11 @@ msgid ""
"and requires no installation. You download the bundle, extract the archive, "
"and start Tor."
msgstr ""
+"Il pacchetto raccomandato per la maggior parte degli utenti è il [Tor "
+"Browser Bundle](https://www.torproject.org/projects/torbrowser.html). Questo"
+" pacchetto contiene un browser prevonfigurato per navigare in internet in "
+"modo sicuro attraverso Tor, e non richiede installazione. Tutto ciò che è "
+"necessario è scaricare il pacchetto, estrarre il contenuto, ed eseguire Tor."
#. type: Plain text
#: en/tsum.text:48
@@ -139,6 +145,9 @@ msgid ""
"**macos-i386**), and Linux (write **linux-i386** for 32-bit systems or "
"**linux-x86_64** for 64-bit systems)."
msgstr ""
+"E' inoltre possibile richiedere il Tor Browser Bundle per Mac OS X (scrivere"
+" **macos-i386**), e Linux (write **linux-i386** per sistemi a 32-bit o "
+"**linux-x86_64** per sistemi a 64-bit)."
#. type: Plain text
#: en/tsum.text:61
@@ -146,6 +155,9 @@ msgid ""
"If you want a translated version of Tor, write **help** instead. You will "
"then receive an email with instructions and a list of available languages."
msgstr ""
+"Se si necessita di una versione tradotta di Tor, si scriva invece **help** "
+"per ricevere una email con le istruzioni ed una lista delle lingue in cui il"
+" software è disponibile."
#. type: Plain text
#: en/tsum.text:67
@@ -218,6 +230,10 @@ msgid ""
"will allow you to verify the file you've downloaded is exactly the one that "
"we intended you to get."
msgstr ""
+"Il software che si riceve è accompagnato da un file con lo stesso nome del "
+"pacchetto e con l'estensione **.asc.**. Tale .asc file è una firma GPG, e "
+"permette di verificare se il file che si è scaricato è esattamente quello "
+"che si desiderava."
#. type: Plain text
#: en/tsum.text:105
@@ -226,6 +242,8 @@ msgid ""
"Before you can verify the signature, you will have to download and\n"
"install GnuPG: \n"
msgstr ""
+"Prima di poter verificare la firma, è necessario scaricare ed installare "
+"GnuPG.\n"
#. type: Plain text
#: en/tsum.text:109
@@ -235,6 +253,9 @@ msgid ""
"**Mac OS X**: [http://macgpg.sourceforge.net/](http://macgpg.sourceforge.net/) \n"
"**Linux**: Most Linux distributions come with GnuPG preinstalled.\n"
msgstr ""
+"**Windows**: [http://gpg4win.org/download.html](http://gpg4win.org/download.html) \n"
+"**Mac OS X**: [http://macgpg.sourceforge.net/](http://macgpg.sourceforge.net/) \n"
+"**Linux**: La maggior parte delle distribuzioni di GNU/Linux sono fornite con GnuPG preinstallato.\n"
#. type: Plain text
#: en/tsum.text:112
@@ -242,6 +263,9 @@ msgid ""
"Please note that you may need to edit the paths and the commands used below "
"to get it to work on your system."
msgstr ""
+"Si noti che potrebbe essere necessario modificare il percorso dei files o i "
+"comandi mostrati in seguito per permetterne il funzionamento sul vostro "
+"sistema."
#. type: Plain text
#: en/tsum.text:115
@@ -249,23 +273,30 @@ msgid ""
"Erinn Clark signs the Tor Browser Bundles with key 0x63FEE659. To import "
"Erinn's key, run:"
msgstr ""
+"Erinn Clark firma il Tor Browser Bundles con la chiave 0x63FEE659. Per "
+"importare la chiave di Erinn si esegua:"
#. type: Plain text
#: en/tsum.text:117
#, no-wrap
msgid "\tgpg --keyserver hkp://keys.gnupg.net --recv-keys 0x63FEE659\n"
msgstr ""
+"<span class=\"whitespace other\" title=\"Tab\">»</span>gpg --keyserver "
+"hkp://keys.gnupg.net --recv-keys 0x63FEE659\n"
#. type: Plain text
#: en/tsum.text:119
msgid "After importing the key, verify that the fingerprint is correct:"
msgstr ""
+"Dopo aver importato la chiave, se ne verifichi la correttezza dell'impronta:"
#. type: Plain text
#: en/tsum.text:121
#, no-wrap
msgid "\tgpg --fingerprint 0x63FEE659\n"
msgstr ""
+"<span class=\"whitespace other\" title=\"Tab\">»</span>gpg --fingerprint "
+"0x63FEE659\n"
#. type: Plain text
#: en/tsum.text:123
@@ -283,6 +314,12 @@ msgid ""
"\tuid Erinn Clark <erinn(a)double-helix.org>\n"
"\tsub 2048R/EB399FD7 2003-10-16\n"
msgstr ""
+"<span class=\"whitespace other\" title=\"Tab\">»</span>pub 2048R/63FEE659 2003-10-16\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span> Key fingerprint = 8738 A680 B84B 3031 A630 F2DB 416F 0610 63FE E659\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>uid Erinn Clark <erinn(a)torproject.org>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>uid Erinn Clark <erinn(a)debian.org>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>uid Erinn Clark <erinn(a)double-helix.org>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>sub 2048R/EB399FD7 2003-10-16\n"
#. type: Plain text
#: en/tsum.text:132
@@ -290,6 +327,8 @@ msgid ""
"To verify the signature of the package you downloaded, run the following "
"command:"
msgstr ""
+"Per verificare la firma del pacchetto scaricato, si eseguano i seguenti "
+"comandi:"
#. type: Plain text
#: en/tsum.text:134
@@ -298,6 +337,8 @@ msgid ""
"\tgpg --verify tor-browser-2.2.33-2_en-US.exe.asc tor-browser-2.2.33-2_en-"
"US.exe\n"
msgstr ""
+"<span class=\"whitespace other\" title=\"Tab\">»</span>gpg --verify tor-"
+"browser-2.2.33-2_en-US.exe.asc tor-browser-2.2.33-2_en-US.exe\n"
#. type: Plain text
#: en/tsum.text:140
@@ -318,6 +359,13 @@ msgid ""
"want to make sure that the version number on the top line of the changelog "
"file matches the version number in the filename."
msgstr ""
+"Una volta verificata la firma e visto il messaggio *\"Good signature\"*, si "
+"proceda all'estrazione del pacchetto. Si dovrebbe riscontrare una directory "
+"con un nome simile a **tor-browser_en-US**. All'interno, si dovrebbe trovare"
+" un'altra directory chiamata **Docs**, contenente un file chiamato "
+"**changelog**. Ci si potrebbe voler assicurare che il numero di versione "
+"nella prima linea del file changelog corrisponda al numero di versione nel "
+"nome del file del pacchetto."
#. type: Plain text
#: en/tsum.text:153
@@ -335,6 +383,11 @@ msgid ""
"[https://check.torproject.org/](https://check.torproject.org/). You can now "
"browse the Internet through Tor."
msgstr ""
+"All'avvio del Tor Browser Bundle, verrà inizialmente visualizzata la "
+"schermata di avvio di Vidalia che si connette alla rete Tor. A seguire, si "
+"potrà osservare un browser che conferma l'utilizzo di Tor, visualizzando il "
+"sito [https://check.torproject.org/](https://check.torproject.org/). E' ora "
+"possibile navigare in Internet attraverso Tor."
#. type: Plain text
#: en/tsum.text:163
@@ -343,6 +396,8 @@ msgid ""
"*Please note that it is important that you use the browser that comes\n"
"with the bundle, and not your own browser.*\n"
msgstr ""
+"*ATTENZIONE! E' molto importante che si utilizzi il browser fornito nel "
+"pacchetto e non il proprio!!*\n"
#. type: Plain text
#: en/tsum.text:169
@@ -359,6 +414,10 @@ msgid ""
"*Message Log* and select the *Advanced* tab. It may be that Tor won't "
"connect because:"
msgstr ""
+"Se la normale connessione ad internet funziona, ma Tor non riesce a "
+"connettersi alla rete, si provi quanto segue: si apra il pannello di "
+"controllo di Visalia, si faccia click su *Message Log* and select the "
+"*Advanced* tab. It may be that Tor won't connect because:"
#. type: Plain text
#: en/tsum.text:178
@@ -368,6 +427,10 @@ msgid ""
"system is correct, and restart Tor. You may need to synchronize your\n"
"system clock with an Internet time server. \n"
msgstr ""
+"**L'orologio di sistema è disattivato**: Ci si assicuri che data ed ora sul "
+"proprio computer siano configurate correttamente, e si riavvii Tor. Potrebbe"
+" essere necessario sincronizzare il proprio orologio di sistema con un "
+"Internet time server. \n"
#. type: Plain text
#: en/tsum.text:183
@@ -378,6 +441,11 @@ msgid ""
"*Network*, and tick the box that says *My firewall only lets me connect\n"
"to certain ports*. \n"
msgstr ""
+"**Ci si trova dietro un firewall con restrizioni**: PEr dire a Tor di "
+"provare solo con le porte 80 e 443, si aprea il pannello di controllo di "
+"Vidalia, si faccia click su *Settings* e *Network*, e si spunti la casella "
+"che dice *Il mio firewall mi permette di connettermi solo a determinate "
+"porte*. \n"
#. type: Plain text
#: en/tsum.text:187
@@ -387,6 +455,9 @@ msgid ""
"anti-virus program is not preventing Tor from making network\n"
"connections.\n"
msgstr ""
+"**Il proprio programma anti-virus sta bloccando Tor**: Ci si assicuri che il"
+" proprio programma anti-virus non stia impedendo a Tor di effettuare "
+"connessioni di rete.\n"
#. type: Plain text
#: en/tsum.text:191
@@ -395,6 +466,10 @@ msgid ""
"(ISP) is blocking Tor. Very often this can be worked around with **Tor "
"bridges**, hidden relays that aren't as easy to block."
msgstr ""
+"Se Tor continua a non funzionare, è probabile che il proprio Internet "
+"Service Provider (ISP) stia bloccando Tor. Molto spesso, tale circostanza "
+"può essere bypassata solo utilizzando i **Tor bridges**, dei relais nascosti"
+" difficili da bloccare."
#. type: Plain text
#: en/tsum.text:195
@@ -418,6 +493,10 @@ msgid ""
"guarantee that the bridge you are using now will work tomorrow, so you "
"should make a habit of updating your list of bridges every so often."
msgstr ""
+"Configurare più di un indirizzo di bridge renderà la propria connessione Tor"
+" più stabile, nel caso alcuni bridges diventino non raggiungibili. Non c'è "
+"garanzia infatti che il bridge che si usa sia ancora attivo domani, pertanto"
+" è buona pratica aggiornare spesso la lista dei bridges."
#. type: Plain text
#: en/tsum.text:214
@@ -439,16 +518,22 @@ msgid ""
"The steps below assume you have a functional Tor/Vidalia configuration, and "
"you have found a list of HTTPS, SOCKS4, or SOCKS5 proxies."
msgstr ""
+"I seguenti passi assumono che si abbia una configurazione funzionante di "
+"Tor/Vidalia, e che si abbia a disposizione una lista di proxy HTTPS/SOCKS4 o"
+" SOCKS5."
#. type: Bullet: '1. '
#: en/tsum.text:235
msgid "Open the Vidalia control panel, click on *Settings*."
msgstr ""
+"Si apra il pannelo di controllo di Vidalia, si faccia click su *Settings*."
#. type: Bullet: '2. '
#: en/tsum.text:235
msgid "Click *Network*. Select *I use a proxy to access the Internet*."
msgstr ""
+"Si faccia click su *Network*. Si selezioni *Utilizzo un proxy per accedere "
+"ad Internet*."
#. type: Plain text
#: en/tsum.text:235
1
0
commit a589c51fea22e5661ab3a855acceab14f3686ef4
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Nov 13 19:45:04 2011 +0000
Update translations for tsum
---
cs/tsum.po | 22 +++++++++++++++++++++-
1 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/cs/tsum.po b/cs/tsum.po
index efbdd4a..fa90ab5 100644
--- a/cs/tsum.po
+++ b/cs/tsum.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2011-11-05 17:16+0000\n"
-"PO-Revision-Date: 2011-11-13 18:56+0000\n"
+"PO-Revision-Date: 2011-11-13 19:19+0000\n"
"Last-Translator: Sanky <gsanky+transifex(a)gmail.com>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
"MIME-Version: 1.0\n"
@@ -82,6 +82,9 @@ msgid ""
"The green monitors represent relays in the Tor network, while the three keys"
" represent the layers of encryption between the user and each relay."
msgstr ""
+"Tento obrázek ilustruje uživatele brouzdajícího po internetu přes Tor. "
+"Zelené monitory reprezentují relaye v síti Tor, zatímco tři klíče "
+"reprezentují vrstvy zašifrování mezi uživatelem a každým relayem."
#. type: Plain text
#: en/tsum.text:31
@@ -627,6 +630,11 @@ msgid ""
"3. Click on the *View* tab\n"
"4. Uncheck *Hide extensions for known file types* and click *OK*"
msgstr ""
+"### Windows XP\n"
+"1. Otevřte *Tento počítač*\n"
+"2. Klikněte na *Nástroje* a vyberte *Možnosti složky...* v menu\n"
+"3. Klikněte na tab *Zobrazení*\n"
+"4. Odškrtněte *Skrýt příponu souborů známých typů* a klikněte na *OK*"
#. type: Plain text
#: en/tsum.text:260
@@ -637,6 +645,11 @@ msgid ""
"3. Click on the *View* tab\n"
"4. Uncheck *Hide extensions for known file types* and click *OK*"
msgstr ""
+"### Windows Vista\n"
+"1. Otevřte *Počítač*\n"
+"2. Klikněte na *Organizovat* a vyberte *Nastavení složky a vyhledávání* v menu\n"
+"3. Klikněte na tab *Zobrazení*\n"
+"4. Odškrtněte *Skrýt příponu souborů známých typů* a klikněte na *OK*"
#. type: Plain text
#: en/tsum.text:266
@@ -647,6 +660,11 @@ msgid ""
"3. Click on the *View* tab\n"
" 4. Uncheck *Hide extensions for known file types* and click *OK*"
msgstr ""
+"### Windows 7\n"
+"1. Otevřte *Počítač*\n"
+"2. Klikněte na *Organizovat* a vyberte *Nastavení složky a vyhledávání* v menu\n"
+"3. Klikněte na tab *Zobrazení*\n"
+"4. Odškrtněte *Skrýt příponu souborů známých typů* a klikněte na *OK*"
#. type: Plain text
#: en/tsum.text:273
@@ -770,5 +788,7 @@ msgid ""
"### Why Tor is slow\n"
"Tor can sometimes be a bit slower than your normal Internet connection. After all, your traffic is sent through many different countries, sometimes across oceans around the world!"
msgstr ""
+"### Proč je Tor pomalý\n"
+"Tor může občas být o dost pomalejší než vaše normální Internetové připojení. Konec konců jsou všechny vaše data přenášeny skrz mnoho různých zemí, někdy přes oceány a kolem světa!"
1
0