pymozrepl¶
pymozrepl는 Firefox MozREPL Add-on에 접근하기 위한 Python Interface를 제공합니다.




mozrepl 모듈을 설치하려면 설치 문서를 참조하십시오. 소스 코드를 다운 받거나 개발에 참여하려면 다음 페이지를 보십시오: https://github.com/Thestars3/pymozrepl.
소개¶
pymozrepl는 Firefox MozREPL Add-on에 접근하기 위한 Python Interface를 제공합니다.




특징¶
- firefox mozrepl에 연결하기 위한 과정을 단축 할 수 있습니다.
- firefox mozrepl에 값을 전달하고 반환받은 결과에서 불필요한 텍스트를 자동으로 제거해줍니다.
- firefox mozrepl에 값을 전달하고 반환받은 결과를 Python의 기본 타입에 맞게 변환해줍니다.
- javascript object에 접근 하기 위한 인터페이스를 제공해줍니다.
- 기타 등등...
사용 예¶
먼저, mozrepl Firefox Add-on을 addons.mozilla.org 로 부터 설치한뒤, 서버를 시작합니다.
>>> import mozrepl
>>> repl = mozrepl.Mozrepl()
>>> repl.execute('window')
[object ChromeWindow] - {0: {...}, 1: {...}, 2: {...}, 3: {...}, 4: {...}, close: function() {...}, stop: function() {...}, ...}
>>> list(repl.execute(u'["a", 1, 2, 3, 4]'))
[u'a', 1, 2, 3, 4]
>>> repl.execute('content').document.title
u'pymozrepl \\u2014 mozrepl 0.1a8 documentation'
>>> import mozrepl.util
>>> for cookie in mozrepl.util.getCookiesFromHost(repl, '.cpan.org'):
... break
...
>>> cookie
Cookie(version=0, name=u'css', value ...
도움말¶
다음 문서를 참조 하십시오: http://pymozrepl.readthedocs.org/index.html.
수정사항¶
changelog.rst 문서를 참조하세요.
개발자¶
별님 <w7dn1ng75r@gmail.com>
파이썬 환경¶
오직 2.7 버전대에서만 사용 할 수 있습니다.
소스 코드¶
소스 코드는 다음 사이트에 올려져 있습니다: https://github.com/Thestars3/pymozrepl.
설치¶
Note
mozrepl 모듈이 지원하는 파이썬 버전은 2.7입니다.
참조¶
멤버들¶
- class mozrepl.Mozrepl(port=4242, host=u'127.0.0.1')¶
Bases: object
Firefox MozREPL Add-on에 대한 인터페이스를 제공하는 클래스.
with 구문을 지원합니다.
Parameters: - port (int) – mozrepl Firefox Add-on의 포트.
- host (unicode) – mozrepl Firefox Add-on의 호스트.
- DEFAULT_HOST = u'127.0.0.1'¶
- DEFAULT_PORT = 4242¶
- connect(port=None, host=None)¶
mozrepl Firefox Add-on과 연결합니다.
연결 대상은 최초 연결된 대상과 같아야 합니다.
Parameters: - port – mozrepl Firefox Add-on의 포트. 생략시, 기존 값을 사용합니다.
- port – mozrepl Firefox Add-on의 호스트. 생략시, 기존 값을 사용합니다.
- disconnect()¶
mozrepl Firefox Add-on과의 연결을 일시적으로 끊습니다.
서버에 저장된 상태까지 삭제하려면, 이 객체를 삭제해야 합니다.
- execute(command)¶
명령을 실행합니다.
Attention
오브젝트의 메소드를 사용할때, ‘repl.execute(“repl.home”)()’과 같이 함수의 메소드를 바로 반환 받은 뒤 사용 할 수 없습니다. 이와 같은 방식으로 사용하려면, ‘repl.execute(“repl.home.call”)(Raw(“repl”))’와 같이 호출 오브젝트를 명시적으로 넘겨주거나, ‘repl.execute(“repl”).home()’과 같이 pymozrepl의 자동 바인딩 기능을 사용하십시오.
Attention
하나의 pymozrepl 객체는 독립된 하나의 문맥을 가집니다. 이 문맥은 Firefox mozrepl에서 제공하는 현재 문맥과는 다르다는 점을 주의하십시오.
Attention
javascript repl object를 사용하지 마십시오.
Parameters: command (unicode) – 명령. Raises mozrepl.Exception: mozrepl Firefox Add-on에서 오류를 던질 경우. Returns: Object : mozrepl Firefox Add-on에서 반환받은 값이 object인 경우. Returns: Array : mozrepl Firefox Add-on에서 반환받은 값이 array인 경우. Returns: Function : mozrepl Firefox Add-on에서 반환받은 값이 function인 경우. Returns: 그 외에 string, number, bool 등의 기본값은 python에서 대응되는 적절한 기본 타입(int, bool, unicode 등)으로 변환하여 돌려줍니다.
- class mozrepl.Exception(error)¶
Bases: exceptions.Exception
mozrepl Firefox Add-on에서 반환한 오류에 대한 정보를 담는 클래스.
javascript Error 객체를 참조 하듯이 속성을 참조하십시오. 단, 메소드에 대한 참조는 지원하지 않습니다.
만약, 현재 객체에 존재하고 있는 이름과 같은 이름의 javascript object 속성에 접근하려면, __getitem__ 메소드를 사용하십시오.
특정 속성이 존재하는가를 검사하려면 __contains__ 메소드를 사용하십시오.
type 모듈¶
- class mozrepl.type.Object(repl, uuid)¶
Bases: object
javascript object에 대한 인터페이스를 제공합니다.
- 사전 형식으로 속성에 접근할 수 있습니다(__getitem__, __setitem__, __delitem__).
- 속성 형식으로 속성에 접근 할 수 있습니다(__getattr__, __setattr__, __delattr__).
- __eq__, __contains__ 메소드가 구현되어 있습니다.
만약, 이 객체에 존재하는 속성의 이름과 같은 자바스크립트 오브젝트의 속성에 접근하려면, 사전 형식으로 원소에 접근하십시오.
사용 예는 다음과 같습니다.
>>> import mozrepl >>> repl = mozrepl.Mozrepl() >>> a = repl.execute('repl') >>> b = repl.execute('repl') >>> a == b # __eq__ True >>> '_name' in a # __contains__ True >>> a._name # __getattr__ u'repl' >>> a['_name'] # __getitem__ u'repl' >>> a['_name'] = 'pymozrepl' # __setitem__ >>> a['_name'] u'pymozrepl' >>> del a._name # __delattr__ >>> a._name None >>> for key, value in a: # __iter__ ...
- __iter__()¶
javascript Object에 iterator하게 접근합니다.
Yield: value; 오브젝트에 ‘__iterator__’ 속성이 존재한다면, Iterator를 사용하여 작업을 수행합니다. Yield: 별도의 이터레이터가 정의되어 있지 않다면, (key, value) 쌍을 전달합니다.
- __unicode__()¶
자바스크립트에서 이 오브젝트에 대한 참조값.
만약, 자바스크립트에서 직접 이 오브젝트에 대해 접근하기를 원한다면, 이 속성을 통해 변수 이름을 얻을 수 있습니다. 예컨데, 다음과 같이 사용 할 수 있습니다.
>>> import mozrepl >>> repl = mozrepl.Mozrepl() >>> obj = repl.execute('window') >>> unicode(obj) u'__pymozrepl_c8d7323280c54d09809e2dd7d34d1c70.ref["1e1c7ae3-c1fc-4664-b57f-1281bdc1c996"]' >>> repl.execute('var value = {reference}'.format(reference=obj))
- class mozrepl.type.Array(repl, uuid)¶
Bases: mozrepl.type.object.Object
javascript array에 대한 인터페이스를 제공합니다.
__len__, __iter__ 메소드가 구현되어 있습니다.
사용 예는 다음과 같습니다.
>>> import mozrepl >>> repl = mozrepl.Mozrepl() >>> array = repl.execute('[1,2,3,4,5,10]') >>> len(array) # __len__ 6 >>> list(array) # __iter__ [1, 2, 3, 4, 5, 10]
- __iter__()¶
javascript Object에 iterator하게 접근합니다.
Yield: value; 0 ~ 마지막 값까지 yield합니다.
- class mozrepl.type.Function(repl, uuid)¶
Bases: mozrepl.type.object.Object
javascript function에 대한 인터페이스를 제공합니다.
사용 예는 다음과 같습니다.
>>> import mozrepl >>> repl = mozrepl.Mozrepl() >>> func = repl.execute('(function(){ return "mozrepl"; })') #__call__ >>> func() u'mozrepl' >>> repl.execute('window').toString() #__call__ u'[object ChromeWindow]'
- __call__(*args)¶
javascript Function object를 실행합니다.
입력하는 각 인자는 convertToJs() 함수에서 허용하는 형식을 준수해야 합니다.
- class mozrepl.type.Raw(code)¶
자바스크립트 코드를 담는 클래스.
이 클래스로 생성된 코드는 convertToJs() 함수에 의해 변환되지 않고, 입력된 그대로 전달되게 됩니다.
Parameters: code (unicode) – 자바스크립트 코드.
util 모듈¶
- mozrepl.util.convertToJs(obj)¶
입력받은 값을 javascript에서 사용 가능한 값으로 변환합니다.
Parameters: obj (Object, Function, Array, Raw 외 python 기본 타입.) – 변환할 값. 만약 list와 tuple타입을 인자로 준다면, 포함된 값은 convertToJs() 함수가 변환 할 수 있는 값이어야 합니다. Returns: JSON string Return type: unicode
- mozrepl.util.getAllTabs(repl)¶
접속한 브라우져에 존재하는 모든 탭 오브젝트를 가져옵니다.
Parameters: repl (Mozrepl) – mozrepl 객체. Yield: 각 탭 Object 객체.
- mozrepl.util.getCookiesFromHost(repl, host)¶
Returns an generator of cookies that would be returned to a given host, ignoring the cookie flags isDomain, isSecure, and isHttpOnly. Therefore, if the specified host is “weather.yahoo.com”, host or domain cookies for “weather.yahoo.com” and “yahoo.com” would both be returned, while a cookie for “my.weather.yahoo.com” would not.
Parameters: - repl (Mozrepl) – mozrepl.Mozrepl 객체
- host (unicode) – The host unicode string to look for, such as “google.com”. This should consist only of the host portion of the URI and should not contain a leading dot, port number, or other information.
Yield: An cookielib.Cookie objects representing the matching cookies.
- mozrepl.util.openTab(repl, url, isPrivate=False, inNewWindow=False, inBackground=False, isPinned=False)¶
Opens a new tab. The new tab will open in the active window or in a new window, depending on the inNewWindow option.
Parameters: - repl (Mozrepl) – mozrepl 객체.
- url (unicode) – String URL to be opened in the new tab. This is a required property.
- isPrivate (bool) – bool which will determine whether the new tab should be private or not. If your add-on does not support private browsing this will have no effect. See the private-browsing documentation for more information. Defaults to false.
- inNewWindow (bool) – If present and true, a new browser window will be opened and the URL will be opened in the first tab in that window. This is an optional property.
- inBackground (bool) – If present and true, the new tab will be opened to the right of the active tab and will not be active. This is an optional property.
- isPinned (bool) – If present and true, then the new tab will be pinned as an app tab.
변경사항¶
v1.2.3¶
- 연결 되지 않은 상태에서 객체를 삭제 할때 발생하던, ‘Exception AttributeError: “‘Mozrepl’ object has no attribute ‘_baseVarname’” in <bound method Mozrepl.__del__ of Mozrepl(port=4242, host=u‘127.0.0.1’)> ignored’ 오류 수정. [tb69wn6127]
v1.2.2¶
- Mozrepl 에서 with 구문 사용시 발생하던 exit에러 수정. [tb69wn6127]
v1.2.1¶
- __iter__ 에서 기본값으로 ‘Iterator’를 사용하도록 수정. [tb69wn6127]
- 유니코드 문자열이 포함된 값을 반환받을 경우, 발생하던 json 파싱 오류 수정. [tb69wn6127]
v1.2.0¶
- mozrepl.util 모듈에 openTab 함수 추가. [tb69wn6127]
v1.1.3¶
- tpye.Object의 __repr__ 메소드에서 문자열이 아닌 오브젝트가 반환되는 버그를 수정. [tb69wn6127]
v1.1.2¶
- 하나 초과의 연결이 동일 Firefox MozREPL(Firefox MozREPL 1.1.2) 서버에 존재할 시 발생하던, ‘mozrepl.exception.Exception: repl is not defined’ 오류 수정. [tb69wn6127]
v1.1.1¶
- Firefox MozREPL의 접속 카운트가 1 초과인 상태에서 접속할때, 때때로 발생하는 ‘ValueError: No JSON object could be decoded’ 오류 수정. [tb69wn6127]
- Object타입 참조자에서 ‘__iterator__’ 속성이 포함된 오브젝트를 iter함수를 통해 접근 할경우, ‘__iterator__’ 속성을 사용하도록 개선. [tb69wn6127]
- Object 타입의 변수의 repr를 확인 할 때, null, object를 제외한 값이 ‘[Exception!]’로 표시되던 버그 수정. [tb69wn6127]
- Exception에서 발생하던 ‘TypeError: ‘NoneType’ object is not callable’ 오류 수정. [tb69wn6127]
- Exception에서 정상적으로 오류 메시지가 표시되지 않던 점 수정. [tb69wn6127]
- 함수를 execute 메소드를 통해 받을 때, 발생하던 “KeyError: u’refUuid’” 오류 수정. [tb69wn6127]
- undefined, null을 반환받지 못하던 버그 수정. [tb69wn6127]
v1.1.0¶
- mozrepl.util.getAllTabs 함수 추가. [tb69wn6127]
- mozrepl.Mozrepl 객체가 삭제 될때, 정상적으로 설정 변수가 제거되지 않던 점 수정. [tb69wn6127]
- 빈 object에 대한 repr을 구할 때, ‘TypeError: __repr__ returned non-string’ 오류가 나던 버그 수정. [tb69wn6127]
v1.0.6¶
- 오류가 발생했을때, 정상적으로 전달받지 못하던 버그 수정. [tb69wn6127]
- mozrepl.util.getCookiesFromHost 함수가 정상적으로 작동하지 않던 버그 수정. [tb69wn6127]
v1.0.5¶
- mozrepl.Exception 클래스에 __getitem__, __contains__ 메소드 추가. [tb69wn6127]
v1.0.4¶
mozrepl.Mozrepl.execute 메소드를 사용할때, 반환받는 값에 현재 프롬프트(‘repl\d*>’)가 포함되면 비정상적으로 작동하 던 점 수정. [tb69wn6127]
mozrepl.Mozrepl.execute 메소드의 반환 받는 값에서 -inf 등의 타입과 long 등을 지원 하도록 개선. [tb69wn6127]
- 오류 처리를 향상. [tb69wn6127]
- mozrepl.Exception 클래스에서 javascript 오류 객체의 속성 정보를 확인 할 수 있게 함. [tb69wn6127]
- 일부 오류의 경우 오류 이름을 가져오지 못한 던 점 수정. [tb69wn6127]
mozrepl.Mozrepl.connect 메소드 사용시, 기존 문맥을 소실하던 버그 수정. [tb69wn6127]
v1.0.3¶
- mozrepl.util.convertToJs 함수가 json 규격을 준수하도록 수정. [tb69wn6127]
v1.0.2¶
- mozrepl.util.convertToJs 함수에서 long 타입을 처리 할 수 있도록 개선. [tb69wn6127]
v1.0.1¶
- mozrepl.util.convertToJs 함수에서 bool 타입을 처리 할 수 있도록 개선. [tb69wn6127]
v1.0.0¶
- 정식 버전 릴리즈. [tb69wn6127]
- mozrepl.util.getCookiesFromHost 메소드의 수행 속도를 향상. [tb69wn6127]
v0.1b7¶
- Object 클래스에 makeNotinited 클래스 메소드 추가. [tb69wn6127]
v0.1b6¶
- Mozrepl.execute 메소드 사용시 발생하던, ‘UnicodeEncodeError: ‘ascii’ codec can’t encode character’ 오류 수정. [tb69wn6127]
v0.1b5¶
- mozrepl.util.convertToJs 함수에서 dict 타입도 처리 할 수 있게 함. [tb69wn6127]
- mozrepl.type.Raw로 mozrepl.util.convertToJs 함수에서 원본 코드가 그대로 전달될 수 있도록 함. [tb69wn6127]
v0.1b4¶
- object 타입에서 reference 속성이 제거되고, 그 기능을 Object.__unicode__ 메소드가 담당하게됨. [tb69wn6127]
v0.1b3¶
- util.getCookiesFromHost 속도를 향상. [tb69wn6127]
v0.1b2¶
- tuple과 list를 javascript 문장으로 변환하는 기능을 추가함. [tb69wn6127]
- type.Function.__call__ 메소드에서 kwargs 인자를 제거. [tb69wn6127]
- util.getCookiesFromHost 함수가 정상 작동 되도록 업데이트. [tb69wn6127]
- Mozrepl.execute에서 ‘IOError: [Errno 24] Too many open files’ 오류가 발생하던 버그 수정. [tb69wn6127]
v0.1b1¶
- Object iterator가 정상적으로 작동하지 않는 문제 해결. [tb69wn6127]
v0.1a14¶
- 함수 바인딩 기능을 execute명령에서 제거하고, Object의 속성에 존재하는 메소드에 대해서 바인딩되도록 수정. [tb69wn6127]
v0.1a13¶
- 기존에 Mozrepl.execute 메소드에서 for이나 while과 같은 연산자가 처음에 오는 js코드를 넘기면 발생하던 무한 응답 지연 현상 수정. [tb69wn6127]
- Firefox MozREPL 1.1.2에서 발생하는 UNICODE 문자열 오류(ASCII 코드 범위를 넘어서는 문자열을 사용하면 발생하는 ‘socket.error: [Errno 32] Broken pipe’ 오류 또는 무한 응답 대기 현상)를 회피 처리. [tb69wn6127]
v0.1a12¶
- mozrepl.Mozrepl.execute 메소드에서 type 옵션을 제거함. [tb69wn6127]
- nolastcmd 옵션의 기능을 자동 분석 프로세스가 담당하게 됨. [tb69wn6127]
- noreturn 옵션의 기능을 _rawExecute 메소드가 담당하게 됨. [tb69wn6127]
- repr 옵션의 기능을 _rawExecute 메소드가 담당하게 됨. [tb69wn6127]
v0.1a11¶
- 설치 오류 수정. [tb69wn6127]
v0.1a10¶
- type.Function에 __call__메소드 구현 마무리. [tb69wn6127]
v0.1a9¶
- 리턴 받은 js object에 __del__ 메소드를 구현. [tb69wn6127]
- js array에 __len__ 메소드 구현. [tb69wn6127]
- js object에 __contains__, __eq__ 메소드 구현. [tb69wn6127]
v0.1a8¶
- array type을 추가. [tb69wn6127]
- util.convertToCmd 함수를 제거. [tb69wn6127]
v0.1a7¶
- mozrepl.type.Function에서 발생하던 ‘TypeError: context is undefined’ 오류를 수정. [tb69wn6127]
v0.1a6¶
mozrepl.Mozrepl에 __repr__ 메소드를 구현. [tb69wn6127]
mozrepl.type.Object에서 발생하던 ‘ReferenceError: x is not defined’ 오류 수정. [tb69wn6127]
mozrepl.util.convertToJs 함수를 추가. [tb69wn6127]
- mozrepl.type.Function의 __call__ 메소드를 개선함. [tb69wn6127]
- 함수 및 오브젝트를 전달 가능해짐. [tb69wn6127]
- 문자열에 ‘문자가 포함되어 있을 경우를 처리함. [tb69wn6127]
- int, None, float, str, mozrepl.type.Object 등의 형식을 인자로 줄 수 있도록 수정. [tb69wn6127]
v0.1a5¶
- mozrepl.type.Function에서 발생하던 ‘TypeError: must be type, not Function’ 오류를 수정. [tb69wn6127]
- mozrepl.Mozrepl.for_ 메소드를 제거. [tb69wn6127]
- mozrepl.Mozrepl.execute 메소드에서 빈 Array와 같은 오브젝트도 정상적으로 처리하지 못하던 점 수정. [tb69wn6127]
- mozrepl.type.Object에서 숫자를 통해 원소에 접근하고자 할때, 응답을 하지 않던 문제 수정. [tb69wn6127]
v0.1a4¶
- Mozrepl.execute 메소드에서 float형을 처리할 수 있도록 개선. [tb69wn6127]
- Mozrepl.execute 메소드에서 string형 파싱시 발생하던 콰우팅 문제 수정. [tb69wn6127]
v0.1a3¶
- Mozrepl.execute 메소드에 type옵션을 추가함. [tb69wn6127]
- Mozrepl.execute 메소드에서 object타입을 처리하도록 수정. [tb69wn6127]
- Mozrepl.execute 메소드에서 function타입을 처리하도록 수정. [tb69wn6127]
v0.1a2¶
- Mozrepl.execute 메소드에서 mozrepl에서 string형태로 값을 반환받을 경우 “문자가 포함된 경우, 해당 문자까지만 잘라내는 경우 수정. [tb69wn6127]
v0.1a1¶
- pymozrepl 개발 시작. [tb69wn6127]